cfg80211: fix locking in nl80211_set_wiphy
Luis reports that there's a circular locking dependency; this is because cfg80211_dev_rename() will acquire the cfg80211_mutex while the device mutex is held, while this normally is done the other way around. The solution is to open-code the device-getting in nl80211_set_wiphy and require holding the mutex around cfg80211_dev_rename rather than acquiring it within. Also fix a bug -- rtnl locking is expected by drivers so we need to provide it. Reported-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:

committed by
John W. Linville

parent
3832c287f1
commit
4bbf4d5658
@@ -99,6 +99,9 @@ struct cfg80211_internal_bss {
|
||||
struct cfg80211_registered_device *cfg80211_drv_by_wiphy_idx(int wiphy_idx);
|
||||
int get_wiphy_idx(struct wiphy *wiphy);
|
||||
|
||||
struct cfg80211_registered_device *
|
||||
__cfg80211_drv_from_info(struct genl_info *info);
|
||||
|
||||
/*
|
||||
* This function returns a pointer to the driver
|
||||
* that the genl_info item that is passed refers to.
|
||||
|
Reference in New Issue
Block a user