@@ -349,15 +349,15 @@ is_wps_pbc_overlap(struct wps_sm *sm, const u8 *sel_uuid)
349349{
350350 if (!sel_uuid ) {
351351 wpa_printf (MSG_DEBUG , "WPS: null uuid field" );
352- return false ;
352+ return true ;
353353 }
354354
355- if (os_memcmp (sel_uuid , sm -> uuid , WPS_UUID_LEN ) != 0 ) {
355+ if (os_memcmp (sel_uuid , sm -> uuid_r , WPS_UUID_LEN ) != 0 ) {
356356 wpa_printf (MSG_DEBUG , "uuid is not same" );
357357 wpa_hexdump (MSG_DEBUG , "WPS: UUID of scanned BSS is" ,
358358 sel_uuid , WPS_UUID_LEN );
359359 wpa_hexdump (MSG_DEBUG , "WPS: UUID of sm BSS is" ,
360- sm -> uuid , WPS_UUID_LEN );
360+ sm -> uuid_r , WPS_UUID_LEN );
361361 return true;
362362 }
363363
@@ -369,7 +369,10 @@ wps_parse_scan_result(struct wps_scan_ie *scan)
369369{
370370 struct wps_sm * sm = gWpsSm ;
371371 wifi_mode_t op_mode = 0 ;
372- sm -> wps_pbc_overlap = false;
372+
373+ if (sm -> wps_pbc_overlap ) {
374+ return false;
375+ }
373376
374377 if (!sm -> is_wps_scan || !scan -> bssid ) {
375378 return false;
@@ -442,12 +445,14 @@ wps_parse_scan_result(struct wps_scan_ie *scan)
442445 os_memcpy (sm -> bssid , scan -> bssid , ETH_ALEN );
443446
444447 scan_uuid = wps_get_uuid_e (buf );
448+ if (sm -> discover_ssid_cnt > 1 && wps_get_type () == WPS_TYPE_PBC && is_wps_pbc_overlap (sm , scan_uuid ) == true) {
449+ wpa_printf (MSG_INFO , "pbc_overlap flag is true" );
450+ sm -> wps_pbc_overlap = true;
451+ wpabuf_free (buf );
452+ return false;
453+ }
445454 if (scan_uuid ) {
446- if (wps_get_type () == WPS_TYPE_PBC && is_wps_pbc_overlap (sm , scan_uuid ) == true) {
447- wpa_printf (MSG_INFO , "pbc_overlap flag is true" );
448- sm -> wps_pbc_overlap = true;
449- }
450- os_memcpy (sm -> uuid , scan_uuid , WPS_UUID_LEN );
455+ os_memcpy (sm -> uuid_r , scan_uuid , WPS_UUID_LEN );
451456 }
452457
453458 if (ap_supports_sae (scan )) {
@@ -1452,7 +1457,7 @@ static int wifi_station_wps_init(const esp_wps_config_t *config)
14521457 }
14531458
14541459 sm = gWpsSm ;
1455-
1460+ esp_wifi_disconnect ();
14561461 esp_wifi_get_macaddr_internal (WIFI_IF_STA , sm -> ownaddr );
14571462 os_memcpy (gWpaSm .own_addr , sm -> ownaddr , ETH_ALEN );
14581463
@@ -1738,6 +1743,8 @@ int wifi_station_wps_start(void)
17381743 default :
17391744 break ;
17401745 }
1746+ os_memset (sm -> uuid_r , 0 , sizeof (sm -> uuid_r ));
1747+ sm -> wps_pbc_overlap = false;
17411748 sm -> discard_ap_cnt = 0 ;
17421749 os_memset (& sm -> dis_ap_list , 0 , WPS_MAX_DIS_AP_NUM * sizeof (struct discard_ap_list_t ));
17431750 esp_wifi_set_wps_start_flag_internal (true);
0 commit comments