WPS: Copy UUID from the first interface

Instead of generating a different UUID for each interface, use the
same UUID that was either configured of generated for the first
interface. This avoids potential issues with PBC session overlap
detection should multiple interfaces end up running a PBC scan
at the same time which may happen at least in some P2P use cases.
This commit is contained in:
Jouni Malinen 2011-03-10 18:36:07 +02:00 committed by Jouni Malinen
parent b0dc4155c3
commit ca29141c83

View file

@ -1101,12 +1101,23 @@ int wpas_wps_init(struct wpa_supplicant *wpa_s)
wps->dev.os_version = WPA_GET_BE32(wpa_s->conf->os_version); wps->dev.os_version = WPA_GET_BE32(wpa_s->conf->os_version);
wps->dev.rf_bands = WPS_RF_24GHZ | WPS_RF_50GHZ; /* TODO: config */ wps->dev.rf_bands = WPS_RF_24GHZ | WPS_RF_50GHZ; /* TODO: config */
os_memcpy(wps->dev.mac_addr, wpa_s->own_addr, ETH_ALEN); os_memcpy(wps->dev.mac_addr, wpa_s->own_addr, ETH_ALEN);
wpa_printf(MSG_DEBUG, "WPS: Set UUID for interface %s", wpa_s->ifname);
if (is_nil_uuid(wpa_s->conf->uuid)) { if (is_nil_uuid(wpa_s->conf->uuid)) {
uuid_gen_mac_addr(wpa_s->own_addr, wps->uuid); if (wpa_s->global->ifaces && wpa_s->global->ifaces != wpa_s) {
wpa_hexdump(MSG_DEBUG, "WPS: UUID based on MAC address", os_memcpy(wps->uuid, wpa_s->global->ifaces->wps->uuid,
wps->uuid, WPS_UUID_LEN); WPS_UUID_LEN);
} else wpa_hexdump(MSG_DEBUG, "WPS: UUID from the first "
"interface", wps->uuid, WPS_UUID_LEN);
} else {
uuid_gen_mac_addr(wpa_s->own_addr, wps->uuid);
wpa_hexdump(MSG_DEBUG, "WPS: UUID based on MAC "
"address", wps->uuid, WPS_UUID_LEN);
}
} else {
os_memcpy(wps->uuid, wpa_s->conf->uuid, WPS_UUID_LEN); os_memcpy(wps->uuid, wpa_s->conf->uuid, WPS_UUID_LEN);
wpa_hexdump(MSG_DEBUG, "WPS: UUID based on configuration",
wps->uuid, WPS_UUID_LEN);
}
wps->auth_types = WPS_AUTH_WPA2PSK | WPS_AUTH_WPAPSK; wps->auth_types = WPS_AUTH_WPA2PSK | WPS_AUTH_WPAPSK;
wps->encr_types = WPS_ENCR_AES | WPS_ENCR_TKIP; wps->encr_types = WPS_ENCR_AES | WPS_ENCR_TKIP;