KernelScan.io

HIGH

asoc DAPM UAF

CVE-2026-43459

CVSS 7.3 / 10.0 NVD

CVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:H

KernelScan AI7.8HIGH

01

In the Linux kernel, the following vulnerability has been resolved: ASoC: soc-core: flush delayed work before removing DAIs and widgets When a sound card is unbound while a PCM stream is open, a use-after-free can occur in snd_soc_dapm_stream_event(), called from the close_delayed_work workqueue handler. During unbind, snd_soc_unbind_card() flushes delayed work and then calls soc_cleanup_card_resources(). Inside cleanup, snd_card_disconnect_sync() releases all PCM file descriptors, and the resulting PCM close path can call snd_soc_dapm_stream_stop() which schedules new delayed work with a pmdown_time timer delay. Since this happens after the flush in snd_soc_unbind_card(), the new work is not caught. soc_remove_link_components() then frees DAPM widgets before this work fires, leading to the use-after-free. The existing flush in soc_free_pcm_runtime() also cannot help as it runs after soc_remove_link_components() has already freed the widgets. Add a flush in soc_cleanup_card_resources() after snd_card_disconnect_sync() (after which no new PCM closes can schedule further delayed work) and before soc_remove_link_dais() and soc_remove_link_components() (which tear down the structures the delayed work accesses).

02

Engine v0.2.0

Risk summary

Local users with low privileges can trigger a use-after-free vulnerability in the ASoC (ALSA System on Chip) subsystem during sound card unbinding while PCM streams are active. This can lead to kernel memory corruption, privilege escalation, or system crashes on systems with audio hardware.

Affectedsound/soc/soc-core.c (ASoC core)

Vulnerability analysis

The vulnerability occurs due to missing synchronization in the ASoC core's card cleanup process. When a sound card is unbound while PCM streams are open, snd_card_disconnect_sync() releases file descriptors which triggers PCM close operations that schedule new delayed work via snd_soc_dapm_stream_stop(). However, this new delayed work is scheduled after the initial flush in snd_soc_unbind_card(), so it is not caught. Subsequently, soc_remove_link_components() frees DAPM widgets before the delayed work executes, creating a use-after-free condition when snd_soc_dapm_stream_event() tries to access freed memory. The fix adds an additional flush of delayed work in soc_cleanup_card_resources() after snd_card_disconnect_sync() but before widget teardown, ensuring all delayed work completes before memory is freed.

03

BranchFixed inPatch commit
5.105.10.253bf80a89da972
5.155.15.2033887e514978d
6.16.1.167231568afbc0c
6.126.12.78eab71e11ce24
6.186.18.197d33e6140945
6.196.19.9c054f0607c8b
6.66.6.130317a9298c54b
mainline7.095bc5c225513