Blacklist correct BSSID on authentication timeout
If authentication times out while reassociating to same ESS incorrect BSSID may end up being blacklisted. Use pending_bssid field on authentication timeout and deauthentication to ensure the correct AP gets blacklisted. This is mainly to address cases related to Android framework roaming behavior. Signed-off-by: Mikael Kanstrup <mikael.kanstrup@sonymobile.com>
This commit is contained in:
parent
1c82fbf271
commit
04e3d8156a
1 changed files with 12 additions and 7 deletions
|
@ -192,7 +192,9 @@ static void wpa_supplicant_timeout(void *eloop_ctx, void *timeout_ctx)
|
||||||
{
|
{
|
||||||
struct wpa_supplicant *wpa_s = eloop_ctx;
|
struct wpa_supplicant *wpa_s = eloop_ctx;
|
||||||
const u8 *bssid = wpa_s->bssid;
|
const u8 *bssid = wpa_s->bssid;
|
||||||
if (is_zero_ether_addr(bssid))
|
if (!is_zero_ether_addr(wpa_s->pending_bssid) &&
|
||||||
|
(wpa_s->wpa_state == WPA_AUTHENTICATING ||
|
||||||
|
wpa_s->wpa_state == WPA_ASSOCIATING))
|
||||||
bssid = wpa_s->pending_bssid;
|
bssid = wpa_s->pending_bssid;
|
||||||
wpa_msg(wpa_s, MSG_INFO, "Authentication with " MACSTR " timed out.",
|
wpa_msg(wpa_s, MSG_INFO, "Authentication with " MACSTR " timed out.",
|
||||||
MAC2STR(bssid));
|
MAC2STR(bssid));
|
||||||
|
@ -2173,7 +2175,10 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit)
|
||||||
} else {
|
} else {
|
||||||
wpa_msg(wpa_s, MSG_INFO, "Trying to associate with SSID '%s'",
|
wpa_msg(wpa_s, MSG_INFO, "Trying to associate with SSID '%s'",
|
||||||
wpa_ssid_txt(ssid->ssid, ssid->ssid_len));
|
wpa_ssid_txt(ssid->ssid, ssid->ssid_len));
|
||||||
os_memset(wpa_s->pending_bssid, 0, ETH_ALEN);
|
if (bss)
|
||||||
|
os_memcpy(wpa_s->pending_bssid, bss->bssid, ETH_ALEN);
|
||||||
|
else
|
||||||
|
os_memset(wpa_s->pending_bssid, 0, ETH_ALEN);
|
||||||
}
|
}
|
||||||
if (!wpa_s->pno)
|
if (!wpa_s->pno)
|
||||||
wpa_supplicant_cancel_sched_scan(wpa_s);
|
wpa_supplicant_cancel_sched_scan(wpa_s);
|
||||||
|
@ -2702,12 +2707,12 @@ void wpa_supplicant_deauthenticate(struct wpa_supplicant *wpa_s,
|
||||||
MAC2STR(wpa_s->bssid), MAC2STR(wpa_s->pending_bssid),
|
MAC2STR(wpa_s->bssid), MAC2STR(wpa_s->pending_bssid),
|
||||||
reason_code, wpa_supplicant_state_txt(wpa_s->wpa_state));
|
reason_code, wpa_supplicant_state_txt(wpa_s->wpa_state));
|
||||||
|
|
||||||
if (!is_zero_ether_addr(wpa_s->bssid))
|
if (!is_zero_ether_addr(wpa_s->pending_bssid) &&
|
||||||
addr = wpa_s->bssid;
|
(wpa_s->wpa_state == WPA_AUTHENTICATING ||
|
||||||
else if (!is_zero_ether_addr(wpa_s->pending_bssid) &&
|
wpa_s->wpa_state == WPA_ASSOCIATING))
|
||||||
(wpa_s->wpa_state == WPA_AUTHENTICATING ||
|
|
||||||
wpa_s->wpa_state == WPA_ASSOCIATING))
|
|
||||||
addr = wpa_s->pending_bssid;
|
addr = wpa_s->pending_bssid;
|
||||||
|
else if (!is_zero_ether_addr(wpa_s->bssid))
|
||||||
|
addr = wpa_s->bssid;
|
||||||
else if (wpa_s->wpa_state == WPA_ASSOCIATING) {
|
else if (wpa_s->wpa_state == WPA_ASSOCIATING) {
|
||||||
/*
|
/*
|
||||||
* When using driver-based BSS selection, we may not know the
|
* When using driver-based BSS selection, we may not know the
|
||||||
|
|
Loading…
Reference in a new issue