]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
nl80211: Update freq only when CSA completes
authorJohannes Berg <johannes.berg@intel.com>
Wed, 8 May 2019 05:30:38 +0000 (07:30 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 28 May 2019 10:48:21 +0000 (13:48 +0300)
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>
src/drivers/driver_nl80211_event.c

index f57ada9c8b223eb7533dac92a5edd859fc4cd0bf..07aa335f6e9a5a8ff44d06be858f7c298e4eb8a4 100644 (file)
@@ -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 ?