wifi: cfg80211: fix locking in regulatory disconnect
authorJohannes Berg <johannes.berg@intel.com>
Tue, 6 Jun 2023 12:34:48 +0000 (14:34 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 6 Jun 2023 12:51:32 +0000 (14:51 +0200)
This should use wiphy_lock() now instead of requiring the
RTNL, since __cfg80211_leave() via cfg80211_leave() is now
requiring that lock to be held.

Fixes: a05829a7222e ("cfg80211: avoid holding the RTNL when calling the driver")
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/reg.c

index 0d40d6a..949e1fb 100644 (file)
@@ -2440,11 +2440,11 @@ static void reg_leave_invalid_chans(struct wiphy *wiphy)
        struct wireless_dev *wdev;
        struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
 
-       ASSERT_RTNL();
-
+       wiphy_lock(wiphy);
        list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list)
                if (!reg_wdev_chan_valid(wiphy, wdev))
                        cfg80211_leave(rdev, wdev);
+       wiphy_unlock(wiphy);
 }
 
 static void reg_check_chans_work(struct work_struct *work)