ZeroHour

CVE-2026-80716

mass

Local use-after-free in Linux kernel ALSA PCM linked-stream drain

CVSS 3.1
7.8 high
EPSS
<1%p2
Published
()
Modified
AI analysis

CVE-2026-80716 is a use-after-free bug in the Linux kernel's ALSA PCM core: when snd_pcm_drain() waits on a linked peer stream, it parks a stack-based wait entry on that peer's sleep queue, and after the wait it removes the entry only if the peer is still in the caller's group — if the streams are unlinked during the wait and the wait ends via signal or timeout, finish_wait() is skipped and the stale entry is left on the peer's wait list. A later wake_up() on that stream then walks a freed stack frame, corrupting kernel memory; unlike the close path (snd_pcm_drop() -> snd_pcm_post_stop()), snd_pcm_unlink() never wakes the sleep queues, which is why the dangling entry survives. A local user who can open ALSA PCM devices, link two streams, start a drain, and unlink a stream during the drain wait can trigger this, gaining at minimum a kernel crash (denial of service) and potentially local privilege escalation, consistent with the CVSS 7.8 local-vector score with high confidentiality, integrity and availability impact. Any Linux system whose kernel includes ALSA PCM support is affected — in practice nearly all desktop, laptop, server and embedded distributions. There is currently no public proof-of-concept, no evidence of in-the-wild exploitation (EPSS 0.1%, not in CISA KEV).

What to do: Update the Linux kernel to a build containing the upstream fix 'ALSA: pcm: wake linked drain waiters on unlink' as soon as your distribution ships it — no fixed version numbers are listed in this advisory, so track your distro's kernel errata for this CVE. As interim mitigation, restrict unprivileged local users' access to ALSA device nodes (/dev/snd/*) and avoid running untrusted local code that uses linked PCM streams. Current risk is low: no public PoC, EPSS 0.1%, and not listed in CISA KEV.

Affected
Linux kernel (ALSA PCM subsystem)
Estimated exposure
mass≈ billions of Linux devices (ALSA PCM core is built into nearly all general-purpose distribution kernels) — Estimated from Linux's ubiquity across servers, Android handsets, desktops and embedded systems whose standard kernels ship the ALSA core, tempered by the fact that only local users able to drive linked PCM streams (snd_pcm_link) and hit…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In the Linux kernel, the following vulnerability has been resolved: ALSA: pcm: wake linked drain waiters on unlink snd_pcm_drain() on a linked stream parks an on-stack wait entry on the drained peer's runtime->sleep, and after schedule_timeout() removes it only if that peer is still found in the caller's group. If group membership changes during the wait and the sleep ends by signal or timeout (so autoremove_wake_function() does not run), finish_wait() is skipped and snd_pcm_drain() returns with the entry still queued on that stream's sleep list; a later wake_up() then walks a freed stack frame. This is reachable by unlinking either the drained or the draining stream. Unlike the close path (snd_pcm_drop() -> snd_pcm_post_stop()), snd_pcm_unlink() never wakes the sleep queues. Wake every group member under the group lock before the membership change, so a linked drainer is released and drops its entry while the streams are still grouped. The window was opened when snd_pcm_link_rwsem stopped being held across the wait and the removal became conditional on group membership (see Fixes). The later switch to finish_wait() kept that conditional removal, so the signal/timeout case remained.

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

In the news

No ingested article mentions this CVE yet.