mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
ESP-WIFI: Optimize 4way handshake failure time
In case of wrong passpharse, AP will keep on sending 1/4 multiple times which may take around 10 secs to disconnect and detect wrong password event. Add changes to reject EAPOL1 after 3 consecutive reception
This commit is contained in:
parent
d6a6ac4d2d
commit
fb53a454b9
@ -1 +1 @@
|
|||||||
Subproject commit fc602534d328ef33085d45ce97c81a8942a06aad
|
Subproject commit 6d5c01d883a2081d869d0baa8eedd4ef40228bdc
|
@ -233,5 +233,6 @@ esp_err_t esp_wifi_set_wps_start_flag_internal(bool start);
|
|||||||
uint16_t esp_wifi_sta_pmf_enabled(void);
|
uint16_t esp_wifi_sta_pmf_enabled(void);
|
||||||
wifi_cipher_type_t esp_wifi_sta_get_mgmt_group_cipher(void);
|
wifi_cipher_type_t esp_wifi_sta_get_mgmt_group_cipher(void);
|
||||||
int esp_wifi_set_igtk_internal(uint8_t if_index, const wifi_wpa_igtk_t *igtk);
|
int esp_wifi_set_igtk_internal(uint8_t if_index, const wifi_wpa_igtk_t *igtk);
|
||||||
|
esp_err_t esp_wifi_internal_issue_disconnect(uint8_t reason_code);
|
||||||
|
|
||||||
#endif /* _ESP_WIFI_DRIVER_H_ */
|
#endif /* _ESP_WIFI_DRIVER_H_ */
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
#define WPA_TX_MSG_BUFF_MAXLEN 200
|
#define WPA_TX_MSG_BUFF_MAXLEN 200
|
||||||
|
|
||||||
#define ASSOC_IE_LEN 24 + 2 + PMKID_LEN + RSN_SELECTOR_LEN
|
#define ASSOC_IE_LEN 24 + 2 + PMKID_LEN + RSN_SELECTOR_LEN
|
||||||
|
#define MAX_EAPOL_RETRIES 3
|
||||||
u8 assoc_ie_buf[ASSOC_IE_LEN+2];
|
u8 assoc_ie_buf[ASSOC_IE_LEN+2];
|
||||||
|
|
||||||
void set_assoc_ie(u8 * assoc_buf);
|
void set_assoc_ie(u8 * assoc_buf);
|
||||||
@ -1938,6 +1939,14 @@ int wpa_sm_rx_eapol(u8 *src_addr, u8 *buf, u32 len)
|
|||||||
wpa_supplicant_process_3_of_4(sm, key, ver);
|
wpa_supplicant_process_3_of_4(sm, key, ver);
|
||||||
} else {
|
} else {
|
||||||
/* 1/4 4-Way Handshake */
|
/* 1/4 4-Way Handshake */
|
||||||
|
sm->eapol1_count++;
|
||||||
|
if (sm->eapol1_count > MAX_EAPOL_RETRIES) {
|
||||||
|
#ifdef DEBUG_PRINT
|
||||||
|
wpa_printf(MSG_INFO, "EAPOL1 received for %d times, sending deauth", sm->eapol1_count);
|
||||||
|
#endif
|
||||||
|
esp_wifi_internal_issue_disconnect(WLAN_REASON_4WAY_HANDSHAKE_TIMEOUT);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
wpa_supplicant_process_1_of_4(sm, src_addr, key,
|
wpa_supplicant_process_1_of_4(sm, src_addr, key,
|
||||||
ver);
|
ver);
|
||||||
}
|
}
|
||||||
@ -2123,6 +2132,7 @@ int wpa_set_bss(char *macddr, char * bssid, u8 pairwise_cipher, u8 group_cipher,
|
|||||||
wpa_sm_set_pmk_from_pmksa(sm);
|
wpa_sm_set_pmk_from_pmksa(sm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sm->eapol1_count = 0;
|
||||||
#ifdef CONFIG_IEEE80211W
|
#ifdef CONFIG_IEEE80211W
|
||||||
if (esp_wifi_sta_pmf_enabled()) {
|
if (esp_wifi_sta_pmf_enabled()) {
|
||||||
wifi_config_t wifi_cfg;
|
wifi_config_t wifi_cfg;
|
||||||
|
@ -90,6 +90,7 @@ struct wpa_sm {
|
|||||||
u16 txcb_flags;
|
u16 txcb_flags;
|
||||||
bool ap_notify_completed_rsne;
|
bool ap_notify_completed_rsne;
|
||||||
wifi_pmf_config_t pmf_cfg;
|
wifi_pmf_config_t pmf_cfg;
|
||||||
|
u8 eapol1_count;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user