| From ddfe49b42d8ad4bfdf92d63d4a74f162660d878d Mon Sep 17 00:00:00 2001 |
| From: Johannes Berg <johannes.berg@intel.com> |
| Date: Wed, 31 Jul 2013 20:52:03 +0200 |
| Subject: mac80211: continue using disabled channels while connected |
| |
| From: Johannes Berg <johannes.berg@intel.com> |
| |
| commit ddfe49b42d8ad4bfdf92d63d4a74f162660d878d upstream. |
| |
| 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. |
| |
| 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> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/mac80211/mlme.c | 11 ++++++++++- |
| 1 file changed, 10 insertions(+), 1 deletion(-) |
| |
| --- a/net/mac80211/mlme.c |
| +++ b/net/mac80211/mlme.c |
| @@ -361,8 +361,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; |