CVE-2026-97910 in Linuxinfo

Summary

by MITRE • 09/25/2026

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

ASoC: sprd: validate compress buffer sizes against fixed allocations

sprd_platform_compr_open() allocates the stage 0 IRAM buffer (32K data area) and the stage 1 DDR buffer (2M data area) with fixed sizes, but sprd_platform_compr_copy() derives all copy lengths from the user controlled runtime->fragment_size and the write() count, never comparing them against the physical buffer sizes. The compress core only checks fragment_size * fragments for an u32 overflow in snd_compress_check_input(), so a local user can configure a logical buffer of up to ~4GB via SNDRV_COMPRESS_SET_PARAMS, far exceeding the fixed allocations.

A fragment_size larger than the 32K IRAM data area makes the stage 0 copy_from_user() overflow past the IRAM allocation, and a buffer_size larger than the 2M DDR buffer makes the wrapping copy at the end of sprd_platform_compr_copy() write fully user controlled data past the buffer. No SNDRV_PCM_TRIGGER_START is needed, a write() in SETUP state reaches the copy callback directly.

Reject parameters that do not fit into the fixed buffers in set_params(), and fix the advertised max fragment size: 128K never fitted into the 32K IRAM buffer. The caps values may have been carried over from the qdsp6 driver, which allocates its buffers according to the advertised maxima, unlike this driver. With 32K as max fragment size the advertised limits are self-consistent: 32K * 64 = 2M equals the DDR buffer size.

Discovered by Atuin - Automated Vulnerability Discovery Engine.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

Analysis

by VulDB Data Team • 09/25/2026

The Linux kernel audio subsystem contains a critical out-of-bounds write vulnerability within the Spreadtrum ASoC driver, specifically affecting the compressed audio playback path. This flaw arises from a fundamental mismatch between fixed hardware buffer allocations and user-controlled input parameters during data transfer operations. The sprd_platform_compr_open function initializes two distinct memory regions for processing audio streams: a stage 0 IRAM (Internal RAM) buffer with a fixed size of thirty-two kilobytes, intended for immediate DSP interaction, and a stage one DDR (Dynamic Random Access Memory) buffer sized at two megabytes for larger data staging. These allocations are static and do not scale based on runtime configuration or user input. However, the subsequent sprd_platform_compr_copy function, which handles the actual movement of audio data into these buffers, derives its copy lengths entirely from the fragment_size field within the snd_compress structure provided by userspace, combined with the byte count specified in write system calls. There is no validation logic to ensure that the requested copy length does not exceed the physical boundaries of either allocated buffer region.

The vulnerability is exacerbated by insufficient checks at the API entry point. The compress core performs a basic overflow check on the product of fragment_size and fragments within snd_compress_check_input, but this only prevents integer wraparound in total size calculation rather than validating against actual hardware constraints. Consequently, a local user can exploit SNDRV_COMPRESS_SET_PARAMS to configure a logical buffer configuration that implies access up to approximately four gigabytes of memory space. This far exceeds the combined capacity of the fixed thirty-two kilobyte and two megabyte allocations. Because no trigger command such as SNDRV_PCM_TRIGGER_START is required to initiate data flow, an attacker can reach the vulnerable copy callback directly by issuing a write system call while the stream remains in the SETUP state. When fragment_size exceeds the thirty-two-kilobyte limit of the IRAM buffer, the initial stage zero operation performs a copy_from_user that overflows past the allocated IRAM region into adjacent kernel memory. Similarly, if the total buffer size surpasses the two-megabyte DDR allocation, the wrapping logic at the end of sprd_platform_compr_copy writes fully user-controlled data beyond the bounds of the DDR buffer, leading to arbitrary kernel memory corruption.

This vulnerability is classified under CWE-120 Buffer Copy without Checking Size of Input and CWE-787 Out-of-bounds Write in standard taxonomy frameworks. From a tactical perspective, it aligns with ATT&CK technique T1059 Command and Scripting Interpreter for initial access via local exploitation or potentially T1068 Exploitation for Privilege Escalation if the memory corruption allows for control flow hijacking. The impact of this flaw is severe, as successful exploitation can lead to kernel panic due to data structure corruption, information disclosure through leaked kernel contents adjacent to the buffers, or full system compromise via arbitrary code execution with kernel privileges. The lack of boundary checks creates a direct path from untrusted userspace input to critical kernel memory regions without intermediate validation layers.

The resolution involves implementing strict parameter validation within the set_params function to reject any configuration that does not fit within the fixed hardware buffer limits. Specifically, the maximum fragment size is corrected to thirty-two kilobytes, which aligns with the physical capacity of the stage zero IRAM data area. Previously advertised values such as one hundred twenty-eight kilobytes were inconsistent and likely carried over from unrelated drivers like qdsp6 that utilize dynamic allocation strategies rather than fixed hardware mappings. By enforcing a maximum fragment size of thirty-two kilobytes, the driver ensures consistency with its own capacity limits where thirty-two kilobytes multiplied by sixty-four fragments equals two megabytes, perfectly matching the stage one DDR buffer size. This fix prevents both the IRAM overflow during initial data ingestion and the DDR overflow during wrapping operations. System administrators should apply kernel updates that include this patch to mitigate the risk of local privilege escalation through audio subsystem exploitation.

Responsible

Linux

Reservation

09/25/2026

Disclosure

09/25/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!