[PATCH v2 22/28] Add support for temporal key removal on association failure
Ainy Kumari
ainy.kumari at oss.qualcomm.com
Tue Jan 6 05:45:32 PST 2026
From: Kavita Kavita <kavita.kavita at oss.qualcomm.com>
This change adds logic to remove the configured temporal key (TK) for
Enhanced Privacy Protection Key Exchange (EPPKE) in the event of an
association request and/or response failure.
The removal is triggered immediately upon detection of association
request/response failure.
Signed-off-by: Kavita Kavita <kavita.kavita at oss.qualcomm.com>
---
wpa_supplicant/events.c | 10 ++++++++++
wpa_supplicant/sme.c | 20 ++++++++++++++++++++
2 files changed, 30 insertions(+)
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index d831557b3..3083271f8 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -390,6 +390,16 @@ void wpa_supplicant_mark_disassoc(struct wpa_supplicant *wpa_s)
}
wpa_supplicant_set_state(wpa_s, WPA_DISCONNECTED);
+
+#ifdef CONFIG_ENC_ASSOC
+ /* Clear configured keys and PTKSA */
+
+ if (wpa_s->ptksa &&
+ ptksa_cache_get(wpa_s->ptksa, wpa_s->bssid, WPA_CIPHER_NONE)) {
+ wpa_clear_keys(wpa_s, wpa_s->bssid);
+ ptksa_cache_flush(wpa_s->ptksa, wpa_s->bssid, WPA_CIPHER_NONE);
+ }
+#endif
bssid_changed = !is_zero_ether_addr(wpa_s->bssid);
os_memset(wpa_s->bssid, 0, ETH_ALEN);
os_memset(wpa_s->pending_bssid, 0, ETH_ALEN);
diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c
index eaed91c1c..092ad6ff5 100644
--- a/wpa_supplicant/sme.c
+++ b/wpa_supplicant/sme.c
@@ -2997,6 +2997,17 @@ mscs_fail:
wpas_connection_failed(wpa_s, wpa_s->pending_bssid,
NULL);
wpa_supplicant_set_state(wpa_s, WPA_DISCONNECTED);
+#ifdef CONFIG_ENC_ASSOC
+ /* Clear configured keys and PTKSA */
+
+ if (wpa_s->ptksa && ptksa_cache_get(wpa_s->ptksa,
+ wpa_s->bssid,
+ WPA_CIPHER_NONE)) {
+ wpa_clear_keys(wpa_s, wpa_s->bssid);
+ ptksa_cache_flush(wpa_s->ptksa, wpa_s->bssid,
+ WPA_CIPHER_NONE);
+ }
+#endif
os_memset(wpa_s->pending_bssid, 0, ETH_ALEN);
}
return;
@@ -3059,6 +3070,15 @@ static void sme_deauth(struct wpa_supplicant *wpa_s, const u8 **link_bssids)
wpas_connection_failed(wpa_s, wpa_s->pending_bssid, link_bssids);
wpa_supplicant_set_state(wpa_s, WPA_DISCONNECTED);
+#ifdef CONFIG_ENC_ASSOC
+ /* Clear configured keys and PTKSA */
+
+ if (wpa_s->ptksa &&
+ ptksa_cache_get(wpa_s->ptksa, wpa_s->bssid, WPA_CIPHER_NONE)) {
+ wpa_clear_keys(wpa_s, wpa_s->bssid);
+ ptksa_cache_flush(wpa_s->ptksa, wpa_s->bssid, WPA_CIPHER_NONE);
+ }
+#endif
os_memset(wpa_s->bssid, 0, ETH_ALEN);
os_memset(wpa_s->pending_bssid, 0, ETH_ALEN);
if (bssid_changed)
--
2.25.1
More information about the Hostap
mailing list