HIGH Introduced in 6.3
ath12k CsaEvent OOB
CVE-2026-90408
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
KernelScan AI8.1HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: wifi: ath12k: fix overreads in ath12k_wmi_process_csa_switch_count_event() There is no policy entry for WMI_TAG_PDEV_CSA_SWITCH_COUNT_STATUS_EVENT, so the parse infrastructure does not enforce a minimum length for the event struct. Additionally, the num_vdevs field is taken directly from firmware and used as a loop bound over the vdev_ids array without checking that it fits within the TLV payload. Either condition can cause an out-of-bounds read. Add a TLV policy entry for WMI_TAG_PDEV_CSA_SWITCH_COUNT_STATUS_EVENT so the parse infrastructure enforces a minimum length for the fixed-size event struct. Add a helper ath12k_wmi_tlv_data_len() to recover the payload length of a parsed TLV from the header preceding its data pointer. Use it in ath12k_wmi_process_csa_switch_count_event() to bound num_vdevs before the loop. Compile tested only.
02KernelScan AI Analysis
Risk summary
The ath12k Wi-Fi driver fails to validate the length of a CSA switch count event from firmware, allowing an out-of-bounds read when processing vdev IDs. An attacker who can inject or craft firmware events (e.g., via a malicious access point or compromised firmware) could exploit this to read kernel memory or cause a denial of service.
Vulnerability analysis
The driver accepts a channel-switch status message from the Wi-Fi firmware without ensuring the message is large enough for its header. It then uses a count value from that header to decide how many device identifiers to read, without checking whether that many identifiers are actually present in the message. This leads to reading memory beyond the message buffer. The corrected driver enforces a minimum size for this message type and verifies the count against the real payload length before processing the identifiers. An attacker within Wi-Fi range can trigger this by causing the connected access point, or a rogue access point, to send a channel-switch announcement that makes the firmware generate the malformed event.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 7.2 | 6.3 | 7.2.6 | bf97c9d51238 |
| mainline | 6.3 | 7.3-rc1 | 878654eb78c6 |