From 1cf54db433165bfe677c5c1ce24e9291412d2762 Mon Sep 17 00:00:00 2001 From: Kapil Gupta Date: Wed, 25 May 2022 13:59:59 +0530 Subject: [PATCH] esp_wifi: Changes to not use pmkid caching when SSID is changed --- components/wpa_supplicant/src/rsn_supp/wpa.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/components/wpa_supplicant/src/rsn_supp/wpa.c b/components/wpa_supplicant/src/rsn_supp/wpa.c index b44c406ec9..ad1a826fe5 100644 --- a/components/wpa_supplicant/src/rsn_supp/wpa.c +++ b/components/wpa_supplicant/src/rsn_supp/wpa.c @@ -2251,7 +2251,17 @@ int wpa_set_bss(char *macddr, char * bssid, u8 pairwise_cipher, u8 group_cipher, { int res = 0; 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 */ + /* Ideally we should use network_ctx for this purpose however currently network profile block + * is part of libraries, + * TODO Correct this in future during NVS restructuring */ + 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->group_cipher = BIT(group_cipher); sm->rx_replay_counter_set = 0; //init state not intall replay counter value @@ -2264,7 +2274,7 @@ int wpa_set_bss(char *macddr, char * bssid, u8 pairwise_cipher, u8 group_cipher, if (sm->key_mgmt == WPA_KEY_MGMT_SAE || 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); wpa_sm_set_pmk_from_pmksa(sm); } else {