path: root/src/drivers
diff options
authorJohannes Berg <johannes.berg@intel.com>2019-05-08 05:30:38 (GMT)
committerJouni Malinen <j@w1.fi>2019-05-28 10:48:21 (GMT)
commitb6f8b5a96435c48da502dd6801f137148e1bbeca (patch)
tree8baa4409678c2e9186b14124b2d701a8dde6d00c /src/drivers
parent2a0db3eb5d3b7f02eccf9709a80d130ff5c094a3 (diff)
nl80211: Update freq only when CSA completes
In the case of the ap_csa_disable test, I frequently see failures due to the kernel *not* having switched, but the CSA-STARTED event having been processed, and thus the frequency having been updated already. This is wrong at least for AP mode, the frequency we store for this case internally in nl80211 should only be updated when the channel switch completes, otherwise we end up in a situation where the switch is aborted and the kernel is thus on the old channel, but the internal information has been updated and every subsequent mgmt-frame TX fails due to being tagged with the wrong channel. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'src/drivers')
1 files changed, 2 insertions, 1 deletions
diff --git a/src/drivers/driver_nl80211_event.c b/src/drivers/driver_nl80211_event.c
index f57ada9..07aa335 100644
--- a/src/drivers/driver_nl80211_event.c
+++ b/src/drivers/driver_nl80211_event.c
@@ -595,7 +595,8 @@ static void mlme_event_ch_switch(struct wpa_driver_nl80211_data *drv,
if (cf2)
data.ch_switch.cf2 = nla_get_u32(cf2);
- bss->freq = data.ch_switch.freq;
+ if (finished)
+ bss->freq = data.ch_switch.freq;
drv->assoc_freq = data.ch_switch.freq;
wpa_supplicant_event(bss->ctx, finished ?