From 44b9ea5bb2e22311c33fb4981598683df243175b Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sun, 1 Mar 2015 11:23:09 +0200 Subject: [PATCH] P2P: Do not allow scan or normal association on cfg80211 P2P Device The dedicated P2P management instance (wpas->p2p_mgmt == 1) using cfg80211 P2P Device cannot be used for non-P2P uses or connection (there is no netdev). Reject or ignore such operations to avoid unexpected operations if enabled network blocks are configured in the wpa_supplicant instance used to control this interface. Signed-off-by: Jouni Malinen --- wpa_supplicant/events.c | 3 +++ wpa_supplicant/scan.c | 17 +++++++++++++++-- wpa_supplicant/wpa_supplicant.c | 3 +++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index f76fe97c5..1f9fc97a9 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -1421,6 +1421,9 @@ static int wpas_select_network_from_last_scan(struct wpa_supplicant *wpa_s, struct wpa_bss *selected; struct wpa_ssid *ssid = NULL; + if (wpa_s->p2p_mgmt) + return 0; /* no normal connection on p2p_mgmt interface */ + selected = wpa_supplicant_pick_network(wpa_s, &ssid); if (selected) { diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c index 6e376a2ab..27e2cc0f5 100644 --- a/wpa_supplicant/scan.c +++ b/wpa_supplicant/scan.c @@ -96,6 +96,10 @@ int wpa_supplicant_enabled_networks(struct wpa_supplicant *wpa_s) { struct wpa_ssid *ssid = wpa_s->conf->ssid; int count = 0, disabled = 0; + + if (wpa_s->p2p_mgmt) + return 0; /* no normal network profiles on p2p_mgmt interface */ + while (ssid) { if (!wpas_network_disabled(wpa_s, ssid)) count++; @@ -1066,8 +1070,17 @@ void wpa_supplicant_update_scan_int(struct wpa_supplicant *wpa_s, int sec) */ void wpa_supplicant_req_scan(struct wpa_supplicant *wpa_s, int sec, int usec) { - int res = eloop_deplete_timeout(sec, usec, wpa_supplicant_scan, wpa_s, - NULL); + int res; + + if (wpa_s->p2p_mgmt) { + wpa_dbg(wpa_s, MSG_DEBUG, + "Ignore scan request (%d.%06d sec) on p2p_mgmt interface", + sec, usec); + return; + } + + res = eloop_deplete_timeout(sec, usec, wpa_supplicant_scan, wpa_s, + NULL); if (res == 1) { wpa_dbg(wpa_s, MSG_DEBUG, "Rescheduling scan request: %d.%06d sec", sec, usec); diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index 16f05c7d7..e96199ea2 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -4966,6 +4966,9 @@ int wpas_network_disabled(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid) int i; unsigned int drv_enc; + if (wpa_s->p2p_mgmt) + return 1; /* no normal network profiles on p2p_mgmt interface */ + if (ssid == NULL) return 1;