]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
P2P: Remove group from timeout on PSK failure
authorJouni Malinen <jouni@qca.qualcomm.com>
Mon, 2 Sep 2013 13:33:42 +0000 (16:33 +0300)
committerJouni Malinen <j@w1.fi>
Mon, 2 Sep 2013 13:33:42 +0000 (16:33 +0300)
Avoid potential issues with removing a P2P group on PSK failure directly
from the wpa_supplicant_event() call since the caller (in driver_*.c)
may not be prepared for the interface disappearing at that point in
time.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>

wpa_supplicant/p2p_supplicant.c

index c0e8651c0eaf38256441d036542d72a4c5d32e08..4b941c7f9593ae65c59f6d97890be16149320399 100644 (file)
@@ -6255,6 +6255,13 @@ void wpas_p2p_remove_client(struct wpa_supplicant *wpa_s, const u8 *peer,
 }
 
 
+static void wpas_p2p_psk_failure_removal(void *eloop_ctx, void *timeout_ctx)
+{
+       struct wpa_supplicant *wpa_s = eloop_ctx;
+       wpas_p2p_group_delete(wpa_s, P2P_GROUP_REMOVAL_PSK_FAILURE);
+}
+
+
 int wpas_p2p_4way_hs_failed(struct wpa_supplicant *wpa_s)
 {
        struct wpa_ssid *ssid = wpa_s->current_ssid;
@@ -6288,7 +6295,13 @@ int wpas_p2p_4way_hs_failed(struct wpa_supplicant *wpa_s)
                               persistent->id);
        disconnect:
                wpa_s->p2p_last_4way_hs_fail = NULL;
-               wpas_p2p_group_delete(wpa_s, P2P_GROUP_REMOVAL_PSK_FAILURE);
+               /*
+                * Remove the group from a timeout to avoid issues with caller
+                * continuing to use the interface if this is on a P2P group
+                * interface.
+                */
+               eloop_register_timeout(0, 0, wpas_p2p_psk_failure_removal,
+                                      wpa_s, NULL);
                return 1;
        }