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 <j@w1.fi>
This commit is contained in:
parent
6d0b447464
commit
44b9ea5bb2
3 changed files with 21 additions and 2 deletions
|
@ -1421,6 +1421,9 @@ static int wpas_select_network_from_last_scan(struct wpa_supplicant *wpa_s,
|
||||||
struct wpa_bss *selected;
|
struct wpa_bss *selected;
|
||||||
struct wpa_ssid *ssid = NULL;
|
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);
|
selected = wpa_supplicant_pick_network(wpa_s, &ssid);
|
||||||
|
|
||||||
if (selected) {
|
if (selected) {
|
||||||
|
|
|
@ -96,6 +96,10 @@ int wpa_supplicant_enabled_networks(struct wpa_supplicant *wpa_s)
|
||||||
{
|
{
|
||||||
struct wpa_ssid *ssid = wpa_s->conf->ssid;
|
struct wpa_ssid *ssid = wpa_s->conf->ssid;
|
||||||
int count = 0, disabled = 0;
|
int count = 0, disabled = 0;
|
||||||
|
|
||||||
|
if (wpa_s->p2p_mgmt)
|
||||||
|
return 0; /* no normal network profiles on p2p_mgmt interface */
|
||||||
|
|
||||||
while (ssid) {
|
while (ssid) {
|
||||||
if (!wpas_network_disabled(wpa_s, ssid))
|
if (!wpas_network_disabled(wpa_s, ssid))
|
||||||
count++;
|
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)
|
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,
|
int res;
|
||||||
NULL);
|
|
||||||
|
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) {
|
if (res == 1) {
|
||||||
wpa_dbg(wpa_s, MSG_DEBUG, "Rescheduling scan request: %d.%06d sec",
|
wpa_dbg(wpa_s, MSG_DEBUG, "Rescheduling scan request: %d.%06d sec",
|
||||||
sec, usec);
|
sec, usec);
|
||||||
|
|
|
@ -4966,6 +4966,9 @@ int wpas_network_disabled(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
|
||||||
int i;
|
int i;
|
||||||
unsigned int drv_enc;
|
unsigned int drv_enc;
|
||||||
|
|
||||||
|
if (wpa_s->p2p_mgmt)
|
||||||
|
return 1; /* no normal network profiles on p2p_mgmt interface */
|
||||||
|
|
||||||
if (ssid == NULL)
|
if (ssid == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue