44 lines
1.7 KiB
Diff
44 lines
1.7 KiB
Diff
|
From ddfe49b42d8ad4bfdf92d63d4a74f162660d878d Mon Sep 17 00:00:00 2001
|
||
|
From: Johannes Berg <johannes.berg@intel.com>
|
||
|
Date: Wed, 31 Jul 2013 18:52:03 +0000
|
||
|
Subject: mac80211: continue using disabled channels while connected
|
||
|
|
||
|
In case the AP has different regulatory information than we do,
|
||
|
it can happen that we connect to an AP based on e.g. the world
|
||
|
roaming regulatory data, and then update our database with the
|
||
|
AP's country information disables the channel the AP is using.
|
||
|
If this happens on an HT AP, the bandwidth tracking code will
|
||
|
hit the WARN_ON() and disconnect. Since that's not very useful,
|
||
|
ignore the channel-disable flag in bandwidth tracking.
|
||
|
|
||
|
Cc: stable@vger.kernel.org
|
||
|
Reported-by: Chris Wright <chrisw@sous-sol.org>
|
||
|
Tested-by: Chris Wright <chrisw@sous-sol.org>
|
||
|
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||
|
---
|
||
|
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
|
||
|
index 077a953..cc9e02d 100644
|
||
|
--- a/net/mac80211/mlme.c
|
||
|
+++ b/net/mac80211/mlme.c
|
||
|
@@ -335,8 +335,17 @@ out:
|
||
|
if (ret & IEEE80211_STA_DISABLE_VHT)
|
||
|
vht_chandef = *chandef;
|
||
|
|
||
|
+ /*
|
||
|
+ * Ignore the DISABLED flag when we're already connected and only
|
||
|
+ * tracking the APs beacon for bandwidth changes - otherwise we
|
||
|
+ * might get disconnected here if we connect to an AP, update our
|
||
|
+ * regulatory information based on the AP's country IE and the
|
||
|
+ * information we have is wrong/outdated and disables the channel
|
||
|
+ * that we're actually using for the connection to the AP.
|
||
|
+ */
|
||
|
while (!cfg80211_chandef_usable(sdata->local->hw.wiphy, chandef,
|
||
|
- IEEE80211_CHAN_DISABLED)) {
|
||
|
+ tracking ? 0 :
|
||
|
+ IEEE80211_CHAN_DISABLED)) {
|
||
|
if (WARN_ON(chandef->width == NL80211_CHAN_WIDTH_20_NOHT)) {
|
||
|
ret = IEEE80211_STA_DISABLE_HT |
|
||
|
IEEE80211_STA_DISABLE_VHT;
|
||
|
--
|
||
|
cgit v0.9.2
|