EAPOL auth: Avoid recursive wpa_sm_step() on WPA_DEAUTH case
It was possible for wpa_auth_sm_event(WPA_DEAUTH) to be called from wpa_sm_step() iteration in the case the EAPOL authenticator state machine ended up requesting the station to be disconnected. This resulted in unnecessary recursive call to wpa_sm_step(). Avoid this by using the already running call to process the state change. It was possible to hit this sequence in the hwsim test case ap_wpa2_eap_eke_server_oom. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
dee2020243
commit
43f49c3788
1 changed files with 8 additions and 0 deletions
|
@ -1759,6 +1759,14 @@ int wpa_auth_sm_event(struct wpa_state_machine *sm, wpa_event event)
|
||||||
wpa_remove_ptk(sm);
|
wpa_remove_ptk(sm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sm->in_step_loop) {
|
||||||
|
/*
|
||||||
|
* wpa_sm_step() is already running - avoid recursive call to
|
||||||
|
* it by making the existing loop process the new update.
|
||||||
|
*/
|
||||||
|
sm->changed = TRUE;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return wpa_sm_step(sm);
|
return wpa_sm_step(sm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue