From 2fc866d1bc89f2e10a51b129a76d9aa0e0bfc1be Mon Sep 17 00:00:00 2001 From: Andrei Otcheretianski Date: Thu, 2 Jul 2015 10:45:01 +0300 Subject: [PATCH] P2PS: Validate WPS config methods more accurately in PD Request In case of a P2PS PD, allow keypad, display, and P2PS WPS config methods. For a legacy PD, allow keypad, display, and pushbutton methods. Signed-off-by: Andrei Otcheretianski Reviewed-by: Ilan Peer --- src/p2p/p2p_pd.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/p2p/p2p_pd.c b/src/p2p/p2p_pd.c index 1b2706387..51215119b 100644 --- a/src/p2p/p2p_pd.c +++ b/src/p2p/p2p_pd.c @@ -418,6 +418,7 @@ void p2p_process_prov_disc_req(struct p2p_data *p2p, const u8 *sa, u8 group_mac[ETH_ALEN]; int passwd_id = DEV_PW_DEFAULT; u16 config_methods; + u16 allowed_config_methods = WPS_CONFIG_DISPLAY | WPS_CONFIG_KEYPAD; if (p2p_parse(data, len, &msg)) return; @@ -441,9 +442,12 @@ void p2p_process_prov_disc_req(struct p2p_data *p2p, const u8 *sa, dev->info.wfd_subelems = wpabuf_dup(msg.wfd_subelems); } - if (!(msg.wps_config_methods & - (WPS_CONFIG_DISPLAY | WPS_CONFIG_KEYPAD | - WPS_CONFIG_PUSHBUTTON | WPS_CONFIG_P2PS))) { + if (msg.adv_id) + allowed_config_methods |= WPS_CONFIG_P2PS; + else + allowed_config_methods |= WPS_CONFIG_PUSHBUTTON; + + if (!(msg.wps_config_methods & allowed_config_methods)) { p2p_dbg(p2p, "Unsupported Config Methods in Provision Discovery Request"); goto out; }