aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-06 00:19:29 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-06 00:19:29 +0000
commit3b870db994d1dd5eff0e1b64f0856a6fdd338a02 (patch)
treee919924bfcb58581eca141098f47a9c7dfb417b2
parenta82e10baa14e4052078f63571f994c8fec983acf (diff)
parentd3450646d5f0c2d275e975a684132cd637d08477 (diff)
downloadwpa_supplicant_8-3b870db994d1dd5eff0e1b64f0856a6fdd338a02.tar.gz
Snap for 11180250 from d3450646d5f0c2d275e975a684132cd637d08477 to 24Q1-release
Change-Id: Iea5c8922d8b912277d30f155e95d7e2b7e747dd2
-rw-r--r--src/rsn_supp/pmksa_cache.c22
-rw-r--r--wpa_supplicant/wpas_glue.c6
2 files changed, 17 insertions, 11 deletions
diff --git a/src/rsn_supp/pmksa_cache.c b/src/rsn_supp/pmksa_cache.c
index e7b4d540..eb434fa9 100644
--- a/src/rsn_supp/pmksa_cache.c
+++ b/src/rsn_supp/pmksa_cache.c
@@ -224,22 +224,22 @@ pmksa_cache_add(struct rsn_pmksa_cache *pmksa, const u8 *pmk, size_t pmk_len,
if (pmk_len > PMK_LEN_MAX)
return NULL;
- if (wpa_key_mgmt_suite_b(akmp) && !kck)
- return NULL;
-
entry = os_zalloc(sizeof(*entry));
if (entry == NULL)
return NULL;
os_memcpy(entry->pmk, pmk, pmk_len);
entry->pmk_len = pmk_len;
- if (pmkid)
- os_memcpy(entry->pmkid, pmkid, PMKID_LEN);
- else if (akmp == WPA_KEY_MGMT_IEEE8021X_SUITE_B_192)
- rsn_pmkid_suite_b_192(kck, kck_len, aa, spa, entry->pmkid);
- else if (wpa_key_mgmt_suite_b(akmp))
- rsn_pmkid_suite_b(kck, kck_len, aa, spa, entry->pmkid);
- else
- rsn_pmkid(pmk, pmk_len, aa, spa, entry->pmkid, akmp);
+ if (pmkid) {
+ os_memcpy(entry->pmkid, pmkid, PMKID_LEN);
+ } else if (akmp == WPA_KEY_MGMT_IEEE8021X_SUITE_B_192) {
+ if (kck)
+ rsn_pmkid_suite_b_192(kck, kck_len, aa, spa, entry->pmkid);
+ } else if (wpa_key_mgmt_suite_b(akmp)) {
+ if (kck)
+ rsn_pmkid_suite_b(kck, kck_len, aa, spa, entry->pmkid);
+ } else {
+ rsn_pmkid(pmk, pmk_len, aa, spa, entry->pmkid, akmp);
+ }
os_get_reltime(&now);
if (pmksa->sm) {
pmk_lifetime = pmksa->sm->dot11RSNAConfigPMKLifetime;
diff --git a/wpa_supplicant/wpas_glue.c b/wpa_supplicant/wpas_glue.c
index bba77773..0047531a 100644
--- a/wpa_supplicant/wpas_glue.c
+++ b/wpa_supplicant/wpas_glue.c
@@ -380,6 +380,12 @@ static void wpa_supplicant_eapol_cb(struct eapol_sm *eapol,
wpa_printf(MSG_DEBUG, "Failed to set PMK to the driver");
}
+ if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_4WAY_HANDSHAKE_8021X) {
+ /* Add PMKSA cache entry */
+ wpa_printf(MSG_INFO, "add pmksa entry for the PMK");
+ wpa_sm_set_pmk(wpa_s->wpa, pmk, pmk_len, NULL, wpa_sm_get_auth_addr(wpa_s->wpa));
+ }
+
wpa_supplicant_cancel_scan(wpa_s);
wpa_supplicant_cancel_auth_timeout(wpa_s);
wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);