From d0e2570a766d51c80cd0d6ee513e8fb3763bfbbd Mon Sep 17 00:00:00 2001 From: Shivani Baranwal Date: Mon, 18 Nov 2024 11:30:26 +0530 Subject: [PATCH] P2P2: Store WPA3 connection credentials in the configuration Persistent connection details were stored only for WPA2-PSK mode. Enable the storage of WPA3 sae_password, authentication algorithm, key management, and protocol type. Also, allow credentials without sae_password for the pmk_valid case. Signed-off-by: Shivani Baranwal --- wpa_supplicant/config_file.c | 3 ++- wpa_supplicant/p2p_supplicant.c | 12 +++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/wpa_supplicant/config_file.c b/wpa_supplicant/config_file.c index b250eabb7..5d60af04a 100644 --- a/wpa_supplicant/config_file.c +++ b/wpa_supplicant/config_file.c @@ -1818,7 +1818,8 @@ int wpa_config_write(const char *name, struct wpa_config *config) !ssid->psk_set && !ssid->passphrase) continue; /* do not save invalid network */ if (wpa_key_mgmt_sae(ssid->key_mgmt) && - !ssid->passphrase && !ssid->sae_password) + !ssid->passphrase && !ssid->sae_password && + !ssid->pmk_valid) continue; /* do not save invalid network */ fprintf(f, "\nnetwork={\n"); wpa_config_write_network(f, ssid); diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index 8125b0469..079a91034 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -1228,12 +1228,18 @@ static int wpas_p2p_store_persistent_group(struct wpa_supplicant *wpa_s, s->bssid_set = 1; os_memcpy(s->bssid, go_dev_addr, ETH_ALEN); s->mode = ssid->mode; - s->auth_alg = WPA_AUTH_ALG_OPEN; - s->key_mgmt = WPA_KEY_MGMT_PSK; - s->proto = WPA_PROTO_RSN; + s->auth_alg = ssid->auth_alg; + s->key_mgmt = ssid->key_mgmt; + s->proto = ssid->proto; s->pbss = ssid->pbss; + s->pmk_valid = ssid->pmk_valid; s->pairwise_cipher = ssid->pbss ? WPA_CIPHER_GCMP : WPA_CIPHER_CCMP; s->export_keys = 1; + + if (ssid->sae_password) { + os_free(s->sae_password); + s->sae_password = os_strdup(ssid->sae_password); + } if (ssid->passphrase) { os_free(s->passphrase); s->passphrase = os_strdup(ssid->passphrase); -- 2.47.2