lkml.org 
[lkml]   [2020]   [Feb]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 073/173] iwlwifi: dont throw error when trying to remove IGTK
    Date
    From: Luca Coelho <luciano.coelho@intel.com>

    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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 10 +++++++---
    1 file changed, 7 insertions(+), 3 deletions(-)

    --- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
    +++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c
    @@ -2981,6 +2981,10 @@ static int iwl_mvm_send_sta_igtk(struct
    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;
    @@ -3285,9 +3289,9 @@ int iwl_mvm_remove_sta_key(struct iwl_mv
    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)) {

    \
     
     \ /
      Last update: 2020-02-13 16:57    [W:4.203 / U:0.704 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site