[PATCH] gsupplicant: Set MFP optional and key_mgmt for PSK

"Dembianny, Sven (GDE-EDSD7)" <[email protected]> Thu, 15 May 2025 15:24:47 +0200
Newsgroups dev.linux.lists.connman
Message-ID <[email protected]>
From: Sven Dembianny <[email protected]>

This replaces 23b09a8a and enables MFPC independent of AP setting which
is needed for WFA certification, see "Wi-Fi CERTIFIED Protected
Management Frames Test Plan v1.9.pdf", 3.3.2 "STAUT requirements".

Additionally key_mgmt is set independent of AP because roaming between
APs with different AKM, e.g. WPA2 -> WPA3 is not working, since WPA-PSK
is still set from first connection.

wpa_supplicant does not try to connect at all in that case:
    skip RSN IE - key mgmt mismatch
    reject due to mismatch with WPA/WPA2
---
 gsupplicant/supplicant.c | 19 +++----------------
 1 file changed, 3 insertions(+), 16 deletions(-)

diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c
index f3be9e7b..5e289953 100644
--- a/gsupplicant/supplicant.c
+++ b/gsupplicant/supplicant.c
@@ -4955,22 +4955,9 @@ static void add_network_security(DBusMessageIter *dict, GSupplicantSSID *ssid)
 		add_network_security_ciphers(dict, ssid);
 		break;
 	case G_SUPPLICANT_SECURITY_PSK:
-		if (ssid->keymgmt & G_SUPPLICANT_KEYMGMT_SAE) {
-			if (ssid->keymgmt & G_SUPPLICANT_KEYMGMT_WPA_PSK) {
-				/*
-				 * WPA3-Personal transition mode: supports both
-				 * WPA2-Personal (PSK) and WPA3-Personal (SAE)
-				 */
-				key_mgmt = "SAE WPA-PSK";
-				ieee80211w = G_SUPPLICANT_MFP_OPTIONAL;
-			} else {
-				key_mgmt = "SAE";
-				ieee80211w = G_SUPPLICANT_MFP_REQUIRED;
-			}
-			add_network_ieee80211w(dict, ssid, ieee80211w);
-		} else {
-			key_mgmt = "WPA-PSK";
-		}
+		key_mgmt = "SAE WPA-PSK WPA-PSK-SHA256";
+		ieee80211w = G_SUPPLICANT_MFP_OPTIONAL;
+		add_network_ieee80211w(dict, ssid, ieee80211w);
 		add_network_security_psk(dict, ssid);
 		add_network_security_ciphers(dict, ssid);
 		add_network_security_proto(dict, ssid);
-- 
2.49.0