]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
P2P: p2p_group_remove should fail on non-P2P interface
authorMichael Naumov <michael.naumov@intel.com>
Sat, 11 Aug 2012 09:06:23 +0000 (12:06 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 11 Aug 2012 09:06:23 +0000 (12:06 +0300)
p2p_group_remove should only attempt to remove P2P group
interfaces and fail on non-P2P group interfaces.

Signed-hostap: Michael Naumov <michael.naumov@intel.com>
Signed-hostap: Nirav Shah <nirav.j2.shah@intel.com>

wpa_supplicant/p2p_supplicant.c

index abe120fda0b97c786c40a75caa481bc0a0288b64..474478165ac58d57422fe8042a5933d8f67f42db 100644 (file)
@@ -214,7 +214,7 @@ static struct wpa_supplicant * wpas_get_p2p_group(struct wpa_supplicant *wpa_s,
 }
 
 
-static void wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, int silent)
+static int wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, int silent)
 {
        struct wpa_ssid *ssid;
        char *gtype;
@@ -234,6 +234,16 @@ static void wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, int silent)
                                break;
                        ssid = ssid->next;
                }
+               if (ssid == NULL) {
+                       /*
+                        * Reset wpa_s->removal_reason to the default unknown
+                        * state.
+                        */
+                       wpa_s->removal_reason = P2P_GROUP_REMOVAL_UNKNOWN;
+                       wpa_printf(MSG_ERROR, "P2P: P2P group interface "
+                                  "not found");
+                       return -1;
+               }
        }
        if (wpa_s->p2p_group_interface == P2P_GROUP_INTERFACE_GO)
                gtype = "GO";
@@ -295,7 +305,7 @@ static void wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, int silent)
                if (wpa_s && ifname)
                        wpa_drv_if_remove(wpa_s, type, ifname);
                os_free(ifname);
-               return;
+               return 0;
        }
 
        wpa_printf(MSG_DEBUG, "P2P: Remove temporary group network");
@@ -328,6 +338,8 @@ static void wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, int silent)
                wpa_supplicant_ap_deinit(wpa_s);
        else
                wpa_drv_deinit_p2p_cli(wpa_s);
+
+       return 0;
 }
 
 
@@ -4796,9 +4808,7 @@ int wpas_p2p_disconnect(struct wpa_supplicant *wpa_s)
                return -1;
 
        wpa_s->removal_reason = P2P_GROUP_REMOVAL_REQUESTED;
-       wpas_p2p_group_delete(wpa_s, 0);
-
-       return 0;
+       return wpas_p2p_group_delete(wpa_s, 0);
 }