P2PS: Validate WPS config methods more accurately in PD Request
authorAndrei Otcheretianski <andrei.otcheretianski@intel.com>
Thu, 2 Jul 2015 07:45:01 +0000 (10:45 +0300)
committerJouni Malinen <j@w1.fi>
Tue, 7 Jul 2015 17:24:01 +0000 (20:24 +0300)
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 <andrei.otcheretianski@intel.com>
Reviewed-by: Ilan Peer <ilan.peer@intel.com>
src/p2p/p2p_pd.c

index 1b27063..5121511 100644 (file)
@@ -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;
        }