From 986a25c960844652188b83b91e3e78912faf4969 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 22 Jul 2013 21:57:06 -0700 Subject: [PATCH] 3.4-stable patches added patches: mac80211-close-ap_vlan-interfaces-before-unregistering-all.patch --- ...-interfaces-before-unregistering-all.patch | 46 +++++++++++++++++++ queue-3.4/series | 1 + 2 files changed, 47 insertions(+) create mode 100644 queue-3.4/mac80211-close-ap_vlan-interfaces-before-unregistering-all.patch diff --git a/queue-3.4/mac80211-close-ap_vlan-interfaces-before-unregistering-all.patch b/queue-3.4/mac80211-close-ap_vlan-interfaces-before-unregistering-all.patch new file mode 100644 index 00000000000..5ca1cb93de5 --- /dev/null +++ b/queue-3.4/mac80211-close-ap_vlan-interfaces-before-unregistering-all.patch @@ -0,0 +1,46 @@ +From 4c8a9d4bfaf7dbc7d2168494904d79d22cc01db7 Mon Sep 17 00:00:00 2001 +From: Johannes Berg +Date: Fri, 24 May 2013 01:06:09 +0200 +Subject: mac80211: close AP_VLAN interfaces before unregistering all + +From: Johannes Berg + +commit 4c8a9d4bfaf7dbc7d2168494904d79d22cc01db7 upstream. + +Since Eric's commit efe117ab8 ("Speedup ieee80211_remove_interfaces") +there's a bug in mac80211 when it unregisters with AP_VLAN interfaces +up. If the AP_VLAN interface was registered after the AP it belongs +to (which is the typical case) and then we get into this code path, +unregister_netdevice_many() will crash because it isn't prepared to +deal with interfaces being closed in the middle of it. Exactly this +happens though, because we iterate the list, find the AP master this +AP_VLAN belongs to and dev_close() the dependent VLANs. After this, +unregister_netdevice_many() won't pick up the fact that the AP_VLAN +is already down and will do it again, causing a crash. + +Signed-off-by: Johannes Berg +Cc: Eric Dumazet +Signed-off-by: Greg Kroah-Hartman + +--- + net/mac80211/iface.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +--- a/net/mac80211/iface.c ++++ b/net/mac80211/iface.c +@@ -1405,6 +1405,15 @@ void ieee80211_recalc_idle(struct ieee80 + { + u32 chg; + ++ /* ++ * 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); + chg = __ieee80211_recalc_idle(local); + mutex_unlock(&local->iflist_mtx); diff --git a/queue-3.4/series b/queue-3.4/series index 5ab56662ced..00ea908943d 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -8,3 +8,4 @@ ath9k-do-not-assign-noise-for-null-caldata.patch scsi-zfcp-fix-adapter-re-open-recovery-while-link-to-san-is-down.patch scsi-mpt2sas-fix-firmware-failure-with-wrong-task-attribute.patch sunrpc-pipefs-mount-notification-optimization-for-dying-clients.patch +mac80211-close-ap_vlan-interfaces-before-unregistering-all.patch -- 2.47.3