diff options
author | Johannes Berg <johannes.berg@intel.com> | 2013-02-22 06:55:01 -0500 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2013-02-25 18:09:19 -0500 |
commit | 1b91731d23a3dd8e8d7e3ee21b8c6d6d4cde62c1 (patch) | |
tree | 8e4e5ecaa9429f2592905f8c019082f217682560 /net | |
parent | dc4a787c8f52f9d6e46156953f8014a3353bcbc7 (diff) |
mac80211: fix tim_lock locking
The ieee80211_beacon_add_tim() function might be called
by drivers with BHs enabled, which causes a potential
deadlock if TX happens at the same time and attempts to
lock the tim_lock as well. Use spin_lock_bh to fix it.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/mac80211/tx.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 5b9602b62405..5800c7a0d075 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c | |||
@@ -2360,9 +2360,9 @@ static int ieee80211_beacon_add_tim(struct ieee80211_sub_if_data *sdata, | |||
2360 | if (local->tim_in_locked_section) { | 2360 | if (local->tim_in_locked_section) { |
2361 | __ieee80211_beacon_add_tim(sdata, ps, skb); | 2361 | __ieee80211_beacon_add_tim(sdata, ps, skb); |
2362 | } else { | 2362 | } else { |
2363 | spin_lock(&local->tim_lock); | 2363 | spin_lock_bh(&local->tim_lock); |
2364 | __ieee80211_beacon_add_tim(sdata, ps, skb); | 2364 | __ieee80211_beacon_add_tim(sdata, ps, skb); |
2365 | spin_unlock(&local->tim_lock); | 2365 | spin_unlock_bh(&local->tim_lock); |
2366 | } | 2366 | } |
2367 | 2367 | ||
2368 | return 0; | 2368 | return 0; |