From fcf5c73771e09aae34c6ed35a0292540e870ffbf Mon Sep 17 00:00:00 2001 From: Beni Lev Date: Wed, 6 Feb 2013 17:22:18 +0200 Subject: [PATCH] --- yaml --- r: 352673 b: refs/heads/master c: c3eb536aabb966542a0b6b09ad38cc43abe9ad1a h: refs/heads/master i: 352671: c8e266a22d165b5524cad39d988657762479f322 v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/iwlwifi/mvm/sta.c | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 1717027ee951..6fd29aa02e54 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8115efbdc82acc935b54f0a849eb834129ea1fd0 +refs/heads/master: c3eb536aabb966542a0b6b09ad38cc43abe9ad1a diff --git a/trunk/drivers/net/wireless/iwlwifi/mvm/sta.c b/trunk/drivers/net/wireless/iwlwifi/mvm/sta.c index 8f8b66ea07ee..6b22bacdc1df 100644 --- a/trunk/drivers/net/wireless/iwlwifi/mvm/sta.c +++ b/trunk/drivers/net/wireless/iwlwifi/mvm/sta.c @@ -1155,14 +1155,26 @@ void iwl_mvm_update_tkip_key(struct iwl_mvm *mvm, struct ieee80211_sta *sta, u32 iv32, u16 *phase1key) { - struct iwl_mvm_sta *mvm_sta = (void *)sta->drv_priv; + struct iwl_mvm_sta *mvm_sta; u8 sta_id = iwl_mvm_get_key_sta_id(vif, sta); - if (sta_id == IWL_INVALID_STATION) + if (WARN_ON_ONCE(sta_id == IWL_INVALID_STATION)) return; + rcu_read_lock(); + + if (!sta) { + sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]); + if (WARN_ON(IS_ERR_OR_NULL(sta))) { + rcu_read_unlock(); + return; + } + } + + mvm_sta = (void *)sta->drv_priv; iwl_mvm_send_sta_key(mvm, mvm_sta, keyconf, sta_id, iv32, phase1key, CMD_ASYNC); + rcu_read_unlock(); } void iwl_mvm_sta_modify_ps_wake(struct iwl_mvm *mvm, int sta_id)