From 6e432d3f10340670a06bff2d306f17ca7a3c14b8 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Thu, 14 Apr 2011 02:58:35 +0300 Subject: [PATCH] WPS: Use strict validation of (Re)AssocReq only if IEs are known --- src/ap/drv_callbacks.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/ap/drv_callbacks.c b/src/ap/drv_callbacks.c index 7bc8be294..02b7ecfb0 100644 --- a/src/ap/drv_callbacks.c +++ b/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) {