Browse Source

WPS: Use strict validation of (Re)AssocReq only if IEs are known

Jouni Malinen 14 years ago
parent
commit
6e432d3f10
1 changed files with 12 additions and 9 deletions
  1. 12 9
      src/ap/drv_callbacks.c

+ 12 - 9
src/ap/drv_callbacks.c

@@ -157,17 +157,20 @@ int hostapd_notif_assoc(struct hostapd_data *hapd, const u8 *addr,
 		}
 	} else if (hapd->conf->wps_state) {
 #ifdef CONFIG_WPS_STRICT
-		struct wpabuf *wps;
-		wps = ieee802_11_vendor_ie_concat(ie, ielen,
-						  WPS_IE_VENDOR_TYPE);
-		if (wps && wps_validate_assoc_req(wps) < 0) {
-			hostapd_drv_sta_disassoc(hapd, sta->addr,
-						 WLAN_REASON_INVALID_IE);
-			ap_free_sta(hapd, sta);
+		if (ie) {
+			struct wpabuf *wps;
+			wps = ieee802_11_vendor_ie_concat(ie, ielen,
+							  WPS_IE_VENDOR_TYPE);
+			if (wps && wps_validate_assoc_req(wps) < 0) {
+				hostapd_drv_sta_disassoc(
+					hapd, sta->addr,
+					WLAN_REASON_INVALID_IE);
+				ap_free_sta(hapd, sta);
+				wpabuf_free(wps);
+				return -1;
+			}
 			wpabuf_free(wps);
-			return -1;
 		}
-		wpabuf_free(wps);
 #endif /* CONFIG_WPS_STRICT */
 		if (ie && ielen > 4 && ie[0] == 0xdd && ie[1] >= 4 &&
 		    os_memcmp(ie + 2, "\x00\x50\xf2\x04", 4) == 0) {