Linux Kernel
CVE-2024-26799
HIGH
Severity by source
AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
Local access and low privilege required; high complexity due to specific QCOM hardware and invalid DAI ID trigger condition; worst-case kernel pointer dereference enables C/I/A:H.
Primary rating from Vendor (416baaa9-dc9f-4396-8d5f-8c081fb06d67).
CVSS VectorVendor: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Lifecycle Timeline
7DescriptionCVE.org
In the Linux kernel, the following vulnerability has been resolved:
ASoC: qcom: Fix uninitialized pointer dmactl
In the case where __lpass_get_dmactl_handle is called and the driver id dai_id is invalid the pointer dmactl is not being assigned a value, and dmactl contains a garbage value since it has not been initialized and so the null check may not work. Fix this to initialize dmactl to NULL. One could argue that modern compilers will set this to zero, but it is useful to keep this initialized as per the same way in functions __lpass_platform_codec_intf_init and lpass_cdc_dma_daiops_hw_params.
Cleans up clang scan build warning: sound/soc/qcom/lpass-cdc-dma.c:275:7: warning: Branch condition evaluates to a garbage value [core.uninitialized.Branch]
AnalysisAI
Uninitialized pointer access in the Linux kernel's QCOM ASoC LPASS CDC DMA audio driver allows a local low-privileged attacker on Qualcomm hardware to potentially corrupt kernel memory or crash the system. The function __lpass_get_dmactl_handle in sound/soc/qcom/lpass-cdc-dma.c fails to initialize the dmactl pointer to NULL before a conditional branch, meaning an invalid dai_id causes the branch to evaluate against a garbage stack value rather than a defined null sentinel. No public exploit exists and EPSS sits at just 0.23% (14th percentile), indicating very low real-world exploitation interest despite a CVSS base score of 7.0.
Technical ContextAI
The flaw resides in the ASoC (ALSA System on Chip) subsystem's Qualcomm LPASS (Low Power Audio SubSystem) CDC DMA driver, file sound/soc/qcom/lpass-cdc-dma.c. CWE-824 (Access of Uninitialized Pointer) describes the root cause: the local variable dmactl is declared but not initialized to NULL prior to a conditional null check. If an invalid dai_id is passed to __lpass_get_dmactl_handle, the assignment branch that would set dmactl is skipped, and the subsequent null check evaluates against whatever garbage value the stack happens to contain. On Qualcomm SoCs, LPASS provides the DMA engine for audio codec data; the dmactl handle structure controls DMA channel configuration. The affected CPEs are Linux kernel versions spanning pre-release 6.8-rc1 through 6.8-rc6, plus a broad wildcard range of prior stable kernels, as indicated by the NVD CPE data. Clang's scan-build static analyzer flagged this as: 'Branch condition evaluates to a garbage value [core.uninitialized.Branch]'.
RemediationAI
Apply the upstream kernel patches provided via the three stable-tree commits referenced in NVD: https://git.kernel.org/stable/c/1382d8b55129875b2e07c4d2a7ebc790183769ee, https://git.kernel.org/stable/c/99adc8b4d2f38bf0d06483ec845bc48f60c3f8cf, and https://git.kernel.org/stable/c/d5a7726e6ea62d447b79ab5baeb537ea6bdb225b. The fix is a one-line initialization of dmactl to NULL, consistent with the coding pattern already used in __lpass_platform_codec_intf_init and lpass_cdc_dma_daiops_hw_params. Distributions tracking stable kernel series (e.g., Debian, Ubuntu, RHEL) should package these fixes in kernel updates; verify with your distribution's security advisories. As a compensating control, systems that do not use Qualcomm LPASS CDC DMA audio hardware can disable the driver module (CONFIG_SND_SOC_LPASS_CDC_DMA=n at build time or blacklist the module at runtime with 'blacklist lpass-cdc-dma' in /etc/modprobe.d/), eliminating exposure entirely with no functional impact on non-QCOM audio stacks. A released patched kernel version number is not independently confirmed from the available input data.
Same weakness CWE-824 – Access of Uninitialized Pointer
View allSame technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today