]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
WPS: Copy UUID from the first interface
authorJouni Malinen <jouni.malinen@atheros.com>
Thu, 10 Mar 2011 16:36:07 +0000 (18:36 +0200)
committerJouni Malinen <j@w1.fi>
Thu, 10 Mar 2011 16:36:07 +0000 (18:36 +0200)
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.

wpa_supplicant/wps_supplicant.c

index 94a60c765ad97e0d64822eabe16210dda0855c89..1ed403ccec9313e49e8303559c5b455b6aa92dcf 100644 (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.rf_bands = WPS_RF_24GHZ | WPS_RF_50GHZ; /* TODO: config */
        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)) {
-               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
+               if (wpa_s->global->ifaces && wpa_s->global->ifaces != wpa_s) {
+                       os_memcpy(wps->uuid, wpa_s->global->ifaces->wps->uuid,
+                                 WPS_UUID_LEN);
+                       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);
+               wpa_hexdump(MSG_DEBUG, "WPS: UUID based on configuration",
+                           wps->uuid, WPS_UUID_LEN);
+       }
 
        wps->auth_types = WPS_AUTH_WPA2PSK | WPS_AUTH_WPAPSK;
        wps->encr_types = WPS_ENCR_AES | WPS_ENCR_TKIP;