diff --git a/net/wireless/core.c b/net/wireless/core.c index 777f48a01101..ea38b22a88cd 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c @@ -171,6 +171,9 @@ static int __cfg80211_switch_netns(struct cfg80211_registered_device *rdev, struct wireless_dev *wdev, *tmp; int err = 0; + /* make the whole switch atomic for cfg80211_mutex holders, e.g. dumps */ + guard(mutex)(&cfg80211_mutex); + list_for_each_entry_safe(wdev, tmp, &rdev->wiphy.wdev_list, list) { err = cfg80211_switch_wdev_netns(wdev, net); if (!err) diff --git a/net/wireless/core.h b/net/wireless/core.h index 07d7a68a7cfc..e70a4f679bf5 100644 --- a/net/wireless/core.h +++ b/net/wireless/core.h @@ -20,7 +20,7 @@ #include "reg.h" -/* protects the wiphy list and regulatory state */ +/* protects the wiphy list, wiphy netns changes and regulatory state */ extern struct mutex cfg80211_mutex; #define WIPHY_IDX_INVALID -1