CVE-2026-98116
📛 CVE Title
ALSA: pcm: Serialize PCM mmap with buffer reallocation to fix page UAF
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.
Overview
- State
- PUBLISHED
- Assigner (CNA)
- Linux
- CVSS severity
- HIGH
- CVSS score
- 7.8 / 10
- CVSS vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H- Effective score
- 7.8 / 10 HIGH source: CNA overview
- CWE(s)
- —
- Reserved
- 2026-09-25
- Published
- 2026-09-25 10:36 UTC
- Last updated
- 2026-09-25 14:42 UTC
- Source
- https://raw.githubusercontent.com/CVEProject/cvelistV5/main/cves/2026/98xxx/CVE-2026-98116.json
- Linked Threat
- CVE-2026-98116 — ALSA: pcm: Serialize PCM mmap with buffer reallocation to fix page UAF
NVD triage scoring NVD CVE 2.0
Layer NVD adds on top of the CNA's CVE record — published / last-modified timestamps, exploitability / impact subscores, and the FIRST.org EPSS probability that this CVE will be exploited in the wild in the next 30 days.
- NVD published
- 2026-09-25 11:17:42 UTC
- NVD last modified
- 2026-09-25 15:18:06 UTC
- NVD CVSS v3.1
- 7.8 / 10 HIGH source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
- NVD CVSS vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H- Exploitability subscore
- 1.8 / 10
- Impact subscore
- 5.9 / 10
NVD / KEV / EPSS data refreshed 2026-09-26 04:22 UTC. Re-run the 🛰 Backfill from NVD button above to refresh.
Affected products (2)
| Vendor | Product | Versions | Platforms |
|---|---|---|---|
| Linux | Linux |
92ee3c60ec9fe64404dc035e7c41277d74aa26cb (affected),
92ee3c60ec9fe64404dc035e7c41277d74aa26cb (affected),
92ee3c60ec9fe64404dc035e7c41277d74aa26cb (affected),
92ee3c60ec9fe64404dc035e7c41277d74aa26cb (affected),
a42aa926843acca96c0dfbde2e835b8137f2f092 (affected),
9cb6c40a6ebe4a0cfc9d6a181958211682cffea9 (affected),
fbeb492694ce0441053de57699e1e2b7bc148a69 (affected),
0f6947f5f5208f6ebd4d76a82a4757e2839a23f8 (affected),
33061d0fba51d2bf70a2ef9645f703c33fe8e438 (affected),
0090c13cbbdffd7da079ac56f80373a9a1be0bf8 (affected),
1bbf82d9f961414d6c76a08f7f843ea068e0ab7b (affected),
4.14.279 (affected),
4.19.243 (affected),
5.4.193 (affected),
5.10.109 (affected),
5.15.32 (affected),
5.16.18 (affected),
5.17.1 (affected)
|
— |
| Linux | Linux |
5.18 (affected),
0 (unaffected),
6.12.111 (unaffected),
6.18.53 (unaffected),
7.2.7 (unaffected),
7.3-rc2 (unaffected)
|
— |
Vendor references (4)
References embedded in the original CVE record by the assigning CNA.
Web references (0)
DuckDuckGo results ranked by threat-intel / vendor advisory domains. Generated by the 🔎 Find references (web) button above — same flow as the Remediations search.
No web references attached yet.
NVD-tagged references (4)
Reference list NVD curates from the CNA record, vendor advisories, and third-party reports. The tag chips below are NVD's analyst-assigned categories.
- https://git.kernel.org/stable/c/8c1882dfee8f404d118020664b73eb4592172226 416baaa9-dc9f-4396-8d5f-8c081fb06d67
- https://git.kernel.org/stable/c/9b110a9dcecc59516c77cb3c0caf1f492f75df2d 416baaa9-dc9f-4396-8d5f-8c081fb06d67
- https://git.kernel.org/stable/c/cbc7ec97601d09b74e05e44470fa6b0bcdabf3f5 416baaa9-dc9f-4396-8d5f-8c081fb06d67
- https://git.kernel.org/stable/c/fd137bf8149bc6460f9b7b1fc292025da04cb9ee 416baaa9-dc9f-4396-8d5f-8c081fb06d67
AI Forensic Analysis
Only Available for Registered Users. Sign in to view.
Raw JSON
The full cvelistV5 record. Download as CVE-2026-98116.json.
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"sound/core/pcm_native.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "cbc7ec97601d09b74e05e44470fa6b0bcdabf3f5",
"status": "affected",
"version": "92ee3c60ec9fe64404dc035e7c41277d74aa26cb",
"versionType": "git"
},
{
"lessThan": "fd137bf8149bc6460f9b7b1fc292025da04cb9ee",
"status": "affected",
"version": "92ee3c60ec9fe64404dc035e7c41277d74aa26cb",
"versionType": "git"
},
{
"lessThan": "8c1882dfee8f404d118020664b73eb4592172226",
"status": "affected",
"version": "92ee3c60ec9fe64404dc035e7c41277d74aa26cb",
"versionType": "git"
},
{
"lessThan": "9b110a9dcecc59516c77cb3c0caf1f492f75df2d",
"status": "affected",
"version": "92ee3c60ec9fe64404dc035e7c41277d74aa26cb",
"versionType": "git"
},
{
"status": "affected",
"version": "a42aa926843acca96c0dfbde2e835b8137f2f092",
"versionType": "git"
},
{
"status": "affected",
"version": "9cb6c40a6ebe4a0cfc9d6a181958211682cffea9",
"versionType": "git"
},
{
"status": "affected",
"version": "fbeb492694ce0441053de57699e1e2b7bc148a69",
"versionType": "git"
},
{
"status": "affected",
"version": "0f6947f5f5208f6ebd4d76a82a4757e2839a23f8",
"versionType": "git"
},
{
"status": "affected",
"version": "33061d0fba51d2bf70a2ef9645f703c33fe8e438",
"versionType": "git"
},
{
"status": "affected",
"version": "0090c13cbbdffd7da079ac56f80373a9a1be0bf8",
"versionType": "git"
},
{
"status": "affected",
"version": "1bbf82d9f961414d6c76a08f7f843ea068e0ab7b",
"versionType": "git"
},
{
"lessThan": "4.15",
"status": "affected",
"version": "4.14.279",
"versionType": "semver"
},
{
"lessThan": "4.20",
"status": "affected",
"version": "4.19.243",
"versionType": "semver"
},
{
"lessThan": "5.5",
"status": "affected",
"version": "5.4.193",
"versionType": "semver"
},
{
"lessThan": "5.11",
"status": "affected",
"version": "5.10.109",
"versionType": "semver"
},
{
"lessThan": "5.16",
"status": "affected",
"version": "5.15.32",
"versionType": "semver"
},
{
"lessThan": "5.17",
"status": "affected",
"version": "5.16.18",
"versionType": "semver"
},
{
"lessThan": "5.18",
"status": "affected",
"version": "5.17.1",
"versionType": "semver"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"sound/core/pcm_native.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "5.18"
},
{
"lessThan": "5.18",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.111",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.53",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.7",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3-rc2",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.12.111",
"versionStartIncluding": "5.18",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.53",
"versionStartIncluding": "5.18",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2.7",
"versionStartIncluding": "5.18",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.3-rc2",
"versionStartIncluding": "5.18",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "4.14.279",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "4.19.243",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.4.193",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.10.109",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.15.32",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.16.18",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "5.17.1",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nALSA: pcm: Serialize PCM mmap with buffer reallocation to fix page UAF\n\nsnd_pcm_hw_params() and snd_pcm_hw_free() guard buffer reallocation\nwith an mmap_count check performed under the PCM stream lock, but the\nlock is released long before the buffer is actually freed:\nsnd_pcm_sync_stop(), constraint refinement and do_free_pages() all\nhappen in between. snd_pcm_mmap_data(), on the other hand, takes no\nlock at all: it validates against the old buffer's state and\ndma_bytes, remaps its pages into the VMA, and only then increments\nmmap_count.\n\nA concurrent mmap() can therefore slip in between the check and the\nfree. remap_pfn_range() installs writable PTEs for the old buffer's\npages without taking page references, and the subsequent\ndo_free_pages() returns those pages to the page allocator while the\nVMA still maps them. This leaves a stale, writable mapping of freed\npages: a page-level use-after-free that can be leveraged for local\nprivilege escalation.\n\nMake snd_pcm_mmap_data() participate in the buffer-access scheme\nintroduced for hw_params/hw_free: acquire runtime->buffer_accessing\nbefore validating and remapping, and release it afterwards. Buffer\nreallocation already fails with -EBUSY while accessors are active,\nand the mmap side now fails with -EBUSY while a reallocation is in\nprogress, so the validate/remap sequence and the check/free sequence\ncan no longer interleave.\n\nA reproducer that turns this race into a stale writable mapping of\nthe freed DMA buffer pages is available on request."
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 7.8,
"baseSeverity": "HIGH",
"vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:L - The bug is triggered by mmap() on a local /dev/snd/pcmC*D* file descriptor (snd_pcm_mmap -> snd_pcm_mmap_data) racing with SNDRV_PCM_IOCTL_HW_PARAMS/HW_FREE ioctls on the same fd. No remote protocol carries any of the inputs.\nAC:L - One process controls both sides of the race: one thread calls mmap() and another calls hw_free/hw_params. The window runs from the mmap_count check under the stream lock through snd_pcm_sync_stop and refinement to do_free_pages, and the attacker can retry as often as needed.\nPR:L - Opening the PCM device node takes ordinary local user access, either the audio group or the udev uaccess ACL given to the logged-in seat user. No capability is checked on the mmap or hw_params/hw_free paths.\nUI:N - The attacker opens the device, sets hw_params and races the mmap against hw_free entirely through their own syscalls. No other user has to do anything.\nS:U - This is a local kernel privilege escalation within the same kernel security authority. It crosses no VM or IOMMU boundary.\nC:H - remap_pfn_range installs PTEs for the old DMA buffer pages without taking page references, and do_free_pages then frees them. The attacker keeps a direct mapping of whatever the page allocator reuses those pages for, such as page tables, cred or slab pages, and can read it.\nI:H - The stale mapping of the freed buffer pages is writable, which gives direct write access to reallocated kernel pages. This is a page-level UAF that enables privilege escalation, as the fix commit itself states.\nA:H - Writing through the stale PTEs into pages that have been reallocated corrupts arbitrary kernel memory, which leads to oopses, panics or page-state BUGs."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-09-25T14:42:08.633Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/cbc7ec97601d09b74e05e44470fa6b0bcdabf3f5"
},
{
"url": "https://git.kernel.org/stable/c/fd137bf8149bc6460f9b7b1fc292025da04cb9ee"
},
{
"url": "https://git.kernel.org/stable/c/8c1882dfee8f404d118020664b73eb4592172226"
},
{
"url": "https://git.kernel.org/stable/c/9b110a9dcecc59516c77cb3c0caf1f492f75df2d"
}
],
"title": "ALSA: pcm: Serialize PCM mmap with buffer reallocation to fix page UAF",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-98116",
"datePublished": "2026-09-25T10:36:01.723Z",
"dateReserved": "2026-09-25T10:25:14.317Z",
"dateUpdated": "2026-09-25T14:42:08.633Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2"
}