mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 10:47:19 +02:00
esp_wifi: Changes to not use pmkid caching when SSID is changed
This commit is contained in:
@ -2139,7 +2139,14 @@ int wpa_set_bss(char *macddr, char * bssid, u8 pairwise_cipher, u8 group_cipher,
|
|||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
struct wpa_sm *sm = &gWpaSm;
|
struct wpa_sm *sm = &gWpaSm;
|
||||||
|
bool use_pmk_cache = true;
|
||||||
|
|
||||||
|
/* Incase AP has changed it's SSID, don't try with PMK caching for SAE connection */
|
||||||
|
if ((sm->key_mgmt == WPA_KEY_MGMT_SAE) &&
|
||||||
|
(os_memcmp(sm->bssid, bssid, ETH_ALEN) == 0) &&
|
||||||
|
(os_memcmp(sm->ssid, ssid, ssid_len) != 0)) {
|
||||||
|
use_pmk_cache = false;
|
||||||
|
}
|
||||||
sm->pairwise_cipher = BIT(pairwise_cipher);
|
sm->pairwise_cipher = BIT(pairwise_cipher);
|
||||||
sm->group_cipher = BIT(group_cipher);
|
sm->group_cipher = BIT(group_cipher);
|
||||||
sm->rx_replay_counter_set = 0; //init state not intall replay counter value
|
sm->rx_replay_counter_set = 0; //init state not intall replay counter value
|
||||||
@ -2152,7 +2159,7 @@ int wpa_set_bss(char *macddr, char * bssid, u8 pairwise_cipher, u8 group_cipher,
|
|||||||
|
|
||||||
if (sm->key_mgmt == WPA_KEY_MGMT_SAE ||
|
if (sm->key_mgmt == WPA_KEY_MGMT_SAE ||
|
||||||
is_wpa2_enterprise_connection()) {
|
is_wpa2_enterprise_connection()) {
|
||||||
if (!esp_wifi_skip_supp_pmkcaching()) {
|
if (!esp_wifi_skip_supp_pmkcaching() && use_pmk_cache) {
|
||||||
pmksa_cache_set_current(sm, NULL, (const u8*) bssid, 0, 0);
|
pmksa_cache_set_current(sm, NULL, (const u8*) bssid, 0, 0);
|
||||||
wpa_sm_set_pmk_from_pmksa(sm);
|
wpa_sm_set_pmk_from_pmksa(sm);
|
||||||
} else {
|
} else {
|
||||||
@ -2185,6 +2192,9 @@ int wpa_set_bss(char *macddr, char * bssid, u8 pairwise_cipher, u8 group_cipher,
|
|||||||
if (res < 0)
|
if (res < 0)
|
||||||
return -1;
|
return -1;
|
||||||
sm->assoc_wpa_ie_len = res;
|
sm->assoc_wpa_ie_len = res;
|
||||||
|
os_memset(sm->ssid, 0, sizeof(sm->ssid));
|
||||||
|
os_memcpy(sm->ssid, ssid, ssid_len);
|
||||||
|
sm->ssid_len = ssid_len;
|
||||||
wpa_set_passphrase(passphrase, ssid, ssid_len);
|
wpa_set_passphrase(passphrase, ssid, ssid_len);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -43,6 +43,8 @@ struct wpa_sm {
|
|||||||
u8 request_counter[WPA_REPLAY_COUNTER_LEN];
|
u8 request_counter[WPA_REPLAY_COUNTER_LEN];
|
||||||
struct rsn_pmksa_cache *pmksa; /* PMKSA cache */
|
struct rsn_pmksa_cache *pmksa; /* PMKSA cache */
|
||||||
struct rsn_pmksa_cache_entry *cur_pmksa; /* current PMKSA entry */
|
struct rsn_pmksa_cache_entry *cur_pmksa; /* current PMKSA entry */
|
||||||
|
u8 ssid[32];
|
||||||
|
size_t ssid_len;
|
||||||
|
|
||||||
unsigned int pairwise_cipher;
|
unsigned int pairwise_cipher;
|
||||||
unsigned int group_cipher;
|
unsigned int group_cipher;
|
||||||
|
Reference in New Issue
Block a user