Skip to content

Commit cb8afea

Browse files
hewei-gikakujmberg-intel
authored andcommitted
wifi: cfg80211: bound element ID read when checking non-inheritance
cfg80211_is_element_inherited() reads the first data octet of the candidate element (id = elem->data[0]) to look it up in an extension non-inheritance list. It does so after testing elem->id, but without verifying that the element actually has a data octet. A zero-length extension element (WLAN_EID_EXTENSION with length 0) therefore makes it read one octet past the end of the element. _ieee802_11_parse_elems_full() runs this check for every element of a frame once a non-inheritance context exists -- e.g. while parsing a per-STA profile of a Multi-Link element in a (re)association response, or a non-transmitted BSS profile -- so a crafted frame from an AP can trigger a one-octet slab-out-of-bounds read during element parsing: BUG: KASAN: slab-out-of-bounds in cfg80211_is_element_inherited Read of size 1 ... in net/wireless/scan.c Return early (treat the element as inherited) when an extension element carries no data, mirroring the existing handling of empty ID lists. The bug was found by fuzzing ieee802_11_parse_elems_full() under KASAN. Fixes: f7dacfb ("cfg80211: support non-inheritance element") Signed-off-by: HE WEI (ギカク) <skyexpoc@gmail.com> Link: https://patch.msgid.link/20260707094828.16465-1-skyexpoc@gmail.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
1 parent 240c8d2 commit cb8afea

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

net/wireless/scan.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ bool cfg80211_is_element_inherited(const struct element *elem,
205205
return true;
206206

207207
if (elem->id == WLAN_EID_EXTENSION) {
208-
if (!ext_id_len)
208+
if (!ext_id_len || !elem->datalen)
209209
return true;
210210
loop_len = ext_id_len;
211211
list = &non_inherit_elem->data[3 + id_len];

0 commit comments

Comments
 (0)