mirror of
https://github.com/espressif/esp-idf.git
synced 2025-10-02 01:50:58 +02:00
fix(wifi): prevent crash in WPS-registrar due to nested 'eap_wsc_reset()' calls
When a WPS handshake is already in progress and the enrollee sends another EAPOL-Start (e.g., due to missed packets or timeout), the registrar resets its state by calling 'eap_wsc_reset()'. This function frees 'sm->eap_method_priv' and then calls 'esp_wifi_ap_wps_disable()', which internally triggers another call to 'eap_wsc_reset()'. This results in a double reset where the second invocation accesses the already freed 'sm->eap_method_priv', leading to a crash. This fix sets 'sm->eap_method_priv' to NULL immediately after freeing it to ensure any subsequent calls to eap_wsc_reset() do not access an invalid pointer.
This commit is contained in:
@@ -104,6 +104,7 @@ static void eap_wsc_reset(struct eap_sm *sm, void *priv)
|
||||
//wps_deinit(data->wps);
|
||||
os_free(data);
|
||||
#ifdef ESP_SUPPLICANT
|
||||
sm->eap_method_priv = NULL;
|
||||
/* TODO: When wps-registrar is shifted in a separate task other than wifi task,
|
||||
* call esp_wifi_ap_wps_disable() here instead of wifi_ap_wps_disable_internal()
|
||||
* */
|
||||
|
Reference in New Issue
Block a user