diff options
Diffstat (limited to 'drivers/net/wireless/mwifiex/sta_cmd.c')
-rw-r--r-- | drivers/net/wireless/mwifiex/sta_cmd.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/drivers/net/wireless/mwifiex/sta_cmd.c b/drivers/net/wireless/mwifiex/sta_cmd.c index 3697aaa863dd..40e025da6bc2 100644 --- a/drivers/net/wireless/mwifiex/sta_cmd.c +++ b/drivers/net/wireless/mwifiex/sta_cmd.c | |||
@@ -498,7 +498,8 @@ mwifiex_cmd_802_11_key_material(struct mwifiex_private *priv, | |||
498 | { | 498 | { |
499 | struct host_cmd_ds_802_11_key_material *key_material = | 499 | struct host_cmd_ds_802_11_key_material *key_material = |
500 | &cmd->params.key_material; | 500 | &cmd->params.key_material; |
501 | u16 key_param_len = 0; | 501 | struct host_cmd_tlv_mac_addr *tlv_mac; |
502 | u16 key_param_len = 0, cmd_size; | ||
502 | int ret = 0; | 503 | int ret = 0; |
503 | const u8 bc_mac[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; | 504 | const u8 bc_mac[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; |
504 | 505 | ||
@@ -614,11 +615,26 @@ mwifiex_cmd_802_11_key_material(struct mwifiex_private *priv, | |||
614 | cpu_to_le16((u16) enc_key->key_len + | 615 | cpu_to_le16((u16) enc_key->key_len + |
615 | KEYPARAMSET_FIXED_LEN); | 616 | KEYPARAMSET_FIXED_LEN); |
616 | 617 | ||
617 | key_param_len = (u16) (enc_key->key_len + KEYPARAMSET_FIXED_LEN) | 618 | key_param_len = (u16)(enc_key->key_len + KEYPARAMSET_FIXED_LEN) |
618 | + sizeof(struct mwifiex_ie_types_header); | 619 | + sizeof(struct mwifiex_ie_types_header); |
619 | 620 | ||
620 | cmd->size = cpu_to_le16(sizeof(key_material->action) + S_DS_GEN | 621 | cmd->size = cpu_to_le16(sizeof(key_material->action) + S_DS_GEN |
621 | + key_param_len); | 622 | + key_param_len); |
623 | |||
624 | if (priv->bss_type == MWIFIEX_BSS_TYPE_UAP) { | ||
625 | tlv_mac = (void *)((u8 *)&key_material->key_param_set + | ||
626 | key_param_len); | ||
627 | tlv_mac->tlv.type = cpu_to_le16(TLV_TYPE_STA_MAC_ADDR); | ||
628 | tlv_mac->tlv.len = cpu_to_le16(ETH_ALEN); | ||
629 | memcpy(tlv_mac->mac_addr, enc_key->mac_addr, ETH_ALEN); | ||
630 | cmd_size = key_param_len + S_DS_GEN + | ||
631 | sizeof(key_material->action) + | ||
632 | sizeof(struct host_cmd_tlv_mac_addr); | ||
633 | } else { | ||
634 | cmd_size = key_param_len + S_DS_GEN + | ||
635 | sizeof(key_material->action); | ||
636 | } | ||
637 | cmd->size = cpu_to_le16(cmd_size); | ||
622 | } | 638 | } |
623 | 639 | ||
624 | return ret; | 640 | return ret; |