Skip to content
Snippets Groups Projects
Commit 130067e9 authored by Johannes Berg's avatar Johannes Berg
Browse files

wifi: mac80211: fix vendor-specific inheritance


If there's any vendor-specific element in the subelements
then the outer element parsing must not parse any vendor
element at all. This isn't implemented correctly now due
to parsing into the pointers and then overriding them, so
explicitly skip vendor elements if any exist in the sub-
elements (non-transmitted profile or per-STA profile).

Fixes: 671042a4 ("mac80211: support non-inheritance element")
Reviewed-by: default avatarIlan Peer <ilan.peer@intel.com>
Reviewed-by: default avatarMiriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250221112451.fd71e5268840.I9db3e6a3367e6ff38d052d07dc07005f0dd3bd5c@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 99ca2c28
No related branches found
No related tags found
No related merge requests found
......@@ -48,6 +48,7 @@ struct ieee80211_elems_parse {
const struct element *ml_epcs_elem;
bool multi_link_inner;
bool skip_vendor;
/*
* scratch buffer that can be used for various element parsing related
......@@ -400,6 +401,9 @@ _ieee802_11_parse_elems_full(struct ieee80211_elems_parse_params *params,
IEEE80211_PARSE_ERR_BAD_ELEM_SIZE;
break;
case WLAN_EID_VENDOR_SPECIFIC:
if (elems_parse->skip_vendor)
break;
if (elen >= 4 && pos[0] == 0x00 && pos[1] == 0x50 &&
pos[2] == 0xf2) {
/* Microsoft OUI (00:50:F2) */
......@@ -1054,12 +1058,16 @@ ieee802_11_parse_elems_full(struct ieee80211_elems_parse_params *params)
multi_link_inner = true;
}
elems_parse->skip_vendor =
cfg80211_find_elem(WLAN_EID_VENDOR_SPECIFIC,
sub.start, sub.len);
elems->crc = _ieee802_11_parse_elems_full(params, elems_parse,
non_inherit);
/* Override with nontransmitted/per-STA profile if found */
if (sub.len) {
elems_parse->multi_link_inner = multi_link_inner;
elems_parse->skip_vendor = false;
_ieee802_11_parse_elems_full(&sub, elems_parse, NULL);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment