AP: Do not use struct ieee80211_mgmt::u.probe_req

This struct in the union is empty, but the design of using a zero-length
u8 array here is not fully compatible with C++ and can result in
undesired compiler warnings. Since there are no non-IE fields in the
Probe Request frames, get the location of the variable length IEs simply
by using the pointer to the frame header and the known header length.

Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2016-04-02 16:49:50 +03:00
parent 07f0da3003
commit e1b99620c9

View File

@ -685,12 +685,12 @@ void handle_probe_req(struct hostapd_data *hapd,
u16 csa_offs[2]; u16 csa_offs[2];
size_t csa_offs_len; size_t csa_offs_len;
ie = mgmt->u.probe_req.variable; if (len < IEEE80211_HDRLEN)
if (len < IEEE80211_HDRLEN + sizeof(mgmt->u.probe_req))
return; return;
ie = ((const u8 *) mgmt) + IEEE80211_HDRLEN;
if (hapd->iconf->track_sta_max_num) if (hapd->iconf->track_sta_max_num)
sta_track_add(hapd->iface, mgmt->sa); sta_track_add(hapd->iface, mgmt->sa);
ie_len = len - (IEEE80211_HDRLEN + sizeof(mgmt->u.probe_req)); ie_len = len - IEEE80211_HDRLEN;
for (i = 0; hapd->probereq_cb && i < hapd->num_probereq_cb; i++) for (i = 0; hapd->probereq_cb && i < hapd->num_probereq_cb; i++)
if (hapd->probereq_cb[i].cb(hapd->probereq_cb[i].ctx, if (hapd->probereq_cb[i].cb(hapd->probereq_cb[i].ctx,