]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
WPS: Use strict validation of (Re)AssocReq only if IEs are known
authorJouni Malinen <jouni.malinen@atheros.com>
Wed, 13 Apr 2011 23:58:35 +0000 (02:58 +0300)
committerJouni Malinen <j@w1.fi>
Wed, 13 Apr 2011 23:58:35 +0000 (02:58 +0300)
src/ap/drv_callbacks.c

index 7bc8be29437b550a0010a3ee42eeb333a3ee1687..02b7ecfb082f5a24781c7170f8dd5d9e6432de70 100644 (file)
@@ -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) {