[PATCH v4 17/20] PR: Restore dev_addr to station MAC after PD wdev stop

Kavita Kavita kavita.kavita at oss.qualcomm.com
Fri May 22 18:23:49 PDT 2026


When a PD wdev is created with a custom MAC, pr_set_dev_addr() updates
pr->cfg->dev_addr to the PD MAC address.  pr_pasn_auth_rx() validates
incoming PASN frames against pr->cfg->dev_addr, so without restoring
it, subsequent ranging sessions using the station MAC would have their
PASN frames rejected.

Call pr_set_dev_addr() with wpa_s->own_addr in wpas_pr_pd_stop() so
that pr->cfg->dev_addr reflects the station MAC once the PD wdev is
torn down.

Signed-off-by: Kavita Kavita <kavita.kavita at oss.qualcomm.com>
---
 wpa_supplicant/pr_supplicant.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/wpa_supplicant/pr_supplicant.c b/wpa_supplicant/pr_supplicant.c
index 23ba5a7cd..6529e6a0c 100644
--- a/wpa_supplicant/pr_supplicant.c
+++ b/wpa_supplicant/pr_supplicant.c
@@ -771,6 +771,8 @@ void wpas_pr_deinit(struct wpa_supplicant *wpa_s)
 
 void wpas_pr_pd_stop(struct wpa_supplicant *wpa_s)
 {
+	struct pr_data *pr = wpa_s->global->pr;
+
 	/* Cancel ranging session timeout and stop peer measurement */
 	eloop_cancel_timeout(wpas_pr_ranging_session_timeout, wpa_s, NULL);
 	wpa_drv_stop_peer_measurement(wpa_s);
@@ -785,7 +787,13 @@ void wpas_pr_pd_stop(struct wpa_supplicant *wpa_s)
 
 	wpa_drv_pd_stop(wpa_s);
 	os_memset(wpa_s->pd_addr, 0, ETH_ALEN);
-	wpa_printf(MSG_DEBUG, "PR: PD wdev stopped");
+
+	/* Restore dev_addr to station MAC now that PD wdev is gone */
+	if (pr)
+		pr_set_dev_addr(pr, wpa_s->own_addr);
+
+	wpa_printf(MSG_DEBUG, "PR: PD wdev stopped, dev_addr restored to " MACSTR,
+		   MAC2STR(wpa_s->own_addr));
 }
 
 
-- 
2.34.1




More information about the Hostap mailing list