| From ac1b56d13d1c5fcf7aa117c7e4717e984a1b9035 Mon Sep 17 00:00:00 2001 |
| From: Luca Coelho <luciano.coelho@intel.com> |
| Date: Fri, 31 Jan 2020 15:45:25 +0200 |
| Subject: [PATCH] iwlwifi: don't throw error when trying to remove IGTK |
| |
| commit 197288d5ba8a5289f22d3aeb4fca3824bfd9b4af upstream. |
| |
| The IGTK keys are only removed by mac80211 after it has already |
| removed the AP station. This causes the driver to throw an error |
| because mac80211 is trying to remove the IGTK when the station doesn't |
| exist anymore. |
| |
| The firmware is aware that the station has been removed and can deal |
| with it the next time we try to add an IGTK for a station, so we |
| shouldn't try to remove the key if the station ID is |
| IWL_MVM_INVALID_STA. Do this by removing the check for mvm_sta before |
| calling iwl_mvm_send_sta_igtk() and check return from that function |
| gracefully if the station ID is invalid. |
| |
| Cc: stable@vger.kernel.org # 4.12+ |
| Signed-off-by: Luca Coelho <luciano.coelho@intel.com> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c |
| index 7272d846ad87..8d042f1f4bb6 100644 |
| --- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c |
| +++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c |
| @@ -3307,6 +3307,10 @@ static int iwl_mvm_send_sta_igtk(struct iwl_mvm *mvm, |
| igtk_cmd.sta_id = cpu_to_le32(sta_id); |
| |
| if (remove_key) { |
| + /* This is a valid situation for IGTK */ |
| + if (sta_id == IWL_MVM_INVALID_STA) |
| + return 0; |
| + |
| igtk_cmd.ctrl_flags |= cpu_to_le32(STA_KEY_NOT_VALID); |
| } else { |
| struct ieee80211_key_seq seq; |
| @@ -3561,9 +3565,9 @@ int iwl_mvm_remove_sta_key(struct iwl_mvm *mvm, |
| IWL_DEBUG_WEP(mvm, "mvm remove dynamic key: idx=%d sta=%d\n", |
| keyconf->keyidx, sta_id); |
| |
| - if (mvm_sta && (keyconf->cipher == WLAN_CIPHER_SUITE_AES_CMAC || |
| - keyconf->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_128 || |
| - keyconf->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_256)) |
| + if (keyconf->cipher == WLAN_CIPHER_SUITE_AES_CMAC || |
| + keyconf->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_128 || |
| + keyconf->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_256) |
| return iwl_mvm_send_sta_igtk(mvm, keyconf, sta_id, true); |
| |
| if (!__test_and_clear_bit(keyconf->hw_key_idx, mvm->fw_key_table)) { |
| -- |
| 2.7.4 |
| |