]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
AP: Place the WPA IE in the correct order
authorIlan Peer <ilan.peer@intel.com>
Thu, 23 Aug 2018 13:52:33 +0000 (16:52 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 20 Oct 2018 08:28:29 +0000 (11:28 +0300)
In case the protocol used for the BSS is WPA, the WPA vendor IE should
be placed after all the non vendor IEs. Fix this for Beacon and Probe
Response frames.

Signed-off-by: Ilan Peer <ilan.peer@intel.com>
src/ap/beacon.c

index 7d079d2615846164c9e95d03d7c4d08127cfd2ad..59bd4af395d7aa9482808b023c6d3de13136fd55 100644 (file)
@@ -453,8 +453,9 @@ static u8 * hostapd_gen_probe_resp(struct hostapd_data *hapd,
        /* Extended supported rates */
        pos = hostapd_eid_ext_supp_rates(hapd, pos);
 
-       /* RSN, MDIE, WPA */
-       pos = hostapd_eid_wpa(hapd, pos, epos - pos);
+       /* RSN, MDIE */
+       if (hapd->conf->wpa != WPA_PROTO_WPA)
+               pos = hostapd_eid_wpa(hapd, pos, epos - pos);
 
        pos = hostapd_eid_bss_load(hapd, pos, epos - pos);
 
@@ -517,6 +518,10 @@ static u8 * hostapd_gen_probe_resp(struct hostapd_data *hapd,
                pos = hostapd_eid_vendor_vht(hapd, pos);
 #endif /* CONFIG_IEEE80211AC */
 
+       /* WPA */
+       if (hapd->conf->wpa == WPA_PROTO_WPA)
+               pos = hostapd_eid_wpa(hapd, pos, epos - pos);
+
        /* Wi-Fi Alliance WMM */
        pos = hostapd_eid_wmm(hapd, pos);
 
@@ -1152,9 +1157,11 @@ int ieee802_11_build_ap_params(struct hostapd_data *hapd,
        /* Extended supported rates */
        tailpos = hostapd_eid_ext_supp_rates(hapd, tailpos);
 
-       /* RSN, MDIE, WPA */
-       tailpos = hostapd_eid_wpa(hapd, tailpos, tail + BEACON_TAIL_BUF_SIZE -
-                                 tailpos);
+       /* RSN, MDIE */
+       if (hapd->conf->wpa != WPA_PROTO_WPA)
+               tailpos = hostapd_eid_wpa(hapd, tailpos,
+                                         tail + BEACON_TAIL_BUF_SIZE -
+                                         tailpos);
 
        tailpos = hostapd_eid_rm_enabled_capab(hapd, tailpos,
                                               tail + BEACON_TAIL_BUF_SIZE -
@@ -1223,6 +1230,12 @@ int ieee802_11_build_ap_params(struct hostapd_data *hapd,
                tailpos = hostapd_eid_vendor_vht(hapd, tailpos);
 #endif /* CONFIG_IEEE80211AC */
 
+       /* WPA */
+       if (hapd->conf->wpa == WPA_PROTO_WPA)
+               tailpos = hostapd_eid_wpa(hapd, tailpos,
+                                         tail + BEACON_TAIL_BUF_SIZE -
+                                         tailpos);
+
        /* Wi-Fi Alliance WMM */
        tailpos = hostapd_eid_wmm(hapd, tailpos);