From 3869c159d95ef5168bd287c71a906ae596f607b7 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Thu, 25 Apr 2019 16:57:48 +0200 Subject: [PATCH] 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 Signed-off-by: John Crispin --- src/ap/ieee802_11_he.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ap/ieee802_11_he.c b/src/ap/ieee802_11_he.c index efa701335..8798ada32 100644 --- a/src/ap/ieee802_11_he.c +++ b/src/ap/ieee802_11_he.c @@ -61,12 +61,13 @@ u8 * hostapd_eid_he_operation(struct hostapd_data *hapd, u8 *eid) { struct ieee80211_he_operation *oper; u8 *pos = eid; + int oper_size = 6; if (!hapd->iface->current_mode) return eid; *pos++ = WLAN_EID_EXTENSION; - *pos++ = 1 + sizeof(struct ieee80211_he_operation); + *pos++ = 1 + oper_size; *pos++ = WLAN_EID_EXT_HE_OPERATION; 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 */ - pos += sizeof(*oper); + pos += oper_size; return pos; }