[PATCH 26/29] EPPKE: Skip 4-Way handshake and authorize supplicant port on association
Sai Pratyusha Magam
smagam at qti.qualcomm.com
Thu Dec 11 05:14:40 PST 2025
From: Ainy Kumari <ainy.kumari at oss.qualcomm.com>
For EPPKE authentication, PTK is derived during authentication frame
exchange. Skip EAPOL 4-Way handshake and move supplicant state to
WPA_CONNECTED after association. Update state handling to authorize
the port and ensure proper control for SME-in-Userspace scenarios.
Signed-off-by: Ainy Kumari <ainy.kumari at oss.qualcomm.com>
---
wpa_supplicant/events.c | 15 +++++++++++++++
wpa_supplicant/wpa_supplicant.c | 5 +++++
2 files changed, 20 insertions(+)
diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
index 19ea8d7d3..c4f0adaba 100644
--- a/wpa_supplicant/events.c
+++ b/wpa_supplicant/events.c
@@ -4393,9 +4393,16 @@ static void wpa_supplicant_event_assoc(struct wpa_supplicant *wpa_s,
os_memset(wpa_s->pending_bssid, 0, ETH_ALEN);
wpas_notify_bssid_changed(wpa_s);
+#ifdef CONFIG_ENC_ASSOC
+ if (wpa_supplicant_dynamic_keys(wpa_s) && !ft_completed &&
+ !(wpa_s->sme.auth_alg == WPA_AUTH_ALG_EPPKE)) {
+ wpa_clear_keys(wpa_s, bssid, false);
+ }
+#else
if (wpa_supplicant_dynamic_keys(wpa_s) && !ft_completed) {
wpa_clear_keys(wpa_s, bssid, false);
}
+#endif /* CONFIG_ENC_ASSOC */
if (wpa_supplicant_select_config(wpa_s, data) < 0) {
wpa_supplicant_deauthenticate(
wpa_s, WLAN_REASON_DEAUTH_LEAVING);
@@ -4431,6 +4438,14 @@ static void wpa_supplicant_event_assoc(struct wpa_supplicant *wpa_s,
#endif /* CONFIG_SME */
wpa_msg(wpa_s, MSG_INFO, "Associated with " MACSTR, MAC2STR(bssid));
+#ifdef CONFIG_SME
+#ifdef CONFIG_ENC_ASSOC
+ if (wpa_s->sme.auth_alg == WPA_AUTH_ALG_EPPKE) {
+ data->assoc_info.authorized = true;
+ wpa_supplicant_set_state(wpa_s, WPA_COMPLETED);
+ }
+#endif /* CONFIG_ENC_ASSOC */
+#endif
if (wpa_s->current_ssid) {
/* When using scanning (ap_scan=1), SIM PC/SC interface can be
* initialized before association, but for other modes,
diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index 65dca0f72..cceb1194f 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -1219,6 +1219,11 @@ void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s,
MAC2STR(wpa_s->ap_mld_addr));
#ifdef CONFIG_SME
+#ifdef CONFIG_ENC_ASSOC
+ if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) &&
+ wpa_auth_alg_eppke(wpa_s->sme.auth_alg))
+ wpa_drv_set_supp_port(wpa_s, 1);
+#endif /* CONFIG_ENC_ASSOC */
if ((wpa_s->drv_flags & WPA_DRIVER_FLAGS_SME) &&
wpa_auth_alg_fils(wpa_s->sme.auth_alg))
fils_hlp_sent = 1;
--
2.34.1
More information about the Hostap
mailing list