From 30ee769235f3170d9bf6b62c11c6e018e97deb84 Mon Sep 17 00:00:00 2001 From: Michael Naumov Date: Sat, 11 Aug 2012 12:06:23 +0300 Subject: [PATCH] P2P: p2p_group_remove should fail on non-P2P interface p2p_group_remove should only attempt to remove P2P group interfaces and fail on non-P2P group interfaces. Signed-hostap: Michael Naumov Signed-hostap: Nirav Shah --- wpa_supplicant/p2p_supplicant.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index abe120fda..474478165 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -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); }