浏览代码

nl80211: Avoid AP mode BUG_ON hang with invalid lock assert

"cfg80211: add assert_cfg80211_lock() to ensure proper protection"
added assert_cfg80211_lock() calls into various places. At least
one of them, nl80211_send_wiphy(), should not have been there. That
triggers the BUG_ON in assert_cfg80211_lock() and pretty much kills
the kernel whenever someone runs hostapd.. Remove that call and make
assert_cfg80211_lock() use WARN_ON instead of BUG_ON to be a bit more
friendly to users.

Signed-off-by: Jouni Malinen <jouni.malinen@atheros.com>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Jouni Malinen 16 年之前
父节点
当前提交
0bfbce18b9
共有 2 个文件被更改,包括 1 次插入3 次删除
  1. 1 1
      net/wireless/core.h
  2. 0 2
      net/wireless/nl80211.c

+ 1 - 1
net/wireless/core.h

@@ -76,7 +76,7 @@ extern struct list_head cfg80211_drv_list;
 
 
 static inline void assert_cfg80211_lock(void)
 static inline void assert_cfg80211_lock(void)
 {
 {
-	BUG_ON(!mutex_is_locked(&cfg80211_mutex));
+	WARN_ON(!mutex_is_locked(&cfg80211_mutex));
 }
 }
 
 
 /*
 /*

+ 0 - 2
net/wireless/nl80211.c

@@ -137,8 +137,6 @@ static int nl80211_send_wiphy(struct sk_buff *msg, u32 pid, u32 seq, int flags,
 	int i;
 	int i;
 	u16 ifmodes = dev->wiphy.interface_modes;
 	u16 ifmodes = dev->wiphy.interface_modes;
 
 
-	assert_cfg80211_lock();
-
 	hdr = nl80211hdr_put(msg, pid, seq, flags, NL80211_CMD_NEW_WIPHY);
 	hdr = nl80211hdr_put(msg, pid, seq, flags, NL80211_CMD_NEW_WIPHY);
 	if (!hdr)
 	if (!hdr)
 		return -1;
 		return -1;