Set state to DISCONNECTED on auth/assoc failures
Some of the authentication/association failure paths left wpa_state to its previous value. This can result in unexpected behavior when wpa_supplicant tries to find an AP to connect to since the uncleared state can result the in the selected BSS being ignored if it is same as the previously used BSS. This could happen, e.g., when wpa_supplicant SME was used and the AP rejected authentication. Fix this by explicitly setting state to DISCONNECTED on auth/assoc failures that did not yet do this. Signed-hostap: Jouni Malinen <j@w1.fi> intended-for: hostap-1
This commit is contained in:
parent
5bda43cdee
commit
c1c023429b
2 changed files with 3 additions and 0 deletions
|
@ -332,6 +332,7 @@ void sme_event_auth(struct wpa_supplicant *wpa_s, union wpa_event_data *data)
|
||||||
wpa_s->sme.auth_alg == data->auth.auth_type ||
|
wpa_s->sme.auth_alg == data->auth.auth_type ||
|
||||||
wpa_s->current_ssid->auth_alg == WPA_AUTH_ALG_LEAP) {
|
wpa_s->current_ssid->auth_alg == WPA_AUTH_ALG_LEAP) {
|
||||||
wpas_connection_failed(wpa_s, wpa_s->pending_bssid);
|
wpas_connection_failed(wpa_s, wpa_s->pending_bssid);
|
||||||
|
wpa_supplicant_set_state(wpa_s, WPA_DISCONNECTED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -448,6 +449,7 @@ void sme_associate(struct wpa_supplicant *wpa_s, enum wpas_mode mode,
|
||||||
wpa_msg(wpa_s, MSG_INFO, "SME: Association request to the "
|
wpa_msg(wpa_s, MSG_INFO, "SME: Association request to the "
|
||||||
"driver failed");
|
"driver failed");
|
||||||
wpas_connection_failed(wpa_s, wpa_s->pending_bssid);
|
wpas_connection_failed(wpa_s, wpa_s->pending_bssid);
|
||||||
|
wpa_supplicant_set_state(wpa_s, WPA_DISCONNECTED);
|
||||||
os_memset(wpa_s->pending_bssid, 0, ETH_ALEN);
|
os_memset(wpa_s->pending_bssid, 0, ETH_ALEN);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1440,6 +1440,7 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
|
||||||
* succeed.
|
* succeed.
|
||||||
*/
|
*/
|
||||||
wpas_connection_failed(wpa_s, wpa_s->pending_bssid);
|
wpas_connection_failed(wpa_s, wpa_s->pending_bssid);
|
||||||
|
wpa_supplicant_set_state(wpa_s, WPA_DISCONNECTED);
|
||||||
os_memset(wpa_s->pending_bssid, 0, ETH_ALEN);
|
os_memset(wpa_s->pending_bssid, 0, ETH_ALEN);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue