diff options
author | Helmut Schaa <helmut.schaa@googlemail.com> | 2012-01-17 03:22:49 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-01-17 10:12:27 -0500 |
commit | 544204733a20200951c271f81c74930ba5424638 (patch) | |
tree | 02fc04707eb974cf28bcac4e2fa0583dc4bfdd39 /net | |
parent | d981e05908f85beb68ae0d935e59c5e399d2136e (diff) |
mac80211: Fix possible race between sta_unblock and network softirq
All other code paths in sta_unblock synchronize with the network
softirq by using local_bh_disable/enable. Do the same around
ieee80211_sta_ps_deliver_wakeup.
Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/sta_info.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index 3c428d4839c7..ff11f6bf8266 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c | |||
@@ -238,9 +238,11 @@ static void sta_unblock(struct work_struct *wk) | |||
238 | if (sta->dead) | 238 | if (sta->dead) |
239 | return; | 239 | return; |
240 | 240 | ||
241 | if (!test_sta_flag(sta, WLAN_STA_PS_STA)) | 241 | if (!test_sta_flag(sta, WLAN_STA_PS_STA)) { |
242 | local_bh_disable(); | ||
242 | ieee80211_sta_ps_deliver_wakeup(sta); | 243 | ieee80211_sta_ps_deliver_wakeup(sta); |
243 | else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) { | 244 | local_bh_enable(); |
245 | } else if (test_and_clear_sta_flag(sta, WLAN_STA_PSPOLL)) { | ||
244 | clear_sta_flag(sta, WLAN_STA_PS_DRIVER); | 246 | clear_sta_flag(sta, WLAN_STA_PS_DRIVER); |
245 | 247 | ||
246 | local_bh_disable(); | 248 | local_bh_disable(); |