aboutsummaryrefslogtreecommitdiffstats
path: root/wpa_supplicant/p2p_supplicant.c
diff options
context:
space:
mode:
authorJouni Malinen <jouni@qca.qualcomm.com>2015-11-30 19:35:16 (GMT)
committerJouni Malinen <j@w1.fi>2015-11-30 19:35:16 (GMT)
commit328f49acfe961a212e89e750516d2e2cc320765f (patch)
treecc968689d679a39ccce029b6eaf9fb813e89bb6c /wpa_supplicant/p2p_supplicant.c
parent5549bead85c296b818951fa7680c767003f8b69f (diff)
downloadhostap-328f49acfe961a212e89e750516d2e2cc320765f.zip
hostap-328f49acfe961a212e89e750516d2e2cc320765f.tar.gz
hostap-328f49acfe961a212e89e750516d2e2cc320765f.tar.bz2
P2P: Complete group formation on client data connection
This was already the case in the GO role where the first client connection is waited before marking wpa_s->p2p_go_group_formation_completed = 1 and clearing wpa_s->global->p2p_group_formation. However, in the P2P Client role, that was done already at the completion of the WPS exchange. This can be problematic since group formation timeout may still try to clear the group and with wpa_s->global->p2p_group_formation == NULL, the correct group interface may not be found. Fix this by postponing clearing of wpa_s->global->p2p_group_formation on the P2P Client side until the data connection has been completed and group is declared started. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
Diffstat (limited to 'wpa_supplicant/p2p_supplicant.c')
-rw-r--r--wpa_supplicant/p2p_supplicant.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index a60ae6e..077c5fe 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -6340,6 +6340,8 @@ void wpas_p2p_wps_success(struct wpa_supplicant *wpa_s, const u8 *peer_addr,
eloop_register_timeout(P2P_MAX_INITIAL_CONN_WAIT, 0,
wpas_p2p_group_formation_timeout,
wpa_s->parent, NULL);
+ /* Complete group formation on successful data connection. */
+ wpa_s->p2p_go_group_formation_completed = 0;
} else if (ssid) {
/*
* Use a separate timeout for initial data connection to
@@ -6890,6 +6892,15 @@ void wpas_p2p_completed(struct wpa_supplicant *wpa_s)
return;
wpa_s->show_group_started = 0;
+ if (!wpa_s->p2p_go_group_formation_completed &&
+ wpa_s->global->p2p_group_formation == wpa_s) {
+ wpa_dbg(wpa_s, MSG_DEBUG,
+ "P2P: Marking group formation completed on client on data connection");
+ wpa_s->p2p_go_group_formation_completed = 1;
+ wpa_s->global->p2p_group_formation = NULL;
+ wpa_s->p2p_in_provisioning = 0;
+ wpa_s->p2p_in_invitation = 0;
+ }
os_memset(go_dev_addr, 0, ETH_ALEN);
if (ssid->bssid_set)