mac80211: Fix incorrect num_sta_ps decrement in __sta_info_destroy
authorHelmut Schaa <helmut.schaa@googlemail.com>
Fri, 27 Jan 2012 10:02:51 +0000 (11:02 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 30 Jan 2012 20:48:18 +0000 (15:48 -0500)
When WLAN_STA_PS_DRIVER is set by ieee80211_sta_block_awake the
num_sta_ps counter is not incremented. Hence, we shouldn't decrement
it in __sta_info_destroy if only WLAN_STA_PS_DRIVER is set. This
could result in an incorrect num_sta_ps counter leading to strange side
effects with associated powersaving clients.

Fix this by only decrementing num_sta_ps when WLAN_STA_PS_STA was set
before.

Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/sta_info.c

index df8f0a2f0deed16eba643e13421fac3c44c1c84d..0c79593b1bbf78a998ab06bec24a30b6cc3807b2 100644 (file)
@@ -750,12 +750,10 @@ int __must_check __sta_info_destroy(struct sta_info *sta)
 
        sta->dead = true;
 
-       if (test_sta_flag(sta, WLAN_STA_PS_STA) ||
-           test_sta_flag(sta, WLAN_STA_PS_DRIVER)) {
+       if (test_sta_flag(sta, WLAN_STA_PS_STA)) {
                BUG_ON(!sdata->bss);
 
                clear_sta_flag(sta, WLAN_STA_PS_STA);
-               clear_sta_flag(sta, WLAN_STA_PS_DRIVER);
 
                atomic_dec(&sdata->bss->num_sta_ps);
                sta_info_recalc_tim(sta);