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
|