mwifiex: parsing aid while receiving association response
authorXinming Hu <huxm@marvell.com>
Mon, 4 May 2015 16:40:08 +0000 (22:10 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Sat, 9 May 2015 13:48:15 +0000 (16:48 +0300)
cfg80211 would complain about invalid AID in during TDLS setup.
This was happening because we use same AID value as provide by AP
while forming setup messages.
Parse AID from Association response and filter BIT14 and BIT15
of AID to get valid AID.

Signed-off-by: Xinming Hu <huxm@marvell.com>
Signed-off-by: Avinash Patil <patila@marvell.com>
Signed-off-by: Cathy Luo <cluo@marvell.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/mwifiex/join.c

index 411a6c2f4aca5da922409bf33c1aa7eae5a92f00..f214a7cd13459874582e9170cc7e116afd530cf6 100644 (file)
@@ -621,18 +621,28 @@ int mwifiex_ret_802_11_associate(struct mwifiex_private *priv,
        struct ieee_types_assoc_rsp *assoc_rsp;
        struct mwifiex_bssdescriptor *bss_desc;
        bool enable_data = true;
-       u16 cap_info, status_code;
+       u16 cap_info, status_code, aid;
 
        assoc_rsp = (struct ieee_types_assoc_rsp *) &resp->params;
 
        cap_info = le16_to_cpu(assoc_rsp->cap_info_bitmap);
        status_code = le16_to_cpu(assoc_rsp->status_code);
+       aid = le16_to_cpu(assoc_rsp->a_id);
+
+       if ((aid & (BIT(15) | BIT(14))) != (BIT(15) | BIT(14)))
+               dev_err(priv->adapter->dev,
+                       "invalid AID value 0x%x; bits 15:14 not set\n",
+                       aid);
+
+       aid &= ~(BIT(15) | BIT(14));
 
        priv->assoc_rsp_size = min(le16_to_cpu(resp->size) - S_DS_GEN,
                                   sizeof(priv->assoc_rsp_buf));
 
        memcpy(priv->assoc_rsp_buf, &resp->params, priv->assoc_rsp_size);
 
+       assoc_rsp->a_id = cpu_to_le16(aid);
+
        if (status_code) {
                priv->adapter->dbg.num_cmd_assoc_failure++;
                dev_err(priv->adapter->dev,