diff mbox

P2P: Prevent p2p connect misuse

Message ID 20150301095723.GB30124@w1.fi
State Accepted
Headers show

Commit Message

Jouni Malinen March 1, 2015, 9:57 a.m. UTC
On Sat, Dec 06, 2014 at 12:49:06PM +0100, Arend van Spriel wrote:
> Would it be better to call the p2p_ctrl_*() functions with
> wpa_s->global->p2p_init_wpa_s. At least p2p_ctrl_find() and probably
> p2p_ctrl_connect(). Or should it be decided at another level in the
> supplicant.

It is more complex than that since some of the commands may actually
apply to the group interface rather than the global management
interface. Something like this is likely needed to be done for some of
the commands:

P2P: Direct P2P_CONNECT command to proper interface

It is possible for the P2P_CONNECT control interface command to be
issued on an incorrect interface. While the upper layer component should
really use global control interface for this, make this work by
redirecting the command to the correct context if needed.

Signed-off-by: Jouni Malinen <j@w1.fi>
---
 wpa_supplicant/ctrl_iface.c | 8 ++++++++
 1 file changed, 8 insertions(+)
diff mbox

Patch

diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index a2d79fa..e840b35 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -4741,6 +4741,14 @@  static int p2p_ctrl_connect(struct wpa_supplicant *wpa_s, char *cmd,
 	int pd;
 	int ht40, vht;
 
+	if (!wpa_s->global->p2p_init_wpa_s)
+		return -1;
+	if (wpa_s->global->p2p_init_wpa_s != wpa_s) {
+		wpa_dbg(wpa_s, MSG_DEBUG, "Direct P2P_CONNECT command to %s",
+			wpa_s->global->p2p_init_wpa_s->ifname);
+		wpa_s = wpa_s->global->p2p_init_wpa_s;
+	}
+
 	/* <addr> <"pbc" | "pin" | PIN> [label|display|keypad|p2ps]
 	 * [persistent|persistent=<network id>]
 	 * [join] [auth] [go_intent=<0..15>] [freq=<in MHz>] [provdisc]