mirror of
https://github.com/espressif/esp-idf.git
synced 2025-07-30 10:47:19 +02:00
wpa_supplicant: Set PMK from PMKSA incase of caching
This commit is contained in:
@ -118,6 +118,13 @@ static inline int wpa_key_mgmt_cckm(int akm)
|
|||||||
return akm == WPA_KEY_MGMT_CCKM;
|
return akm == WPA_KEY_MGMT_CCKM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ESP_SUPPLICANT
|
||||||
|
static inline int wpa_key_mgmt_supports_caching(int akm)
|
||||||
|
{
|
||||||
|
return wpa_key_mgmt_wpa_ieee8021x(akm) ||
|
||||||
|
wpa_key_mgmt_sae(akm);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#define WPA_PROTO_WPA BIT(0)
|
#define WPA_PROTO_WPA BIT(0)
|
||||||
#define WPA_PROTO_RSN BIT(1)
|
#define WPA_PROTO_RSN BIT(1)
|
||||||
|
@ -2249,7 +2249,7 @@ 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;
|
bool use_pmk_cache = !esp_wifi_skip_supp_pmkcaching();
|
||||||
u8 assoc_rsnxe[20];
|
u8 assoc_rsnxe[20];
|
||||||
size_t assoc_rsnxe_len = sizeof(assoc_rsnxe);
|
size_t assoc_rsnxe_len = sizeof(assoc_rsnxe);
|
||||||
|
|
||||||
@ -2274,27 +2274,19 @@ int wpa_set_bss(char *macddr, char * bssid, u8 pairwise_cipher, u8 group_cipher,
|
|||||||
sm->use_ext_key_id = (sm->proto == WPA_PROTO_WPA);
|
sm->use_ext_key_id = (sm->proto == WPA_PROTO_WPA);
|
||||||
pmksa_cache_clear_current(sm);
|
pmksa_cache_clear_current(sm);
|
||||||
|
|
||||||
if (sm->key_mgmt == WPA_KEY_MGMT_SAE ||
|
struct rsn_pmksa_cache_entry *pmksa = NULL;
|
||||||
is_wpa2_enterprise_connection()) {
|
if (use_pmk_cache) {
|
||||||
if (!esp_wifi_skip_supp_pmkcaching() && use_pmk_cache) {
|
pmksa = pmksa_cache_get(sm->pmksa, (const u8 *)bssid, NULL, NULL);
|
||||||
if (pmksa_cache_set_current(sm, NULL, (const u8*) bssid, 0, 0) == 0) {
|
if (pmksa && (pmksa->akmp != sm->key_mgmt)) {
|
||||||
struct rsn_pmksa_cache_entry *pmksa = pmksa_cache_get_current(sm);
|
use_pmk_cache = false;
|
||||||
if (pmksa && (pmksa->akmp != sm->key_mgmt)) {
|
}
|
||||||
pmksa_cache_clear_current(sm);
|
}
|
||||||
pmksa_cache_flush(sm->pmksa, NULL, pmksa->pmk, pmksa->pmk_len);
|
if (wpa_key_mgmt_supports_caching(sm->key_mgmt) && use_pmk_cache) {
|
||||||
}
|
pmksa_cache_set_current(sm, NULL, (const u8*) bssid, 0, 0);
|
||||||
} else {
|
wpa_sm_set_pmk_from_pmksa(sm);
|
||||||
wpa_sm_set_pmk_from_pmksa(sm);
|
} else {
|
||||||
}
|
if (pmksa) {
|
||||||
} else {
|
pmksa_cache_flush(sm->pmksa, NULL, pmksa->pmk, pmksa->pmk_len);
|
||||||
struct rsn_pmksa_cache_entry *entry = NULL;
|
|
||||||
|
|
||||||
if (sm->pmksa) {
|
|
||||||
entry = pmksa_cache_get(sm->pmksa, (const u8 *)bssid, NULL, NULL);
|
|
||||||
}
|
|
||||||
if (entry) {
|
|
||||||
pmksa_cache_flush(sm->pmksa, NULL, entry->pmk, entry->pmk_len);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user