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 <michael.naumov@intel.com>
Signed-hostap: Nirav Shah <nirav.j2.shah@intel.com>
This commit is contained in:
Michael Naumov 2012-08-11 12:06:23 +03:00 committed by Jouni Malinen
parent f0c7a986bb
commit 30ee769235

View 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; struct wpa_ssid *ssid;
char *gtype; char *gtype;
@ -234,6 +234,16 @@ static void wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, int silent)
break; break;
ssid = ssid->next; 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) if (wpa_s->p2p_group_interface == P2P_GROUP_INTERFACE_GO)
gtype = "GO"; gtype = "GO";
@ -295,7 +305,7 @@ static void wpas_p2p_group_delete(struct wpa_supplicant *wpa_s, int silent)
if (wpa_s && ifname) if (wpa_s && ifname)
wpa_drv_if_remove(wpa_s, type, ifname); wpa_drv_if_remove(wpa_s, type, ifname);
os_free(ifname); os_free(ifname);
return; return 0;
} }
wpa_printf(MSG_DEBUG, "P2P: Remove temporary group network"); 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); wpa_supplicant_ap_deinit(wpa_s);
else else
wpa_drv_deinit_p2p_cli(wpa_s); wpa_drv_deinit_p2p_cli(wpa_s);
return 0;
} }
@ -4796,9 +4808,7 @@ int wpas_p2p_disconnect(struct wpa_supplicant *wpa_s)
return -1; return -1;
wpa_s->removal_reason = P2P_GROUP_REMOVAL_REQUESTED; wpa_s->removal_reason = P2P_GROUP_REMOVAL_REQUESTED;
wpas_p2p_group_delete(wpa_s, 0); return wpas_p2p_group_delete(wpa_s, 0);
return 0;
} }