atheros: 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:52:43 +03:00
parent c01120a05f
commit 094e949265

View file

@ -855,16 +855,15 @@ static void atheros_raw_receive(void *ctx, const u8 *src_addr, const u8 *buf,
(int) len); (int) len);
if (stype == WLAN_FC_STYPE_PROBE_REQ) { if (stype == WLAN_FC_STYPE_PROBE_REQ) {
if (len < IEEE80211_HDRLEN + sizeof(mgmt->u.probe_req)) if (len < IEEE80211_HDRLEN)
return; return;
os_memset(&event, 0, sizeof(event)); os_memset(&event, 0, sizeof(event));
event.rx_probe_req.sa = mgmt->sa; event.rx_probe_req.sa = mgmt->sa;
event.rx_probe_req.da = mgmt->da; event.rx_probe_req.da = mgmt->da;
event.rx_probe_req.bssid = mgmt->bssid; event.rx_probe_req.bssid = mgmt->bssid;
event.rx_probe_req.ie = mgmt->u.probe_req.variable; event.rx_probe_req.ie = buf + IEEE80211_HDRLEN;
event.rx_probe_req.ie_len = event.rx_probe_req.ie_len = len - IEEE80211_HDRLEN;
len - (IEEE80211_HDRLEN + sizeof(mgmt->u.probe_req));
wpa_supplicant_event(drv->hapd, EVENT_RX_PROBE_REQ, &event); wpa_supplicant_event(drv->hapd, EVENT_RX_PROBE_REQ, &event);
return; return;
} }