mac80211: consider more elements in parsing CRC
We only use the parsing CRC for checking if a beacon changed, and elements with an ID > 63 cannot be represented in the filter. Thus, like we did before with WMM and Cisco vendor elements, just statically add these forgotten items to the CRC: - WLAN_EID_VHT_OPERATION - WLAN_EID_OPMODE_NOTIF I guess that in most cases when VHT/HE operation change, the HT operation also changed, and so the change was picked up, but we did notice that pure operating mode notification changes were ignored. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Link: https://lore.kernel.org/r/20200131111300.891737-22-luca@coelho.fi [restrict to VHT for the mac80211 branch] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Родитель
2bf973ff9b
Коммит
a04564c99b
|
@ -1063,16 +1063,22 @@ _ieee802_11_parse_elems_crc(const u8 *start, size_t len, bool action,
|
|||
elem_parse_failed = true;
|
||||
break;
|
||||
case WLAN_EID_VHT_OPERATION:
|
||||
if (elen >= sizeof(struct ieee80211_vht_operation))
|
||||
if (elen >= sizeof(struct ieee80211_vht_operation)) {
|
||||
elems->vht_operation = (void *)pos;
|
||||
else
|
||||
elem_parse_failed = true;
|
||||
if (calc_crc)
|
||||
crc = crc32_be(crc, pos - 2, elen + 2);
|
||||
break;
|
||||
}
|
||||
elem_parse_failed = true;
|
||||
break;
|
||||
case WLAN_EID_OPMODE_NOTIF:
|
||||
if (elen > 0)
|
||||
if (elen > 0) {
|
||||
elems->opmode_notif = pos;
|
||||
else
|
||||
elem_parse_failed = true;
|
||||
if (calc_crc)
|
||||
crc = crc32_be(crc, pos - 2, elen + 2);
|
||||
break;
|
||||
}
|
||||
elem_parse_failed = true;
|
||||
break;
|
||||
case WLAN_EID_MESH_ID:
|
||||
elems->mesh_id = pos;
|
||||
|
|
Загрузка…
Ссылка в новой задаче