[PATCH 03/18] wpa_supplicant: Don't stop conn. radio work on DEAUTH
Jouni Malinen
j at w1.fi
Sun Sep 25 12:14:44 PDT 2016
On Tue, Sep 06, 2016 at 09:47:35AM +0300, andrei.otcheretianski at intel.com wrote:
> If DEAUTH event is received while authenticating, wpas_connection_failed()
> is invoked cancelling the radio work. However, the flow might continue
> calling sme_disassoc_while_authenticating() which leaves the wpa_supplicant
> in the AUTHENTICATING state, thus allowing the continuation of the connection
> flow (without radio work protection) in case AUTH frame is received.
>
> This issue was seen during EAPOL connection, when the client starts the fast
> association in wpas_wps_eapol_cb, where the following race occurs:
>
> 1. DEAUTH after initial EAPOL HS
> 2. Start fast associate and send AUTH
> 3. DEAUTH event rebound from kernel -> wpas_connection_failed() is called,
> stopping the connect radio work
> 4. SCAN is started
> 5. AUTH is received, and the connection flow is continued without
> radio work protection
> 6. SCAN_RESULTS received in the middle of association.
> 7. Failure in wpa_driver_nl80211_check_bss_status due to
> state mismatch - > DEAUTH with reason code 2.
Would you be able to share a debug log showing such a case?
> Fix this by not calling wpas_connection_failed() in step 4, if the
> wpa_supplicant is in authenticating state and using SME (same conditions
> that result in calling sme_disassoc_while_authenticating()).
This does not sound correct.. sme-connect radio work should not be left
running if a new connection is needed. In addition, it looks like
wpa_supplicant_event_disassoc_finish() could call
wpa_supplicant_connect() after that and that would result in another
sme-connect radio work being added when trying to associate again.
It sound like step 5 might need to add a new sme-connect radio work
instead.
--
Jouni Malinen PGP id EFC895FA
More information about the Hostap
mailing list