Merge branch 'bugfix/sta_rejoin_softap_mode_issue' into 'master'

wpa_supplicant: Add changes to deinit sta_info correctly

Closes WIFI-4441

See merge request espressif/esp-idf!18395
This commit is contained in:
Kapil Gupta
2022-06-07 21:47:14 +08:00
3 changed files with 24 additions and 24 deletions

View File

@@ -372,7 +372,8 @@ int hostapd_wep_key_cmp(struct hostapd_wep_keys *a,
const u8 * hostapd_get_psk(const struct hostapd_bss_config *conf,
const u8 *addr, const u8 *prev_psk);
int hostapd_setup_wpa_psk(struct hostapd_bss_config *conf);
bool wpa_ap_join(void** sm, uint8_t *bssid, uint8_t *wpa_ie, uint8_t wpa_ie_len, bool *pmf_enable);
bool wpa_ap_remove(void* sm);
struct sta_info;
bool wpa_ap_join(struct sta_info *sta, uint8_t *bssid, uint8_t *wpa_ie, uint8_t wpa_ie_len, bool *pmf_enable);
bool wpa_ap_remove(void* sta_info);
#endif /* HOSTAPD_CONFIG_H */

View File

@@ -2340,53 +2340,49 @@ static int wpa_sm_step(struct wpa_state_machine *sm)
return 0;
}
bool wpa_ap_join(void** sm, uint8_t *bssid, uint8_t *wpa_ie, uint8_t wpa_ie_len, bool *pmf_enable)
bool wpa_ap_join(struct sta_info *sta, uint8_t *bssid, uint8_t *wpa_ie, uint8_t wpa_ie_len, bool *pmf_enable)
{
struct hostapd_data *hapd = (struct hostapd_data*)esp_wifi_get_hostap_private_internal();
struct wpa_state_machine **wpa_sm;
if (!sm || !bssid || !wpa_ie){
if (!sta || !bssid || !wpa_ie){
return false;
}
wpa_sm = (struct wpa_state_machine **)sm;
if (hapd) {
if (hapd->wpa_auth->conf.wpa) {
if (*wpa_sm){
wpa_auth_sta_deinit(*wpa_sm);
if (sta->wpa_sm){
wpa_auth_sta_deinit(sta->wpa_sm);
}
*wpa_sm = wpa_auth_sta_init(hapd->wpa_auth, bssid);
wpa_printf( MSG_DEBUG, "init wpa sm=%p\n", *wpa_sm);
sta->wpa_sm = wpa_auth_sta_init(hapd->wpa_auth, bssid);
wpa_printf( MSG_DEBUG, "init wpa sm=%p\n", sta->wpa_sm);
if (*wpa_sm == NULL) {
if (sta->wpa_sm == NULL) {
return false;
}
if (wpa_validate_wpa_ie(hapd->wpa_auth, *wpa_sm, wpa_ie, wpa_ie_len)) {
if (wpa_validate_wpa_ie(hapd->wpa_auth, sta->wpa_sm, wpa_ie, wpa_ie_len)) {
return false;
}
//Check whether AP uses Management Frame Protection for this connection
*pmf_enable = wpa_auth_uses_mfp(*wpa_sm);
*pmf_enable = wpa_auth_uses_mfp(sta->wpa_sm);
}
wpa_auth_sta_associated(hapd->wpa_auth, *wpa_sm);
wpa_auth_sta_associated(hapd->wpa_auth, sta->wpa_sm);
}
return true;
}
bool wpa_ap_remove(void* sm)
bool wpa_ap_remove(void* sta_info)
{
struct hostapd_data *hapd = hostapd_get_hapd_data();
if (!sm || !hapd) {
if (!sta_info || !hapd) {
return false;
}
ap_free_sta(hapd, sm);
ap_free_sta(hapd, sta_info);
return true;
}