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;
|
||||
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;
|
||||
wpa_msg(wpa_s, MSG_INFO, "Authentication with " MACSTR " timed out.",
|
||||
MAC2STR(bssid));
|
||||
|
@ -2173,7 +2175,10 @@ static void wpas_start_assoc_cb(struct wpa_radio_work *work, int deinit)
|
|||
} else {
|
||||
wpa_msg(wpa_s, MSG_INFO, "Trying to associate with SSID '%s'",
|
||||
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)
|
||||
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),
|
||||
reason_code, wpa_supplicant_state_txt(wpa_s->wpa_state));
|
||||
|
||||
if (!is_zero_ether_addr(wpa_s->bssid))
|
||||
addr = wpa_s->bssid;
|
||||
else if (!is_zero_ether_addr(wpa_s->pending_bssid) &&
|
||||
(wpa_s->wpa_state == WPA_AUTHENTICATING ||
|
||||
wpa_s->wpa_state == WPA_ASSOCIATING))
|
||||
if (!is_zero_ether_addr(wpa_s->pending_bssid) &&
|
||||
(wpa_s->wpa_state == WPA_AUTHENTICATING ||
|
||||
wpa_s->wpa_state == WPA_ASSOCIATING))
|
||||
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) {
|
||||
/*
|
||||
* When using driver-based BSS selection, we may not know the
|
||||
|
|
Loading…
Reference in a new issue