Commit a57944d1 authored by Johannes Berg's avatar Johannes Berg

wifi: mac80211: disallow basic multi-link element in per-STA profile

There really shouldn't be a basic multi-link element in any
per-STA profile in an association response, it's not clear
what that would really mean. Refuse connecting in this case
since the AP isn't following the spec.

Link: https://msgid.link/20240129200652.23f1e3b337f1.Idd2e43cdbfe3ba15b3e9b8aeb54c8115587177a0@changeidSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 3552a228
...@@ -1671,6 +1671,7 @@ enum ieee80211_elems_parse_error { ...@@ -1671,6 +1671,7 @@ enum ieee80211_elems_parse_error {
IEEE80211_PARSE_ERR_DUP_ELEM = BIT(1), IEEE80211_PARSE_ERR_DUP_ELEM = BIT(1),
IEEE80211_PARSE_ERR_BAD_ELEM_SIZE = BIT(2), IEEE80211_PARSE_ERR_BAD_ELEM_SIZE = BIT(2),
IEEE80211_PARSE_ERR_UNEXPECTED_ELEM = BIT(3), IEEE80211_PARSE_ERR_UNEXPECTED_ELEM = BIT(3),
IEEE80211_PARSE_ERR_DUP_NEST_ML_BASIC = BIT(4),
}; };
/* Parsed Information Elements */ /* Parsed Information Elements */
......
...@@ -4304,7 +4304,8 @@ static bool ieee80211_assoc_config_link(struct ieee80211_link_data *link, ...@@ -4304,7 +4304,8 @@ static bool ieee80211_assoc_config_link(struct ieee80211_link_data *link,
link->u.mgd.bss_param_ch_cnt = link->u.mgd.bss_param_ch_cnt =
ieee80211_mle_get_bss_param_ch_cnt(elems->ml_basic); ieee80211_mle_get_bss_param_ch_cnt(elems->ml_basic);
} }
} else if (!elems->prof || } else if (elems->parse_error & IEEE80211_PARSE_ERR_DUP_NEST_ML_BASIC ||
!elems->prof ||
!(elems->prof->control & prof_bss_param_ch_present)) { !(elems->prof->control & prof_bss_param_ch_present)) {
ret = false; ret = false;
goto out; goto out;
......
...@@ -1012,6 +1012,11 @@ ieee80211_parse_extension_element(u32 *crc, ...@@ -1012,6 +1012,11 @@ ieee80211_parse_extension_element(u32 *crc,
switch (le16_get_bits(mle->control, switch (le16_get_bits(mle->control,
IEEE80211_ML_CONTROL_TYPE)) { IEEE80211_ML_CONTROL_TYPE)) {
case IEEE80211_ML_CONTROL_TYPE_BASIC: case IEEE80211_ML_CONTROL_TYPE_BASIC:
if (elems->ml_basic) {
elems->parse_error |=
IEEE80211_PARSE_ERR_DUP_NEST_ML_BASIC;
break;
}
elems->ml_basic_elem = (void *)elem; elems->ml_basic_elem = (void *)elem;
elems->ml_basic = data; elems->ml_basic = data;
elems->ml_basic_len = len; elems->ml_basic_len = len;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment