SME: Postpone current BSSID clearing until IEs are prepared
sme_send_authentication() could fail before actually requesting the driver to authenticate with a new AP. This could happen after wpa_s->bssid got cleared even though in such a case, the old association is maintained and still valid. This can result in unexpected behavior since wpa_s->bssid would not match the current BSSID anymore. Fix this by postponing clearing of wpa_s->bssid until the IE preparation has been completed successfully. Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
ecd54bace4
commit
af670cb418
1 changed files with 6 additions and 6 deletions
|
@ -372,12 +372,6 @@ static void sme_send_authentication(struct wpa_supplicant *wpa_s,
|
||||||
}
|
}
|
||||||
params.wep_tx_keyidx = ssid->wep_tx_keyidx;
|
params.wep_tx_keyidx = ssid->wep_tx_keyidx;
|
||||||
|
|
||||||
bssid_changed = !is_zero_ether_addr(wpa_s->bssid);
|
|
||||||
os_memset(wpa_s->bssid, 0, ETH_ALEN);
|
|
||||||
os_memcpy(wpa_s->pending_bssid, bss->bssid, ETH_ALEN);
|
|
||||||
if (bssid_changed)
|
|
||||||
wpas_notify_bssid_changed(wpa_s);
|
|
||||||
|
|
||||||
if ((wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE) ||
|
if ((wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE) ||
|
||||||
wpa_bss_get_ie(bss, WLAN_EID_RSN)) &&
|
wpa_bss_get_ie(bss, WLAN_EID_RSN)) &&
|
||||||
wpa_key_mgmt_wpa(ssid->key_mgmt)) {
|
wpa_key_mgmt_wpa(ssid->key_mgmt)) {
|
||||||
|
@ -718,6 +712,12 @@ static void sme_send_authentication(struct wpa_supplicant *wpa_s,
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_SAE */
|
#endif /* CONFIG_SAE */
|
||||||
|
|
||||||
|
bssid_changed = !is_zero_ether_addr(wpa_s->bssid);
|
||||||
|
os_memset(wpa_s->bssid, 0, ETH_ALEN);
|
||||||
|
os_memcpy(wpa_s->pending_bssid, bss->bssid, ETH_ALEN);
|
||||||
|
if (bssid_changed)
|
||||||
|
wpas_notify_bssid_changed(wpa_s);
|
||||||
|
|
||||||
old_ssid = wpa_s->current_ssid;
|
old_ssid = wpa_s->current_ssid;
|
||||||
wpa_s->current_ssid = ssid;
|
wpa_s->current_ssid = ssid;
|
||||||
wpa_supplicant_rsn_supp_set_config(wpa_s, wpa_s->current_ssid);
|
wpa_supplicant_rsn_supp_set_config(wpa_s, wpa_s->current_ssid);
|
||||||
|
|
Loading…
Reference in a new issue