mac80211: merge a fix for a race condition on station removal
SVN-Revision: 36053
This commit is contained in:
parent
1996cfe9dd
commit
132a54f646
1 changed files with 32 additions and 0 deletions
|
@ -896,3 +896,35 @@
|
|||
|
||||
if (needreset) {
|
||||
ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -766,6 +766,7 @@ int __must_check __sta_info_destroy(stru
|
||||
struct ieee80211_local *local;
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
int ret, i;
|
||||
+ bool have_key = false;
|
||||
|
||||
might_sleep();
|
||||
|
||||
@@ -793,12 +794,19 @@ int __must_check __sta_info_destroy(stru
|
||||
list_del_rcu(&sta->list);
|
||||
|
||||
mutex_lock(&local->key_mtx);
|
||||
- for (i = 0; i < NUM_DEFAULT_KEYS; i++)
|
||||
+ for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
|
||||
__ieee80211_key_free(key_mtx_dereference(local, sta->gtk[i]));
|
||||
- if (sta->ptk)
|
||||
+ have_key = true;
|
||||
+ }
|
||||
+ if (sta->ptk) {
|
||||
__ieee80211_key_free(key_mtx_dereference(local, sta->ptk));
|
||||
+ have_key = true;
|
||||
+ }
|
||||
mutex_unlock(&local->key_mtx);
|
||||
|
||||
+ if (!have_key)
|
||||
+ synchronize_net();
|
||||
+
|
||||
sta->dead = true;
|
||||
|
||||
local->num_sta--;
|
||||
|
|
Loading…
Reference in a new issue