From: Luciano Coelho <luciano.coelho@intel.com>
Date: Wed, 11 Dec 2013 18:39:46 +0000 (+0200)
Subject: mac80211: lock sdata in ieee80211_csa_connection_drop_work()
X-Git-Tag: firefly_0821_release~176^2~4570^2~3^2^2~193
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=6f07d216f5662def442cb8034f45119b5a33f6ff;p=firefly-linux-kernel-4.4.55.git

mac80211: lock sdata in ieee80211_csa_connection_drop_work()

We call ieee80211_ibss_disconnect(), which requires sdata to be
locked, so lock the sdata during ieee80211_csa_connection_drop_work().

Cc: Simon Wunderlich <sw@simonwunderlich.de>
Signed-off-by: Luciano Coelho <luciano.coelho@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---

diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
index e97fa7fac96e..a6ca56dfe0d7 100644
--- a/net/mac80211/ibss.c
+++ b/net/mac80211/ibss.c
@@ -753,12 +753,16 @@ static void ieee80211_csa_connection_drop_work(struct work_struct *work)
 		container_of(work, struct ieee80211_sub_if_data,
 			     u.ibss.csa_connection_drop_work);
 
+	sdata_lock(sdata);
+
 	ieee80211_ibss_disconnect(sdata);
 	synchronize_rcu();
 	skb_queue_purge(&sdata->skb_queue);
 
 	/* trigger a scan to find another IBSS network to join */
 	ieee80211_queue_work(&sdata->local->hw, &sdata->work);
+
+	sdata_unlock(sdata);
 }
 
 static void ieee80211_ibss_csa_mark_radar(struct ieee80211_sub_if_data *sdata)