Drop unexpected connection event while disconnected
If there is a disconnect command from wpa_supplicant immediately after the driver sends a connection event to userspace but before that event is received and processed by wpa_supplicant, wpa_supplicant processes the disconnect command and a self-generated disconnected event first followed by the connected event received from the driver. As a result wpa_supplicant moves to the WPA_COMPLETED state. Whereas the driver processes the disconnect command received from wpa_supplicant after it sends the connected event and moves to the disconnected state. Due to this race between the disconnect command from wpa_supplicant and the connected event from the driver, wpa_supplicant is moving to the connected state though the driver is moving to the disconnected state which results in abnormal functionality. Ignore the connection event coming from the driver when wpa_supplicant is not trying to connect after a disconnect command is issued but before the next connect command is issued to fix the above mentioned race condition. Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
parent
73c7c2da99
commit
084b3d2f8a
1 changed files with 5 additions and 0 deletions
|
@ -4715,6 +4715,11 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_TESTING_OPTIONS */
|
#endif /* CONFIG_TESTING_OPTIONS */
|
||||||
|
if (wpa_s->disconnected) {
|
||||||
|
wpa_printf(MSG_INFO,
|
||||||
|
"Ignore unexpected EVENT_ASSOC in disconnected state");
|
||||||
|
break;
|
||||||
|
}
|
||||||
wpa_supplicant_event_assoc(wpa_s, data);
|
wpa_supplicant_event_assoc(wpa_s, data);
|
||||||
wpa_s->assoc_status_code = WLAN_STATUS_SUCCESS;
|
wpa_s->assoc_status_code = WLAN_STATUS_SUCCESS;
|
||||||
if (data &&
|
if (data &&
|
||||||
|
|
Loading…
Reference in a new issue