mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-22 01:02:57 +00:00
esp_wifi: WPA3 softap set PMF required true
1) Set NVS PMF required true if not specified by application when authmode is WPA3 2) Fix issue regarding cleanup of non associated sta_info 3) Fix implementation of sta lock to avoid concurrency issues 4) Fix softAP deinit crash when password is configured with max length
This commit is contained in:
@@ -19,6 +19,8 @@
|
||||
#include "esp_wifi_types.h"
|
||||
#include "esp_wpa3_i.h"
|
||||
|
||||
#define WIFI_PASSWORD_LEN_MAX 65
|
||||
|
||||
struct hostapd_data *global_hapd;
|
||||
|
||||
#ifdef CONFIG_SAE
|
||||
@@ -139,7 +141,7 @@ void *hostap_init(void)
|
||||
memcpy(hapd->conf->ssid.ssid, ssid->ssid, ssid->len);
|
||||
hapd->conf->ssid.ssid_len = ssid->len;
|
||||
hapd->conf->wpa_key_mgmt = auth_conf->wpa_key_mgmt;
|
||||
hapd->conf->ssid.wpa_passphrase = (char *)os_zalloc(64);
|
||||
hapd->conf->ssid.wpa_passphrase = (char *)os_zalloc(WIFI_PASSWORD_LEN_MAX);
|
||||
if (hapd->conf->ssid.wpa_passphrase == NULL) {
|
||||
os_free(auth_conf);
|
||||
os_free(hapd->conf);
|
||||
@@ -163,7 +165,7 @@ void *hostap_init(void)
|
||||
#endif /* CONFIG_SAE */
|
||||
|
||||
os_memcpy(hapd->conf->ssid.wpa_passphrase, esp_wifi_ap_get_prof_password_internal(), strlen((char *)esp_wifi_ap_get_prof_password_internal()));
|
||||
|
||||
hapd->conf->ssid.wpa_passphrase[WIFI_PASSWORD_LEN_MAX - 1] = '\0';
|
||||
hapd->conf->max_num_sta = esp_wifi_ap_get_max_sta_conn();
|
||||
|
||||
hapd->conf->ap_max_inactivity = 5 * 60;
|
||||
@@ -190,6 +192,8 @@ void hostapd_cleanup(struct hostapd_data *hapd)
|
||||
}
|
||||
|
||||
if (hapd->conf) {
|
||||
forced_memzero(hapd->conf->ssid.wpa_passphrase, WIFI_PASSWORD_LEN_MAX);
|
||||
os_free(hapd->conf->ssid.wpa_passphrase);
|
||||
hostapd_config_free_bss(hapd->conf);
|
||||
hapd->conf = NULL;
|
||||
}
|
||||
|
@@ -124,7 +124,7 @@ struct wpa_funcs {
|
||||
void *(*wpa_ap_init)(void);
|
||||
bool (*wpa_ap_deinit)(void *data);
|
||||
bool (*wpa_ap_join)(void **sm, u8 *bssid, u8 *wpa_ie, u8 wpa_ie_len, u8* rsnxe, u8 rsnxe_len, bool *pmf_enable, int subtype);
|
||||
bool (*wpa_ap_remove)(void *sta_info);
|
||||
bool (*wpa_ap_remove)(u8 *bssid);
|
||||
uint8_t *(*wpa_ap_get_wpa_ie)(uint8_t *len);
|
||||
bool (*wpa_ap_rx_eapol)(void *hapd_data, void *sm, u8 *data, size_t data_len);
|
||||
void (*wpa_ap_get_peer_spp_msg)(void *sm, bool *spp_cap, bool *spp_req);
|
||||
|
@@ -409,7 +409,7 @@ static void wpa3_process_rx_commit(wpa3_hostap_auth_event_t *evt)
|
||||
goto free;
|
||||
}
|
||||
}
|
||||
if (sta->lock && os_mutex_lock(sta->lock)) {
|
||||
if (sta->lock && os_semphr_take(sta->lock, 0)) {
|
||||
sta->sae_commit_processing = true;
|
||||
ret = handle_auth_sae(hapd, sta, frm->msg, frm->len, frm->bssid, frm->auth_transaction, frm->status);
|
||||
|
||||
@@ -418,7 +418,7 @@ static void wpa3_process_rx_commit(wpa3_hostap_auth_event_t *evt)
|
||||
goto free;
|
||||
}
|
||||
sta->sae_commit_processing = false;
|
||||
os_mutex_unlock(sta->lock);
|
||||
os_semphr_give(sta->lock);
|
||||
uint16_t aid = 0;
|
||||
if (ret != WLAN_STATUS_SUCCESS &&
|
||||
ret != WLAN_STATUS_ANTI_CLOGGING_TOKEN_REQ) {
|
||||
@@ -447,7 +447,7 @@ static void wpa3_process_rx_confirm(wpa3_hostap_auth_event_t *evt)
|
||||
return;
|
||||
}
|
||||
|
||||
if (sta->lock && os_mutex_lock(sta->lock)) {
|
||||
if (sta->lock && os_semphr_take(sta->lock, 0)) {
|
||||
ret = handle_auth_sae(hapd, sta, frm->msg, frm->len, frm->bssid, frm->auth_transaction, frm->status);
|
||||
|
||||
if (sta->remove_pending) {
|
||||
@@ -460,7 +460,7 @@ static void wpa3_process_rx_confirm(wpa3_hostap_auth_event_t *evt)
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
os_mutex_unlock(sta->lock);
|
||||
os_semphr_give(sta->lock);
|
||||
if (ret != WLAN_STATUS_SUCCESS) {
|
||||
uint16_t aid = -1;
|
||||
if (esp_wifi_ap_get_sta_aid(frm->bssid, &aid) == ESP_OK && aid == 0) {
|
||||
|
Reference in New Issue
Block a user