WPS 2.0: Update authorized enrollee MAC address list correctly

Amitkumar Karwar akarwar at marvell.com
Mon Nov 26 01:02:05 EST 2012


It is observed that authorized enrollee MAC address list advertized in
beacon and probe response sometimes contains both wildcard as well as
specific station's MAC address.

This patch makes sure that either of them will be present in the list.

Signed-off-by: Amitkumar Karwar <akarwar at marvell.com>
---
 src/wps/wps_registrar.c |   24 +++++++++++++++++++++---
 1 files changed, 21 insertions(+), 3 deletions(-)

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));
-- 
1.7.3.4



More information about the HostAP mailing list