summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2013-02-22 12:55:01 +0100
committerJohannes Berg <johannes.berg@intel.com>2013-02-26 00:09:19 +0100
commit1b91731d23a3dd8e8d7e3ee21b8c6d6d4cde62c1 (patch)
tree8e4e5ecaa9429f2592905f8c019082f217682560 /net
parentbrcmfmac: fix missing unlock on error in brcmf_notify_vif_event() (diff)
downloadlinux-1b91731d23a3dd8e8d7e3ee21b8c6d6d4cde62c1.tar.xz
linux-1b91731d23a3dd8e8d7e3ee21b8c6d6d4cde62c1.zip
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.c4
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,
if (local->tim_in_locked_section) {
__ieee80211_beacon_add_tim(sdata, ps, skb);
} else {
- spin_lock(&local->tim_lock);
+ spin_lock_bh(&local->tim_lock);
__ieee80211_beacon_add_tim(sdata, ps, skb);
- spin_unlock(&local->tim_lock);
+ spin_unlock_bh(&local->tim_lock);
}
return 0;