AP: Place the WPA IE in the correct order

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>
This commit is contained in:
Ilan Peer 2018-08-23 16:52:33 +03:00 committed by Jouni Malinen
parent 170244a1cd
commit f13aaf33fb

View File

@ -453,8 +453,9 @@ static u8 * hostapd_gen_probe_resp(struct hostapd_data *hapd,
/* Extended supported rates */ /* Extended supported rates */
pos = hostapd_eid_ext_supp_rates(hapd, pos); pos = hostapd_eid_ext_supp_rates(hapd, pos);
/* RSN, MDIE, WPA */ /* RSN, MDIE */
pos = hostapd_eid_wpa(hapd, pos, epos - pos); if (hapd->conf->wpa != WPA_PROTO_WPA)
pos = hostapd_eid_wpa(hapd, pos, epos - pos);
pos = hostapd_eid_bss_load(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); pos = hostapd_eid_vendor_vht(hapd, pos);
#endif /* CONFIG_IEEE80211AC */ #endif /* CONFIG_IEEE80211AC */
/* WPA */
if (hapd->conf->wpa == WPA_PROTO_WPA)
pos = hostapd_eid_wpa(hapd, pos, epos - pos);
/* Wi-Fi Alliance WMM */ /* Wi-Fi Alliance WMM */
pos = hostapd_eid_wmm(hapd, pos); pos = hostapd_eid_wmm(hapd, pos);
@ -1152,9 +1157,11 @@ int ieee802_11_build_ap_params(struct hostapd_data *hapd,
/* Extended supported rates */ /* Extended supported rates */
tailpos = hostapd_eid_ext_supp_rates(hapd, tailpos); tailpos = hostapd_eid_ext_supp_rates(hapd, tailpos);
/* RSN, MDIE, WPA */ /* RSN, MDIE */
tailpos = hostapd_eid_wpa(hapd, tailpos, tail + BEACON_TAIL_BUF_SIZE - if (hapd->conf->wpa != WPA_PROTO_WPA)
tailpos); tailpos = hostapd_eid_wpa(hapd, tailpos,
tail + BEACON_TAIL_BUF_SIZE -
tailpos);
tailpos = hostapd_eid_rm_enabled_capab(hapd, tailpos, tailpos = hostapd_eid_rm_enabled_capab(hapd, tailpos,
tail + BEACON_TAIL_BUF_SIZE - 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); tailpos = hostapd_eid_vendor_vht(hapd, tailpos);
#endif /* CONFIG_IEEE80211AC */ #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 */ /* Wi-Fi Alliance WMM */
tailpos = hostapd_eid_wmm(hapd, tailpos); tailpos = hostapd_eid_wmm(hapd, tailpos);