aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2013-05-23 15:04:38 -0400
committerJohannes Berg <johannes.berg@intel.com>2013-05-23 15:04:38 -0400
commit2b436312f0919c05804fed5aa4b7f255db196e7a (patch)
tree22b74c58d107f770911dc931a9ed25f6790a7af6
parentc815797663b72e3ac1736f1886538152bc48e4af (diff)
mac80211: fix queue handling crash
The code I added in "mac80211: don't start new netdev queues if driver stopped" crashes for monitor and AP VLAN interfaces because while they have a netdev, they don't have queues set up by the driver. To fix the crash, exclude these from queue accounting here and just start their netdev queues unconditionally. For monitor, this is the best we can do, as we can redirect frames there to any other interface and don't know which one that will since it can be different for each frame. For AP VLAN interfaces, we can do better later and actually properly track the queue status. Not doing this is really a separate bug though. Reported-by: Ilan Peer <ilan.peer@intel.com> Reported-by: Jouni Malinen <j@w1.fi> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r--net/mac80211/iface.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 60f1ce5e5e52..68f51c3af49f 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -653,7 +653,11 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
653 653
654 ieee80211_recalc_ps(local, -1); 654 ieee80211_recalc_ps(local, -1);
655 655
656 if (dev) { 656 if (sdata->vif.type == NL80211_IFTYPE_MONITOR ||
657 sdata->vif.type == NL80211_IFTYPE_AP_VLAN) {
658 /* XXX: for AP_VLAN, actually track AP queues */
659 netif_tx_start_all_queues(dev);
660 } else if (dev) {
657 unsigned long flags; 661 unsigned long flags;
658 int n_acs = IEEE80211_NUM_ACS; 662 int n_acs = IEEE80211_NUM_ACS;
659 int ac; 663 int ac;