]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
P2P: Set global->p2p_group_formation in wpas_p2p_join_start() for p2pdev
authorAloni, Adiel <adiel.aloni@intel.com>
Mon, 21 Aug 2017 16:36:22 +0000 (19:36 +0300)
committerJouni Malinen <j@w1.fi>
Tue, 1 Jan 2019 14:56:22 +0000 (16:56 +0200)
When a dedicated P2P device interface is used, the
global->p2p_group_formation was not set in wpas_p2p_join_start() if no
separate group interface is used. This would cause that in case of a
failure in group formation, the cleaning of p2p_in_provisioning is done
on the wrong interface. Furthermore, P2P_CANCEL command could not be
used to stop such a group-join operation. Fix this by setting the
global->p2p_group_formation correctly in case that the group interface
is reusing wpa_s->parent.

Signed-off-by: Adiel Aloni <adiel.aloni@intel.com>
wpa_supplicant/p2p_supplicant.c

index c596d5ab6148435e0e6da9fde87e8c9f3e85ff18..304989467295054f5c197ae2ff9f95072d9272fd 100644 (file)
@@ -5107,17 +5107,18 @@ static int wpas_p2p_join_start(struct wpa_supplicant *wpa_s, int freq,
                os_memcpy(group->p2p_pin, wpa_s->p2p_pin,
                          sizeof(group->p2p_pin));
                group->p2p_wps_method = wpa_s->p2p_wps_method;
-       } else {
-               /*
-                * Need to mark the current interface for p2p_group_formation
-                * when a separate group interface is not used. This is needed
-                * to allow p2p_cancel stop a pending p2p_connect-join.
-                * wpas_p2p_init_group_interface() addresses this for the case
-                * where a separate group interface is used.
-                */
-               wpa_s->global->p2p_group_formation = wpa_s;
        }
 
+       /*
+        * Need to mark the current interface for p2p_group_formation
+        * when a separate group interface is not used. This is needed
+        * to allow p2p_cancel stop a pending p2p_connect-join.
+        * wpas_p2p_init_group_interface() addresses this for the case
+        * where a separate group interface is used.
+        */
+       if (group == wpa_s->parent)
+               wpa_s->global->p2p_group_formation = group;
+
        group->p2p_in_provisioning = 1;
        group->p2p_fallback_to_go_neg = wpa_s->p2p_fallback_to_go_neg;