From c34ba085ba4b64e12192b5043041d8b19009b129 Mon Sep 17 00:00:00 2001 From: Kapil Gupta Date: Mon, 21 Nov 2022 18:34:13 +0530 Subject: [PATCH] esp_wifi: Flush PMK caching if bss akm has changed --- components/wpa_supplicant/src/rsn_supp/wpa.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/components/wpa_supplicant/src/rsn_supp/wpa.c b/components/wpa_supplicant/src/rsn_supp/wpa.c index d987678a17..9a9e0fd3d1 100644 --- a/components/wpa_supplicant/src/rsn_supp/wpa.c +++ b/components/wpa_supplicant/src/rsn_supp/wpa.c @@ -2275,8 +2275,15 @@ 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() && use_pmk_cache) { - pmksa_cache_set_current(sm, NULL, (const u8*) bssid, 0, 0); - wpa_sm_set_pmk_from_pmksa(sm); + if (pmksa_cache_set_current(sm, NULL, (const u8*) bssid, 0, 0) == 0) { + struct rsn_pmksa_cache_entry *pmksa = pmksa_cache_get_current(sm); + if (pmksa && (pmksa->akmp != sm->key_mgmt)) { + pmksa_cache_clear_current(sm); + pmksa_cache_flush(sm->pmksa, NULL, pmksa->pmk, pmksa->pmk_len); + } + } else { + wpa_sm_set_pmk_from_pmksa(sm); + } } else { struct rsn_pmksa_cache_entry *entry = NULL;