diff --git a/src/wps/wps_registrar.c b/src/wps/wps_registrar.c index a01066c77..e7f1a9ac7 100644 --- a/src/wps/wps_registrar.c +++ b/src/wps/wps_registrar.c @@ -336,6 +336,7 @@ int wps_registrar_pbc_overlap(struct wps_registrar *reg, { int count = 0; struct wps_pbc_session *pbc; + struct wps_pbc_session *first = NULL; struct os_time now; os_get_time(&now); @@ -343,13 +344,19 @@ int wps_registrar_pbc_overlap(struct wps_registrar *reg, for (pbc = reg->pbc_sessions; pbc; pbc = pbc->next) { if (now.sec > pbc->timestamp.sec + WPS_PBC_WALK_TIME) break; - if (addr == NULL || os_memcmp(addr, pbc->addr, ETH_ALEN) || - uuid_e == NULL || + if (first && + os_memcmp(pbc->uuid_e, first->uuid_e, WPS_UUID_LEN) == 0) + continue; /* same Enrollee */ + if (uuid_e == NULL || os_memcmp(uuid_e, pbc->uuid_e, WPS_UUID_LEN)) count++; + if (first == NULL) + first = pbc; } - if (addr || uuid_e) + if (uuid_e && + (first == NULL || + os_memcmp(uuid_e, first->uuid_e, WPS_UUID_LEN) != 0)) count++; return count > 1 ? 1 : 0;