[PATCH] Handle obtaining bssid failure
Masashi Honma
masashi.honma
Fri Jul 13 06:00:45 PDT 2012
On the ordinally case, the flow is like Fig.1.
wpa_supplicant <--(EVENT_ASSOC event )-- device driver
wpa_supplicant --( get_bssid() )--> device driver
wpa_supplicant <--( return BSSID )-- device driver
Fig.1. Ordinally case
There is a device driver causes Fig.2 case.
The device driver returns EINVAL for get_bssid() because it recognizes it has
already been disconnected.
When the wpa_supplicant received EINVAL, the wpa_supplicant recognized that
it's own BSSID is 00:00:00:00:00:00.
wpa_supplicant <--(EVENT_ASSOC event )-- device driver
device driver (receive deauth)
wpa_supplicant --( get_bssid() )--> device driver
wpa_supplicant <--( return EINVAL )-- device driver
Fig.2. Invalid case
This patch solves this issue.
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 59b103e..5b7c14a 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -1523,9 +1523,15 @@ static void wpa_supplicant_event_assoc(struct
wpa_supplicant *wpa_s,
if (data && wpa_supplicant_event_associnfo(wpa_s, data) < 0)
return;
+ if (wpa_drv_get_bssid(wpa_s, bssid) < 0) {
+ wpa_dbg(wpa_s, MSG_ERROR, "Failed to get BSSID");
+ wpa_supplicant_disassociate(
+ wpa_s, WLAN_REASON_DEAUTH_LEAVING);
+ return;
+ }
+
wpa_supplicant_set_state(wpa_s, WPA_ASSOCIATED);
- if (wpa_drv_get_bssid(wpa_s, bssid) >= 0 &&
- os_memcmp(bssid, wpa_s->bssid, ETH_ALEN) != 0) {
+ if (os_memcmp(bssid, wpa_s->bssid, ETH_ALEN) != 0) {
wpa_dbg(wpa_s, MSG_DEBUG, "Associated to a new BSS: BSSID="
MACSTR, MAC2STR(bssid));
random_add_randomness(bssid, ETH_ALEN);
Regards,
Masashi Honma.
More information about the Hostap
mailing list