]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
P2P2: Handle join case without pending GO interface address
authorVinay Gannevaram <quic_vganneva@quicinc.com>
Wed, 11 Dec 2024 19:41:43 +0000 (01:11 +0530)
committerJouni Malinen <j@w1.fi>
Thu, 12 Dec 2024 17:55:30 +0000 (19:55 +0200)
Fetch a BSS entry using bssid = NULL instead of 00:00:00:00:00:00 when
starting join without a specific GO interface address. This is needed
for P2P2 client joining a group with preconfigured credentials (i.e.,
skipping the provisioning step).

Signed-off-by: Vinay Gannevaram <quic_vganneva@quicinc.com>
wpa_supplicant/p2p_supplicant.c

index 2eadf5ef5d8e1299ad31dd4780ca316c1fea0ff4..379ac8e996a73b1a74790e599fda61597d890c06 100644 (file)
@@ -6460,6 +6460,7 @@ static int wpas_p2p_join_start(struct wpa_supplicant *wpa_s, int freq,
        struct wpa_supplicant *group;
        struct p2p_go_neg_results res;
        struct wpa_bss *bss;
+       const u8 *iface_addr = NULL;
 
        group = wpas_p2p_get_group_iface(wpa_s, 0, 0);
        if (group == NULL)
@@ -6487,6 +6488,9 @@ static int wpas_p2p_join_start(struct wpa_supplicant *wpa_s, int freq,
        os_memcpy(res.peer_device_addr, wpa_s->pending_join_dev_addr, ETH_ALEN);
        os_memcpy(res.peer_interface_addr, wpa_s->pending_join_iface_addr,
                  ETH_ALEN);
+       if (!is_zero_ether_addr(wpa_s->pending_join_iface_addr))
+               iface_addr = wpa_s->pending_join_iface_addr;
+
        if (wpa_s->pending_join_password[0]) {
                res.akmp = WPA_KEY_MGMT_SAE;
                os_strlcpy(res.sae_password, wpa_s->pending_join_password,
@@ -6504,8 +6508,7 @@ static int wpas_p2p_join_start(struct wpa_supplicant *wpa_s, int freq,
                os_memcpy(res.ssid, ssid, ssid_len);
        } else {
                if (ssid && ssid_len) {
-                       bss = wpa_bss_get(wpa_s, wpa_s->pending_join_iface_addr,
-                                         ssid, ssid_len);
+                       bss = wpa_bss_get(wpa_s, iface_addr, ssid, ssid_len);
                } else {
                        bss = wpa_bss_get_bssid_latest(
                                wpa_s, wpa_s->pending_join_iface_addr);