mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-21 00:48:14 +00:00
fix(esp_wifi): Fix crash when assoc req comes before confirm is processed
This commit is contained in:
@@ -332,7 +332,7 @@ static int check_n_add_wps_sta(struct hostapd_data *hapd, struct sta_info *sta_i
|
||||
|
||||
if (sta_info->eapol_sm) {
|
||||
wpa_printf(MSG_DEBUG, "considering station " MACSTR " for WPS", MAC2STR(sta_info->addr));
|
||||
if (esp_send_assoc_resp(hapd, sta_info, sta_info->addr, WLAN_STATUS_SUCCESS, true, subtype) != WLAN_STATUS_SUCCESS) {
|
||||
if (esp_send_assoc_resp(hapd, sta_info->addr, WLAN_STATUS_SUCCESS, true, subtype) != WLAN_STATUS_SUCCESS) {
|
||||
wpa_printf(MSG_ERROR, "failed to send assoc response " MACSTR, MAC2STR(sta_info->addr));
|
||||
return -1;
|
||||
}
|
||||
@@ -356,15 +356,18 @@ static bool hostap_sta_join(void **sta, u8 *bssid, u8 *wpa_ie, u8 wpa_ie_len,u8
|
||||
#ifdef CONFIG_SAE
|
||||
if (old_sta->lock && os_semphr_take(old_sta->lock, 0) != TRUE) {
|
||||
wpa_printf(MSG_INFO, "Ignore assoc request as softap is busy with sae calculation for station "MACSTR, MAC2STR(bssid));
|
||||
if (esp_send_assoc_resp(hapd, old_sta, bssid, WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY, rsnxe ? false : true, subtype) != WLAN_STATUS_SUCCESS) {
|
||||
if (esp_send_assoc_resp(hapd, bssid, WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY, rsnxe ? false : true, subtype) != WLAN_STATUS_SUCCESS) {
|
||||
goto fail;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif /* CONFIG_SAE */
|
||||
if (!esp_wifi_ap_is_sta_sae_reauth_node(bssid)) {
|
||||
ap_free_sta(hapd, old_sta);
|
||||
} else if (old_sta && old_sta->lock) {
|
||||
sta_info = old_sta;
|
||||
goto process_old_sta;
|
||||
}
|
||||
#endif /* CONFIG_SAE */
|
||||
}
|
||||
|
||||
sta_info = ap_get_sta(hapd, bssid);
|
||||
@@ -374,12 +377,18 @@ static bool hostap_sta_join(void **sta, u8 *bssid, u8 *wpa_ie, u8 wpa_ie_len,u8
|
||||
wpa_printf(MSG_ERROR, "failed to add station " MACSTR, MAC2STR(bssid));
|
||||
goto fail;
|
||||
}
|
||||
#ifdef CONFIG_SAE
|
||||
if (sta_info->lock) {
|
||||
os_semphr_take(sta_info->lock, 0);
|
||||
}
|
||||
#endif /* CONFIG_SAE */
|
||||
}
|
||||
#ifdef CONFIG_SAE
|
||||
if (sta_info->lock && os_semphr_take(sta_info->lock, 0) != TRUE) {
|
||||
wpa_printf(MSG_INFO, "Ignore assoc request as softap is busy with sae calculation for station "MACSTR, MAC2STR(bssid));
|
||||
if (esp_send_assoc_resp(hapd, bssid, WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY, rsnxe ? false : true, subtype) != WLAN_STATUS_SUCCESS) {
|
||||
goto fail;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif /* CONFIG_SAE */
|
||||
|
||||
process_old_sta:
|
||||
|
||||
#ifdef CONFIG_WPS_REGISTRAR
|
||||
if (check_n_add_wps_sta(hapd, sta_info, wpa_ie, wpa_ie_len, pmf_enable, subtype) == 0) {
|
||||
|
Reference in New Issue
Block a user