From 76335b2558c46771333dc717d3558b93fb2747fe Mon Sep 17 00:00:00 2001 From: "kapil.gupta" Date: Mon, 11 May 2020 11:18:12 +0530 Subject: [PATCH] wpa_supplicant: WPS Inter operatability Fixes Add WPS IOT fixes under config option Current fixes under this flag. 1. Allow NULL-padded WPS attributes. 2. Bypass WPS-Config method validation --- components/wpa_supplicant/Kconfig | 19 +++++++++++++++++++ .../wpa_supplicant/src/wps/wps_attr_parse.c | 2 ++ .../wpa_supplicant/src/wps/wps_validate.c | 2 ++ 3 files changed, 23 insertions(+) diff --git a/components/wpa_supplicant/Kconfig b/components/wpa_supplicant/Kconfig index 0938ad30d..88d29476f 100644 --- a/components/wpa_supplicant/Kconfig +++ b/components/wpa_supplicant/Kconfig @@ -29,4 +29,23 @@ menu "Supplicant" help Select this to enable TLS v1.2 for WPA2-Enterprise Authentication. + config WPA_WPS_WARS + bool "Add WPS Inter operatability Fixes" + default n + help + Select this option to enable WPS related IOT fixes with + different APs. This option fixes IOT related issues with + APs which do not follow some of the standards of WPS-2.0 + specification. These do not include any of the security + related bypassing, just simple configuration corrections. + + Current fixes under this flag. + 1. Allow NULL-padded WPS attributes: Some APs keep NULL-padding + at the end of some variable length WPS Attributes. + This is not as par the WPS2.0 specs, but to avoid interop issues, + ignore the padding by reducing the attribute length by 1. + 2. Bypass WPS-Config method validation: Some APs set display/pbc + button bit without setting virtual/phycial display/button bit which + will cause M2 validation fail, bypassing WPS-Config method validation. + endmenu diff --git a/components/wpa_supplicant/src/wps/wps_attr_parse.c b/components/wpa_supplicant/src/wps/wps_attr_parse.c index 29358aa15..143be1186 100644 --- a/components/wpa_supplicant/src/wps/wps_attr_parse.c +++ b/components/wpa_supplicant/src/wps/wps_attr_parse.c @@ -134,6 +134,7 @@ static u16 wps_ignore_null_padding_in_attr(const u8 *pos, u16 type, u16 attr_dat if (len == 0) return 0; +#ifdef CONFIG_WPA_WPS_WARS /* * Some AP's keep NULL-padding at the end of some variable length WPS Attributes. * This is not as par the WPS2.0 specs, but to avoid interop issues, ignore the @@ -153,6 +154,7 @@ static u16 wps_ignore_null_padding_in_attr(const u8 *pos, u16 type, u16 attr_dat default: break; } +#endif return len; } diff --git a/components/wpa_supplicant/src/wps/wps_validate.c b/components/wpa_supplicant/src/wps/wps_validate.c index de0a46e7d..4bbe0ffb1 100644 --- a/components/wpa_supplicant/src/wps/wps_validate.c +++ b/components/wpa_supplicant/src/wps/wps_validate.c @@ -95,6 +95,7 @@ static int wps_validate_response_type(const u8 *response_type, int mandatory) static int valid_config_methods(u16 val, int wps2) { +#ifndef CONFIG_WPA_WPS_WARS if (wps2) { if (!(val & 0x6000) && (val & WPS_CONFIG_DISPLAY)) { wpa_printf(MSG_INFO, "WPS-STRICT: Display flag " @@ -108,6 +109,7 @@ static int valid_config_methods(u16 val, int wps2) } } +#endif return 1; }