iwlwifi: don't throw error when trying to remove IGTK
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>
This commit is contained in:
parent
baa6cf8450
commit
197288d5ba
|
@ -3320,6 +3320,10 @@ static int iwl_mvm_send_sta_igtk(struct iwl_mvm *mvm,
|
||||||
igtk_cmd.sta_id = cpu_to_le32(sta_id);
|
igtk_cmd.sta_id = cpu_to_le32(sta_id);
|
||||||
|
|
||||||
if (remove_key) {
|
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);
|
igtk_cmd.ctrl_flags |= cpu_to_le32(STA_KEY_NOT_VALID);
|
||||||
} else {
|
} else {
|
||||||
struct ieee80211_key_seq seq;
|
struct ieee80211_key_seq seq;
|
||||||
|
@ -3574,9 +3578,9 @@ int iwl_mvm_remove_sta_key(struct iwl_mvm *mvm,
|
||||||
IWL_DEBUG_WEP(mvm, "mvm remove dynamic key: idx=%d sta=%d\n",
|
IWL_DEBUG_WEP(mvm, "mvm remove dynamic key: idx=%d sta=%d\n",
|
||||||
keyconf->keyidx, sta_id);
|
keyconf->keyidx, sta_id);
|
||||||
|
|
||||||
if (mvm_sta && (keyconf->cipher == WLAN_CIPHER_SUITE_AES_CMAC ||
|
if (keyconf->cipher == WLAN_CIPHER_SUITE_AES_CMAC ||
|
||||||
keyconf->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_128 ||
|
keyconf->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_128 ||
|
||||||
keyconf->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_256))
|
keyconf->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_256)
|
||||||
return iwl_mvm_send_sta_igtk(mvm, keyconf, sta_id, true);
|
return iwl_mvm_send_sta_igtk(mvm, keyconf, sta_id, true);
|
||||||
|
|
||||||
if (!__test_and_clear_bit(keyconf->hw_key_idx, mvm->fw_key_table)) {
|
if (!__test_and_clear_bit(keyconf->hw_key_idx, mvm->fw_key_table)) {
|
||||||
|
|
Loading…
Reference in New Issue