HE: Fix HE operation field size

The current code will always use the size required when all optional
elements are present. This will cause the Linux kernel to consider the
field to be malformed if the elements are not actually flagged as being
present.

Signed-off-by: Shashidhar Lakkavalli <slakkavalli@datto.com>
Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
John Crispin 2019-04-25 16:57:48 +02:00 committed by Jouni Malinen
parent a5dbddbf03
commit 3869c159d9
1 changed files with 3 additions and 2 deletions

View File

@ -61,12 +61,13 @@ u8 * hostapd_eid_he_operation(struct hostapd_data *hapd, u8 *eid)
{ {
struct ieee80211_he_operation *oper; struct ieee80211_he_operation *oper;
u8 *pos = eid; u8 *pos = eid;
int oper_size = 6;
if (!hapd->iface->current_mode) if (!hapd->iface->current_mode)
return eid; return eid;
*pos++ = WLAN_EID_EXTENSION; *pos++ = WLAN_EID_EXTENSION;
*pos++ = 1 + sizeof(struct ieee80211_he_operation); *pos++ = 1 + oper_size;
*pos++ = WLAN_EID_EXT_HE_OPERATION; *pos++ = WLAN_EID_EXT_HE_OPERATION;
oper = (struct ieee80211_he_operation *) pos; oper = (struct ieee80211_he_operation *) pos;
@ -92,7 +93,7 @@ u8 * hostapd_eid_he_operation(struct hostapd_data *hapd, u8 *eid)
/* TODO: conditional MaxBSSID Indicator subfield */ /* TODO: conditional MaxBSSID Indicator subfield */
pos += sizeof(*oper); pos += oper_size;
return pos; return pos;
} }