ath10k: fix WPA crypto
authorMichal Kazior <michal.kazior@tieto.com>
Mon, 9 Mar 2015 13:24:17 +0000 (14:24 +0100)
committerKalle Valo <kvalo@qca.qualcomm.com>
Thu, 12 Mar 2015 12:35:51 +0000 (14:35 +0200)
Commit 370e567363e6 ("ath10k: fix broken traffic for 802.1x in client mode")
introduced a regression on WPA crypto. All keys were treated as if they were
WEP which resulted in WPA being incorrectly installed to fw/hw and subsequently
no traffic.

Reported-by: Marek Puzyniak <marek.puzyniak@tieto.com>
Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/mac.c

index 1f3d393..da4e7a0 100644 (file)
@@ -4029,6 +4029,11 @@ static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
                }
        }
 
+       if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
+               flags |= WMI_KEY_PAIRWISE;
+       else
+               flags |= WMI_KEY_GROUP;
+
        if (is_wep) {
                if (cmd == SET_KEY)
                        arvif->wep_keys[key->keyidx] = key;
@@ -4054,29 +4059,24 @@ static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
                 */
                if (cmd == SET_KEY && arvif->def_wep_key_idx == -1)
                        flags |= WMI_KEY_TX_USAGE;
-       }
 
-       if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE)
-               flags |= WMI_KEY_PAIRWISE;
-       else
-               flags |= WMI_KEY_GROUP;
-
-       /* mac80211 uploads static WEP keys as groupwise while fw/hw requires
-        * pairwise keys for non-self peers, i.e. BSSID in STA mode and
-        * associated stations in AP/IBSS.
-        *
-        * Static WEP keys for peer_addr=vif->addr and 802.1X WEP keys work
-        * fine when mapped directly from mac80211.
-        *
-        * Note: When installing first static WEP groupwise key (which should
-        * be pairwise) def_wep_key_idx isn't known yet (it's equal to -1).
-        * Since .set_default_unicast_key is called only for static WEP it's
-        * used to re-upload the key as pairwise.
-        */
-       if (arvif->def_wep_key_idx >= 0 &&
-           memcmp(peer_addr, arvif->vif->addr, ETH_ALEN)) {
-               flags &= ~WMI_KEY_GROUP;
-               flags |= WMI_KEY_PAIRWISE;
+               /* mac80211 uploads static WEP keys as groupwise while fw/hw
+                * requires pairwise keys for non-self peers, i.e. BSSID in STA
+                * mode and associated stations in AP/IBSS.
+                *
+                * Static WEP keys for peer_addr=vif->addr and 802.1X WEP keys
+                * work fine when mapped directly from mac80211.
+                *
+                * Note: When installing first static WEP groupwise key (which
+                * should be pairwise) def_wep_key_idx isn't known yet (it's
+                * equal to -1).  Since .set_default_unicast_key is called only
+                * for static WEP it's used to re-upload the key as pairwise.
+                */
+               if (arvif->def_wep_key_idx >= 0 &&
+                   memcmp(peer_addr, arvif->vif->addr, ETH_ALEN)) {
+                       flags &= ~WMI_KEY_GROUP;
+                       flags |= WMI_KEY_PAIRWISE;
+               }
        }
 
        ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags);