diff options
-rw-r--r-- | net/mac80211/iface.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 98d20c0f6fe..514e90f470b 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -1726,6 +1726,15 @@ void ieee80211_remove_interfaces(struct ieee80211_local *local) if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) dev_close(sdata->dev); + /* + * Close all AP_VLAN interfaces first, as otherwise they + * might be closed while the AP interface they belong to + * is closed, causing unregister_netdevice_many() to crash. + */ + list_for_each_entry(sdata, &local->interfaces, list) + if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) + dev_close(sdata->dev); + mutex_lock(&local->iflist_mtx); list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { list_del(&sdata->list); |