]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 23 Jul 2013 04:56:58 +0000 (21:56 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 23 Jul 2013 04:56:58 +0000 (21:56 -0700)
added patches:
mac80211-close-ap_vlan-interfaces-before-unregistering-all.patch

queue-3.0/mac80211-close-ap_vlan-interfaces-before-unregistering-all.patch [new file with mode: 0644]
queue-3.0/series

diff --git a/queue-3.0/mac80211-close-ap_vlan-interfaces-before-unregistering-all.patch b/queue-3.0/mac80211-close-ap_vlan-interfaces-before-unregistering-all.patch
new file mode 100644 (file)
index 0000000..d608ba0
--- /dev/null
@@ -0,0 +1,46 @@
+From 4c8a9d4bfaf7dbc7d2168494904d79d22cc01db7 Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Fri, 24 May 2013 01:06:09 +0200
+Subject: mac80211: close AP_VLAN interfaces before unregistering all
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+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 <johannes.berg@intel.com>
+Cc: Eric Dumazet <eric.dumazet@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/mac80211/iface.c |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/net/mac80211/iface.c
++++ b/net/mac80211/iface.c
+@@ -1380,6 +1380,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);
index 901f9c9b7f0b05faeaa7cc551053641419009ba0..e2b5e259d0a6198763d6be0f8748e48018c04ac0 100644 (file)
@@ -3,3 +3,4 @@ asoc-sglt5000-fix-sgtl5000_pll_frac_div_mask.patch
 rt2x00-read-5ghz-tx-power-values-from-the-correct-offset.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
+mac80211-close-ap_vlan-interfaces-before-unregistering-all.patch