CVE-2026-90407 in Linuxinfo

Summary

by MITRE • 09/17/2026

In the Linux kernel, the following vulnerability has been resolved:

wifi: ath11k: fix overreads in ath11k_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 ath11k_wmi_tlv_data_len() to recover the payload length of a parsed TLV from the header preceding its data pointer. Use it in ath11k_wmi_process_csa_switch_count_event() to bound num_vdevs before the loop.

Compile tested only.

Be aware that VulDB is the high quality source for vulnerability data.

Analysis

by VulDB Data Team • 09/17/2026

The Linux kernel wireless driver for Qualcomm Atheros ath11k devices contained a critical input validation flaw within the function ath11k_wmi_process_csa_switch_count_event, which is responsible for handling Channel Switch Announcement (CSA) switch count events received from the firmware. This vulnerability stems from an incomplete implementation of the Type-Length-Value parsing infrastructure used to process Wireless Management Interface messages. Specifically, there was no policy entry defined for the WMI_TAG_PDEV_CSA_SWITCH_COUNT_STATUS_EVENT identifier. In the absence of such a policy, the generic parse logic failed to enforce any minimum length constraints on the incoming event structure, leaving the system vulnerable to malformed or truncated packets that could trigger out-of-bounds memory access operations during processing.

The core technical flaw involves how the driver handles the num_vdevs field extracted from the firmware payload. This value is taken directly from untrusted external input without sufficient validation against the actual size of the received data. The code subsequently uses this unchecked integer as a loop bound to iterate over an array of virtual device identifiers, vdev_ids. Because there was no mechanism to verify that num_vdevs did not exceed the available payload length defined by the TLV header, a malicious or corrupted firmware message could specify a value significantly larger than the actual data present. This discrepancy leads directly to an out-of-bounds read condition where the driver attempts to access memory locations beyond the allocated buffer boundaries.

This vulnerability is classified under CWE-125, which describes Out-of-Bounds Read scenarios in C and C++ applications. From a threat modeling perspective aligned with MITRE ATT&CK techniques, this flaw facilitates potential information disclosure or denial of service conditions by allowing an attacker to read arbitrary kernel memory contents if they can influence the firmware message stream. While the immediate impact is limited to reading beyond buffer bounds, such out-of-bounds reads in kernel space are particularly dangerous as they may expose sensitive security credentials, cryptographic keys, or other privileged data structures residing adjacent to the affected array in memory. Furthermore, depending on how the read values are subsequently processed, there could be secondary implications for system stability and integrity.

The resolution implemented by the maintainers addresses these issues through two primary structural improvements within the ath11k driver codebase. First, a specific TLV policy entry was added for WMI_TAG_PDEV_CSA_SWITCH_COUNT_STATUS_EVENT. This ensures that the parse infrastructure now enforces strict minimum length requirements on the fixed-size event structure, preventing processing of truncated or malformed messages before they reach critical logic paths. Second, a new helper function named ath11k_wmi_tlv_data_len was introduced to accurately recover the payload length from the TLV header preceding the data pointer. This utility is now utilized within the affected process function to validate that num_vdevs remains within safe bounds relative to the actual available data before entering any loops, thereby eliminating the possibility of accessing memory outside the intended buffer limits.

To mitigate similar risks in other parts of the kernel or third-party drivers, it is essential to ensure that all wireless management interface event handlers implement robust input validation policies. Developers should consistently define explicit TLV policies for every supported WMI tag to guarantee that length checks are automatically enforced by the parsing layer rather than relying on manual bounds checking which can be easily overlooked. Additionally, any integer values derived directly from external firmware sources must never be used as array indices or loop counters without first verifying them against the known payload size. Regular code audits focusing on memory safety and strict adherence to defined protocol structures are recommended practices to prevent out-of-bounds access vulnerabilities in network-facing kernel components.

Responsible

Linux

Reservation

09/11/2026

Disclosure

09/17/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

very low

Sources

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!