summaryrefslogtreecommitdiffstats
path: root/net/mac80211/mlme.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2013-08-23 09:48:48 -0400
committerJohannes Berg <johannes.berg@intel.com>2013-08-23 11:05:12 -0400
commitd70b7616d9080ec9f868fbd31db5fd4341435d61 (patch)
treed3d62663a318ce3030fdce22981511f588e2e6af /net/mac80211/mlme.c
parent75a423f493ffdf741acae27bf179cd560f7813d7 (diff)
mac80211: ignore (E)CSA in probe response frames
Seth reports that some APs, notably the Netgear WNDAP360, send invalid ECSA IEs in probe response frames with the operating class and channel number both set to zero, even when no channel switch is being done. As a result, any scan while connected to such an AP results in the connection being dropped. Fix this by ignoring any channel switch announcment in probe response frames entirely, since we're connected to the AP we will be receiving a beacon (and maybe even an action frame) if a channel switch is done, which is sufficient. Cc: stable@vger.kernel.org # 3.10 Reported-by: Seth Forshee <seth.forshee@canonical.com> Tested-by: Seth Forshee <seth.forshee@canonical.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r--net/mac80211/mlme.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index cc9e02d79b55..7a98d524fc81 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -2851,14 +2851,6 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
2851 ieee80211_rx_bss_put(local, bss); 2851 ieee80211_rx_bss_put(local, bss);
2852 sdata->vif.bss_conf.beacon_rate = bss->beacon_rate; 2852 sdata->vif.bss_conf.beacon_rate = bss->beacon_rate;
2853 } 2853 }
2854
2855 if (!sdata->u.mgd.associated ||
2856 !ether_addr_equal(mgmt->bssid, sdata->u.mgd.associated->bssid))
2857 return;
2858
2859 ieee80211_sta_process_chanswitch(sdata, rx_status->mactime,
2860 elems, true);
2861
2862} 2854}
2863 2855
2864 2856
@@ -3147,6 +3139,9 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
3147 3139
3148 ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems); 3140 ieee80211_rx_bss_info(sdata, mgmt, len, rx_status, &elems);
3149 3141
3142 ieee80211_sta_process_chanswitch(sdata, rx_status->mactime,
3143 &elems, true);
3144
3150 if (ieee80211_sta_wmm_params(local, sdata, elems.wmm_param, 3145 if (ieee80211_sta_wmm_params(local, sdata, elems.wmm_param,
3151 elems.wmm_param_len)) 3146 elems.wmm_param_len))
3152 changed |= BSS_CHANGED_QOS; 3147 changed |= BSS_CHANGED_QOS;