diff --git a/components/wpa_supplicant/esp_supplicant/src/esp_wifi_driver.h b/components/wpa_supplicant/esp_supplicant/src/esp_wifi_driver.h index 8f991e9716..892a399727 100644 --- a/components/wpa_supplicant/esp_supplicant/src/esp_wifi_driver.h +++ b/components/wpa_supplicant/esp_supplicant/src/esp_wifi_driver.h @@ -283,5 +283,6 @@ uint8_t esp_wifi_sta_get_config_sae_pwe_h2e_internal(void); uint8_t esp_wifi_sta_get_use_h2e_internal(void); void esp_wifi_sta_disable_wpa2_authmode_internal(void); uint8_t esp_wifi_ap_get_max_sta_conn(void); +bool esp_wifi_eb_tx_status_success_internal(void *eb); #endif /* _ESP_WIFI_DRIVER_H_ */ diff --git a/components/wpa_supplicant/src/rsn_supp/wpa.c b/components/wpa_supplicant/src/rsn_supp/wpa.c index 4cf7955c62..6235991b70 100644 --- a/components/wpa_supplicant/src/rsn_supp/wpa.c +++ b/components/wpa_supplicant/src/rsn_supp/wpa.c @@ -2750,6 +2750,12 @@ void eapol_txcb(void *eb) case WPA_FIRST_HALF_4WAY_HANDSHAKE: break; case WPA_LAST_HALF_4WAY_HANDSHAKE: + + if (esp_wifi_eb_tx_status_success_internal(eb) != true) { + wpa_printf(MSG_ERROR, "Eapol message 4/4 tx failure, not installing keys"); + return; + } + if (sm->txcb_flags & WPA_4_4_HANDSHAKE_BIT) { sm->txcb_flags &= ~WPA_4_4_HANDSHAKE_BIT; isdeauth = wpa_supplicant_send_4_of_4_txcallback(sm);