mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
wifi: ath6kl: clamp assoc request/response lengths before subtracting IE offsets
ath6kl_cfg80211_connect_event() subtracts fixed IE offsets from
assoc_req_len (-= 4) and assoc_resp_len (-= 6), both u8, with no lower
bound. The aggregate check recently added to ath6kl_wmi_connect_event_rx()
bounds the declared lengths from above (their sum must fit the received
event), but an assoc request/response shorter than its fixed offset still
underflows here: the u8 wraps to ~250, and cfg80211_connect_result() /
cfg80211_roamed() then treat that wrapped value as the IE length and copy
that many bytes out of the small assoc_info buffer to user space via
nl80211, disclosing adjacent slab memory.
Clamp both lengths to their offsets before subtracting.
Found by 0sec (https://0sec.ai) using automated source analysis; the
missing lower bound is evident from source. Compile-tested.
Fixes: bdcd817079 ("Add ath6kl cleaned up driver")
Cc: stable@vger.kernel.org
Assisted-by: 0sec:claude-opus-4-8
Signed-off-by: Doruk Tan Ozturk <doruk@0sec.ai>
Link: https://patch.msgid.link/20260713213251.21161-1-doruk@0sec.ai
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
This commit is contained in:
parent
0293be2212
commit
3bbd05723d
|
|
@ -754,6 +754,11 @@ void ath6kl_cfg80211_connect_event(struct ath6kl_vif *vif, u16 channel,
|
|||
u8 *assoc_resp_ie = assoc_info + beacon_ie_len + assoc_req_len +
|
||||
assoc_resp_ie_offset;
|
||||
|
||||
if (assoc_req_len < assoc_req_ie_offset)
|
||||
assoc_req_len = assoc_req_ie_offset;
|
||||
if (assoc_resp_len < assoc_resp_ie_offset)
|
||||
assoc_resp_len = assoc_resp_ie_offset;
|
||||
|
||||
assoc_req_len -= assoc_req_ie_offset;
|
||||
assoc_resp_len -= assoc_resp_ie_offset;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user