diff --git a/src/wps/wps_registrar.c b/src/wps/wps_registrar.c
index d8e0d6f..d376f8d 100644
--- a/src/wps/wps_registrar.c
+++ b/src/wps/wps_registrar.c
@@ -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));
