From: Liad Kaufman <[email protected]>

If WEP is used, no one removes the STA key upon STA
removal, leading to a situation where after 16
connect/disconnects - the AP could no longer decrypt
incoming data frames since iwl_mvm_set_fw_key_idx()
called from iwl_mvm_set_sta_key() during association
returns STA_KEY_IDX_INVALID, thus not setting the key
for that connecting STA.

Fix this by removing the key in the driver when the
STA is removed.

Signed-off-by: Liad Kaufman <[email protected]>
Signed-off-by: Luca Coelho <[email protected]>
---
 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c 
b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
index 78b35c9595a3..b4a55349336f 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
@@ -3091,6 +3091,16 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
                        iwl_mvm_tdls_check_trigger(mvm, vif, sta->addr,
                                                   NL80211_TDLS_DISABLE_LINK);
                }
+
+               /* Remove STA key if this is an AP using WEP */
+               if (vif->type == NL80211_IFTYPE_AP && mvmvif->ap_wep_key) {
+                       int rm_ret = iwl_mvm_remove_sta_key(mvm, vif, sta,
+                                                           mvmvif->ap_wep_key);
+
+                       if (!ret)
+                               ret = rm_ret;
+               }
+
        } else {
                ret = -EIO;
        }
-- 
2.20.1

Reply via email to