aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com>2023-12-05 03:10:07 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2023-12-05 03:10:07 +0000
commitd3450646d5f0c2d275e975a684132cd637d08477 (patch)
treee919924bfcb58581eca141098f47a9c7dfb417b2
parentcb447ba625bcad674a5064dc6de7d3ca43199cc4 (diff)
parent67e32eafde92be18cfc373cf5bf284cfe96df130 (diff)
downloadwpa_supplicant_8-d3450646d5f0c2d275e975a684132cd637d08477.tar.gz
Merge "Handling pmk addition in supplicant cache for 80211x connections" into main
-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);