diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-02-01 00:59:48 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-02-01 00:59:48 +0000 |
commit | 3ef9f1128ca620ddb0405a560eec435687360ed2 (patch) | |
tree | 190e0f85f9f2dead14f6e78ea53d24d28ad8add0 | |
parent | 89e9a0f2120a20d153e8482fd043804defee7bc0 (diff) | |
parent | 473cde65f0a0ce1d92cf7feae6519fa0c384aa27 (diff) | |
download | wpa_supplicant_8-android14-d2-s3-release.tar.gz |
Merge cherrypicks of ['googleplex-android-review.googlesource.com/25631844'] into udc-d2-release.android-14.0.0_r45android-14.0.0_r44android-14.0.0_r43android-14.0.0_r42android-14.0.0_r41android-14.0.0_r40android-14.0.0_r39android-14.0.0_r38android14-d2-s5-releaseandroid14-d2-s4-releaseandroid14-d2-s3-releaseandroid14-d2-s2-releaseandroid14-d2-s1-releaseandroid14-d2-release
Change-Id: Iddf059897a5c5c17a9f8edeca0b8f139a3187e1f
-rw-r--r-- | src/rsn_supp/pmksa_cache.c | 22 | ||||
-rw-r--r-- | wpa_supplicant/wpas_glue.c | 6 |
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); |