@@ -198,6 +198,8 @@ static void wps_registrar_add_authorized_mac(struct wps_registrar *reg,
const u8 *addr)
{
int i;
+ u8 bcast[ETH_ALEN] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+
wpa_printf(MSG_DEBUG, "WPS: Add authorized MAC " MACSTR,
MAC2STR(addr));
for (i = 0; i < WPS_MAX_AUTHORIZED_MACS; i++)
@@ -206,9 +208,25 @@ static void wps_registrar_add_authorized_mac(struct wps_registrar *reg,
"already in the list");
return; /* already in list */
}
- for (i = WPS_MAX_AUTHORIZED_MACS - 1; i > 0; i--)
- os_memcpy(reg->authorized_macs[i], reg->authorized_macs[i - 1],
- ETH_ALEN);
+
+ if (os_memcmp(addr, bcast, ETH_ALEN) == 0) {
+ /*
+ * Clear authorized MAC address list while adding wildcard MAC
+ */
+ for (i = 0; i < WPS_MAX_AUTHORIZED_MACS; i++)
+ os_memset(reg->authorized_macs[0], 0x00, ETH_ALEN);
+ } else {
+ /* Remove wildcard MAC when valid MAC address is added */
+ if (os_memcmp(reg->authorized_macs[0], bcast, ETH_ALEN) == 0) {
+ os_memset(reg->authorized_macs[0], 0x00, ETH_ALEN);
+ } else {
+ for (i = WPS_MAX_AUTHORIZED_MACS - 1; i > 0; i--)
+ os_memcpy(reg->authorized_macs[i],
+ reg->authorized_macs[i - 1],
+ ETH_ALEN);
+ }
+
+ }
os_memcpy(reg->authorized_macs[0], addr, ETH_ALEN);
wpa_hexdump(MSG_DEBUG, "WPS: Authorized MACs",
(u8 *) reg->authorized_macs, sizeof(reg->authorized_macs));