Commit 1eab33aa authored by Benjamin Berg's avatar Benjamin Berg Committed by Johannes Berg
Browse files

wifi: mac80211: correctly decode TTLM with default link map



TID-To-Link Mapping (TTLM) elements do not contain any link mapping
presence indicator if a default mapping is used and parsing needs to be
skipped.

Note that access points should not explicitly report an advertised TTLM
with a default mapping as that is the implied mapping if the element is
not included, this is even the case when switching back to the default
mapping. However, mac80211 would incorrectly parse the frame and would
also read one byte beyond the end of the element.

Reported-by: default avatarRuikai Peng <ruikai@pwno.io>
Closes: https://lore.kernel.org/linux-wireless/CAFD3drMqc9YWvTCSHLyP89AOpBZsHdZ+pak6zVftYoZcUyF7gw@mail.gmail.com


Fixes: 702e8047 ("wifi: mac80211: support handling of advertised TID-to-link mapping")
Signed-off-by: default avatarBenjamin Berg <benjamin.berg@intel.com>
Link: https://patch.msgid.link/20260129113349.d6b96f12c732.I69212a50f0f70db185edd3abefb6f04d3cb3e5ff@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 0a80e38d
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@
 * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
 * Copyright 2013-2014  Intel Mobile Communications GmbH
 * Copyright (C) 2015 - 2017 Intel Deutschland GmbH
 * Copyright (C) 2018 - 2025 Intel Corporation
 * Copyright (C) 2018 - 2026 Intel Corporation
 */

#include <linux/delay.h>
@@ -6190,8 +6190,10 @@ ieee80211_parse_adv_t2l(struct ieee80211_sub_if_data *sdata,
		return -EINVAL;
	}

	if (!(control & IEEE80211_TTLM_CONTROL_DEF_LINK_MAP)) {
		link_map_presence = *pos;
		pos++;
	}

	if (control & IEEE80211_TTLM_CONTROL_SWITCH_TIME_PRESENT) {
		ttlm_info->switch_time = get_unaligned_le16(pos);