Skip to content

Commit

Permalink
mac80211: Move num_sta_ps counter decrement after synchronize_rcu
Browse files Browse the repository at this point in the history
Unted the assumption that the sta struct is still accessible before the
synchronize_rcu call we should move the num_sta_ps counter decrement
after synchronize_rcu to avoid incorrect decrements if num_sta_ps.

Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Helmut Schaa authored and John W. Linville committed Jan 30, 2012
1 parent 1946841 commit 4f3eb0b
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions net/mac80211/sta_info.c
Original file line number Diff line number Diff line change
Expand Up @@ -750,15 +750,6 @@ int __must_check __sta_info_destroy(struct sta_info *sta)

sta->dead = true;

if (test_sta_flag(sta, WLAN_STA_PS_STA)) {
BUG_ON(!sdata->bss);

clear_sta_flag(sta, WLAN_STA_PS_STA);

atomic_dec(&sdata->bss->num_sta_ps);
sta_info_recalc_tim(sta);
}

local->num_sta--;
local->sta_generation++;

Expand Down Expand Up @@ -790,6 +781,15 @@ int __must_check __sta_info_destroy(struct sta_info *sta)
*/
synchronize_rcu();

if (test_sta_flag(sta, WLAN_STA_PS_STA)) {
BUG_ON(!sdata->bss);

clear_sta_flag(sta, WLAN_STA_PS_STA);

atomic_dec(&sdata->bss->num_sta_ps);
sta_info_recalc_tim(sta);
}

for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
local->total_ps_buffered -= skb_queue_len(&sta->ps_tx_buf[ac]);
__skb_queue_purge(&sta->ps_tx_buf[ac]);
Expand Down

0 comments on commit 4f3eb0b

Please sign in to comment.