CVEvulnerability
CVE-2026-98116
7.8 HIGH
Official page ↗
- Status
- Analyzed
- Published
- 2026-09-25
- Last modified
- 2026-10-28
- Assigner
- 416baaa9-dc9f-4396-8d5f-8c081fb06d67
- CVSS 3.1 (416baaa9-dc9f-4396-8d5f-8c081fb06d67)
- 7.8 HIGH — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
- Weaknesses
- CWE-416
Description
In the Linux kernel, the following vulnerability has been resolved:
ALSA: pcm: Serialize PCM mmap with buffer reallocation to fix page UAF
snd_pcm_hw_params() and snd_pcm_hw_free() guard buffer reallocation
with an mmap_count check performed under the PCM stream lock, but the
lock is released long before the buffer is actually freed:
snd_pcm_sync_stop(), constraint refinement and do_free_pages() all
happen in between. snd_pcm_mmap_data(), on the other hand, takes no
lock at all: it validates against the old buffer's state and
dma_bytes, remaps its pages into the VMA, and only then increments
mmap_count.
A concurrent mmap() can therefore slip in between the check and the
free. remap_pfn_range() installs writable PTEs for the old buffer's
pages without taking page references, and the subsequent
do_free_pages() returns those pages to the page allocator while the
VMA still maps them. This leaves a stale, writable mapping of freed
pages: a page-level use-after-free that can be leveraged for local
privilege escalation.
Make snd_pcm_mmap_data() participate in the buffer-access scheme
introduced for hw_params/hw_free: acquire runtime->buffer_accessing
before validating and remapping, and release it afterwards. Buffer
reallocation already fails with -EBUSY while accessors are active,
and the mmap side now fails with -EBUSY while a reallocation is in
progress, so the validate/remap sequence and the check/free sequence
can no longer interleave.
A reproducer that turns this race into a stale writable mapping of
the freed DMA buffer pages is available on request.
Affected configurations
• linux linux kernel (>= 4.14.279 < 4.15)
• linux linux kernel (>= 4.19.243 < 4.20)
• linux linux kernel (>= 5.4.193 < 5.5)
• linux linux kernel (>= 5.10.109 < 5.11)
• linux linux kernel (>= 5.15.32 < 5.15.222)
• linux linux kernel (>= 5.16.18 <= 5.17.1)
• linux linux kernel (>= 6.7 < 6.12.111)
• linux linux kernel (>= 6.13 < 6.18.53)
• linux linux kernel (>= 6.19 < 7.2.7)
• linux linux kernel 7.3
Related
Weakness · CWE (1)
- CWE-416 Use After Free weakness
References
- https://git.kernel.org/stable/c/8c1882dfee8f404d118020664b73eb4592172226 Patch
- https://git.kernel.org/stable/c/9857a75714bb5df4781e4d8b1a1753b1e17bf07a Patch
- https://git.kernel.org/stable/c/9b110a9dcecc59516c77cb3c0caf1f492f75df2d Patch
- https://git.kernel.org/stable/c/cbadf2575d25e7dcc0d4da2717817ae569fbc99b Patch
- https://git.kernel.org/stable/c/cbc7ec97601d09b74e05e44470fa6b0bcdabf3f5 Patch
- https://git.kernel.org/stable/c/e6cdd2a0470d64073349a970dc1691433804b271 Patch
- https://git.kernel.org/stable/c/fd137bf8149bc6460f9b7b1fc292025da04cb9ee Patch