]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
P2PS: Cleanup pending_p2ps_group flag
authorAndrei Otcheretianski <andrei.otcheretianski@intel.com>
Wed, 3 Apr 2019 15:17:19 +0000 (18:17 +0300)
committerJouni Malinen <j@w1.fi>
Mon, 15 Apr 2019 21:19:03 +0000 (00:19 +0300)
pending_p2ps_group flag is not always cleaned, which may later result
in an unexpected GO bring up, after PD response is transmitted in
wpas_prov_disc_resp_cb().
This can be seen when running the following hwsim tests together:
 - p2ps_channel_sta_connected_disallow_freq_mcc
 - p2ps_channel_active_go_and_station_different_mcc
Fix this by clearing pending_p2ps_group flag also when processing new
PD requests. In addition, set this flag only when really needed.

Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
wpa_supplicant/p2p_supplicant.c

index 3f2b47b7e72d8d154159f1526554e433d2554cd1..e7c1f5d5aca41d48eef573e7c6106c2cc7fe643f 100644 (file)
@@ -4188,6 +4188,9 @@ static void wpas_p2ps_prov_complete(void *ctx, u8 status, const u8 *dev,
                return;
        }
 
+       wpa_s->global->pending_p2ps_group = 0;
+       wpa_s->global->pending_p2ps_group_freq = 0;
+
        if (conncap == P2PS_SETUP_GROUP_OWNER) {
                /*
                 * We need to copy the interface name. Simply saving a
@@ -4198,8 +4201,10 @@ static void wpas_p2ps_prov_complete(void *ctx, u8 status, const u8 *dev,
 
                go_ifname[0] = '\0';
                if (!go_wpa_s) {
-                       wpa_s->global->pending_p2ps_group = 1;
-                       wpa_s->global->pending_p2ps_group_freq = freq;
+                       if (!response_done) {
+                               wpa_s->global->pending_p2ps_group = 1;
+                               wpa_s->global->pending_p2ps_group_freq = freq;
+                       }
 
                        if (!wpas_p2p_create_iface(wpa_s))
                                os_memcpy(go_ifname, wpa_s->ifname,