diff mbox series

mac80211: mesh: do mesh rhashtable walks with BHs disabled

Message ID 20190205195339.7585-1-johannes@sipsolutions.net (mailing list archive)
State Superseded
Delegated to: Johannes Berg
Headers show
Series mac80211: mesh: do mesh rhashtable walks with BHs disabled | expand

Commit Message

Johannes Berg Feb. 5, 2019, 7:53 p.m. UTC
From: Johannes Berg <johannes.berg@intel.com>

Since we do some walks from *within* softirq context and the
rhashtable code just uses a plain spin_lock(), we need to
disable softirqs for other walks that are not within softirq
context to avoid a potential deadlock (taking a softirq that
takes the spinlock while inside the spinlock from regular
process context.)

Reported-by: Jouni Malinen <j@w1.fi>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
---
 net/mac80211/mesh_pathtbl.c | 3 +++
 1 file changed, 3 insertions(+)
diff mbox series

Patch

diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c
index a5125624a76d..f1912afd03dd 100644
--- a/net/mac80211/mesh_pathtbl.c
+++ b/net/mac80211/mesh_pathtbl.c
@@ -880,8 +880,11 @@  void mesh_path_tbl_expire(struct ieee80211_sub_if_data *sdata,
 
 void mesh_path_expire(struct ieee80211_sub_if_data *sdata)
 {
+	/* we do other walks inside softirq, so need to disable them here */
+	local_bh_disable();
 	mesh_path_tbl_expire(sdata, sdata->u.mesh.mesh_paths);
 	mesh_path_tbl_expire(sdata, sdata->u.mesh.mpp_paths);
+	local_bh_enable();
 }
 
 void mesh_pathtbl_unregister(struct ieee80211_sub_if_data *sdata)