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

This commit is contained in:
Jouni Malinen 2011-04-14 02:58:35 +03:00 committed by Jouni Malinen
parent 5dac11e027
commit 6e432d3f10

View file

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