]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
P2P2: Update P2P Device Address when changing netdev address
authorShivani Baranwal <quic_shivbara@quicinc.com>
Sun, 18 Aug 2024 10:54:23 +0000 (16:24 +0530)
committerJouni Malinen <j@w1.fi>
Fri, 1 Nov 2024 14:34:13 +0000 (16:34 +0200)
P2P2 adds support for privacy and needs ability to update the P2P Device
Address. Update that whenever changing the interface address in
wpa_supplicant for other (non-P2P) MAC address randomization purposes.

Signed-off-by: Shivani Baranwal <quic_shivbara@quicinc.com>
src/p2p/p2p.c
src/p2p/p2p.h
wpa_supplicant/p2p_supplicant.c
wpa_supplicant/p2p_supplicant.h
wpa_supplicant/wpa_supplicant.c

index 462a81de57f00f777d0bc355c643f8a3a8efe9a1..6312f58343fbd46406b92109d29a162b107eceb4 100644 (file)
@@ -3067,6 +3067,13 @@ bool is_p2p_6ghz_disabled(struct p2p_data *p2p)
 }
 
 
+void p2p_set_dev_addr(struct p2p_data *p2p, const u8 *addr)
+{
+       if (p2p && addr)
+               os_memcpy(p2p->cfg->dev_addr, addr, ETH_ALEN);
+}
+
+
 static void p2p_pairing_info_deinit(struct p2p_data *p2p)
 {
 #ifdef CONFIG_PASN
index f1d8890c568fe9c9894df5a62928ec7dc812bf76..cd214d4841109ca975946458f502cd0b10994752 100644 (file)
@@ -2689,6 +2689,7 @@ void p2p_set_pasn_type(struct p2p_data *p2p, u8 pasn_type);
 void p2p_set_comeback_after(struct p2p_data *p2p, int comeback_after);
 void p2p_set_reg_info(struct p2p_data *p2p, u8 val);
 void p2p_set_twt_power_mgmt(struct p2p_data *p2p, int val);
+void p2p_set_dev_addr(struct p2p_data *p2p, const u8 *addr);
 
 int p2p_get_listen_freq(struct p2p_data *p2p, const u8 *peer_addr);
 int p2p_initiate_pasn_auth(struct p2p_data *p2p, const u8 *addr, int freq);
index 608836cc6e8aa7456d567f8a9d3f571a8bca0966..1cbe6f1aa08569aab364d10f33a2ed57a47e4cb2 100644 (file)
@@ -11000,3 +11000,10 @@ int wpas_p2p_pasn_auth_tx_status(struct wpa_supplicant *wpa_s, const u8 *data,
 }
 
 #endif /* CONFIG_PASN */
+
+
+void wpas_p2p_update_dev_addr(struct wpa_supplicant *wpa_s)
+{
+       os_memcpy(wpa_s->global->p2p_dev_addr, wpa_s->own_addr, ETH_ALEN);
+       p2p_set_dev_addr(wpa_s->global->p2p, wpa_s->own_addr);
+}
index 0c7081821a9245b3f06627af96aebfa99388538d..24e742b5ed077cfa4bb7b84ed1b7b429adfd1a52 100644 (file)
@@ -236,6 +236,7 @@ int wpas_p2p_lo_start(struct wpa_supplicant *wpa_s, unsigned int freq,
 int wpas_p2p_lo_stop(struct wpa_supplicant *wpa_s);
 int wpas_p2p_mac_setup(struct wpa_supplicant *wpa_s);
 struct wpabuf * wpas_p2p_usd_elems(struct wpa_supplicant *wpa_s);
+void wpas_p2p_update_dev_addr(struct wpa_supplicant *wpa_s);
 int wpas_p2p_pasn_auth_rx(struct wpa_supplicant *wpa_s,
                          const struct ieee80211_mgmt *mgmt, size_t len,
                          int freq);
@@ -370,6 +371,10 @@ static inline struct wpabuf * wpas_p2p_usd_elems(struct wpa_supplicant *wpa_s)
        return NULL;
 }
 
+static inline void wpas_p2p_update_dev_addr(struct wpa_supplicant *wpa_s)
+{
+}
+
 #endif /* CONFIG_P2P */
 
 #endif /* P2P_SUPPLICANT_H */
index 60b0db00e21a15739c9783f1a5f75d594534bb95..c5cf9c70db1b5df6091bd35f55d6ffd9eae8d6a3 100644 (file)
@@ -2516,6 +2516,8 @@ int wpas_update_random_addr(struct wpa_supplicant *wpa_s,
                return -1;
        }
 
+       wpas_p2p_update_dev_addr(wpa_s);
+
        wpa_msg(wpa_s, MSG_DEBUG, "Using random MAC address " MACSTR,
                MAC2STR(addr));
 
@@ -2610,6 +2612,9 @@ int wpas_restore_permanent_mac_addr(struct wpa_supplicant *wpa_s)
                        "Could not update MAC address information");
                return -1;
        }
+
+       wpas_p2p_update_dev_addr(wpa_s);
+
        wpa_msg(wpa_s, MSG_DEBUG, "Using permanent MAC address");
        return 0;
 }