CVE-2026-31654 (GCVE-0-2026-31654)
Vulnerability from cvelistv5 – Published: 2026-04-24 14:45 – Updated: 2026-04-24 14:45
VLAI?
Title
mm/vma: fix memory leak in __mmap_region()
Summary
In the Linux kernel, the following vulnerability has been resolved:
mm/vma: fix memory leak in __mmap_region()
commit 605f6586ecf7 ("mm/vma: do not leak memory when .mmap_prepare
swaps the file") handled the success path by skipping get_file() via
file_doesnt_need_get, but missed the error path.
When /dev/zero is mmap'd with MAP_SHARED, mmap_zero_prepare() calls
shmem_zero_setup_desc() which allocates a new shmem file to back the
mapping. If __mmap_new_vma() subsequently fails, this replacement
file is never fput()'d - the original is released by
ksys_mmap_pgoff(), but nobody releases the new one.
Add fput() for the swapped file in the error path.
Reproducible with fault injection.
FAULT_INJECTION: forcing a failure.
name failslab, interval 1, probability 0, space 0, times 1
CPU: 2 UID: 0 PID: 366 Comm: syz.7.14 Not tainted 7.0.0-rc6 #2 PREEMPT(full)
Hardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
Call Trace:
<TASK>
dump_stack_lvl+0x164/0x1f0
should_fail_ex+0x525/0x650
should_failslab+0xdf/0x140
kmem_cache_alloc_noprof+0x78/0x630
vm_area_alloc+0x24/0x160
__mmap_region+0xf6b/0x2660
mmap_region+0x2eb/0x3a0
do_mmap+0xc79/0x1240
vm_mmap_pgoff+0x252/0x4c0
ksys_mmap_pgoff+0xf8/0x120
__x64_sys_mmap+0x12a/0x190
do_syscall_64+0xa9/0x580
entry_SYSCALL_64_after_hwframe+0x76/0x7e
</TASK>
kmemleak: 1 new suspected memory leaks (see /sys/kernel/debug/kmemleak)
BUG: memory leak
unreferenced object 0xffff8881118aca80 (size 360):
comm "syz.7.14", pid 366, jiffies 4294913255
hex dump (first 32 bytes):
00 00 00 00 ad 4e ad de ff ff ff ff 00 00 00 00 .....N..........
ff ff ff ff ff ff ff ff c0 28 4d ae ff ff ff ff .........(M.....
backtrace (crc db0f53bc):
kmem_cache_alloc_noprof+0x3ab/0x630
alloc_empty_file+0x5a/0x1e0
alloc_file_pseudo+0x135/0x220
__shmem_file_setup+0x274/0x420
shmem_zero_setup_desc+0x9c/0x170
mmap_zero_prepare+0x123/0x140
__mmap_region+0xdda/0x2660
mmap_region+0x2eb/0x3a0
do_mmap+0xc79/0x1240
vm_mmap_pgoff+0x252/0x4c0
ksys_mmap_pgoff+0xf8/0x120
__x64_sys_mmap+0x12a/0x190
do_syscall_64+0xa9/0x580
entry_SYSCALL_64_after_hwframe+0x76/0x7e
Found by syzkaller.
Severity ?
No CVSS data available.
Assigner
References
Impacted products
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"mm/vma.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "61fc8eaf2ab214b32c7bce52597c80cf0ca41ada",
"status": "affected",
"version": "605f6586ecf78395f0185ab24c368fb46a06e434",
"versionType": "git"
},
{
"lessThan": "894f99eb535edc4514f756818f3c4f688ba53a59",
"status": "affected",
"version": "605f6586ecf78395f0185ab24c368fb46a06e434",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"mm/vma.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.19"
},
{
"lessThan": "6.19",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.19.*",
"status": "unaffected",
"version": "6.19.13",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.0",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.19.13",
"versionStartIncluding": "6.19",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.0",
"versionStartIncluding": "6.19",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nmm/vma: fix memory leak in __mmap_region()\n\ncommit 605f6586ecf7 (\"mm/vma: do not leak memory when .mmap_prepare\nswaps the file\") handled the success path by skipping get_file() via\nfile_doesnt_need_get, but missed the error path.\n\nWhen /dev/zero is mmap\u0027d with MAP_SHARED, mmap_zero_prepare() calls\nshmem_zero_setup_desc() which allocates a new shmem file to back the\nmapping. If __mmap_new_vma() subsequently fails, this replacement\nfile is never fput()\u0027d - the original is released by\nksys_mmap_pgoff(), but nobody releases the new one.\n\nAdd fput() for the swapped file in the error path.\n\nReproducible with fault injection.\n\nFAULT_INJECTION: forcing a failure.\nname failslab, interval 1, probability 0, space 0, times 1\nCPU: 2 UID: 0 PID: 366 Comm: syz.7.14 Not tainted 7.0.0-rc6 #2 PREEMPT(full)\nHardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014\nCall Trace:\n \u003cTASK\u003e\n dump_stack_lvl+0x164/0x1f0\n should_fail_ex+0x525/0x650\n should_failslab+0xdf/0x140\n kmem_cache_alloc_noprof+0x78/0x630\n vm_area_alloc+0x24/0x160\n __mmap_region+0xf6b/0x2660\n mmap_region+0x2eb/0x3a0\n do_mmap+0xc79/0x1240\n vm_mmap_pgoff+0x252/0x4c0\n ksys_mmap_pgoff+0xf8/0x120\n __x64_sys_mmap+0x12a/0x190\n do_syscall_64+0xa9/0x580\n entry_SYSCALL_64_after_hwframe+0x76/0x7e\n \u003c/TASK\u003e\n\nkmemleak: 1 new suspected memory leaks (see /sys/kernel/debug/kmemleak)\nBUG: memory leak\nunreferenced object 0xffff8881118aca80 (size 360):\n comm \"syz.7.14\", pid 366, jiffies 4294913255\n hex dump (first 32 bytes):\n 00 00 00 00 ad 4e ad de ff ff ff ff 00 00 00 00 .....N..........\n ff ff ff ff ff ff ff ff c0 28 4d ae ff ff ff ff .........(M.....\n backtrace (crc db0f53bc):\n kmem_cache_alloc_noprof+0x3ab/0x630\n alloc_empty_file+0x5a/0x1e0\n alloc_file_pseudo+0x135/0x220\n __shmem_file_setup+0x274/0x420\n shmem_zero_setup_desc+0x9c/0x170\n mmap_zero_prepare+0x123/0x140\n __mmap_region+0xdda/0x2660\n mmap_region+0x2eb/0x3a0\n do_mmap+0xc79/0x1240\n vm_mmap_pgoff+0x252/0x4c0\n ksys_mmap_pgoff+0xf8/0x120\n __x64_sys_mmap+0x12a/0x190\n do_syscall_64+0xa9/0x580\n entry_SYSCALL_64_after_hwframe+0x76/0x7e\n\nFound by syzkaller."
}
],
"providerMetadata": {
"dateUpdated": "2026-04-24T14:45:06.387Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/61fc8eaf2ab214b32c7bce52597c80cf0ca41ada"
},
{
"url": "https://git.kernel.org/stable/c/894f99eb535edc4514f756818f3c4f688ba53a59"
}
],
"title": "mm/vma: fix memory leak in __mmap_region()",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-31654",
"datePublished": "2026-04-24T14:45:06.387Z",
"dateReserved": "2026-03-09T15:48:24.129Z",
"dateUpdated": "2026-04-24T14:45:06.387Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"epss": {
"cve": "CVE-2026-31654",
"date": "2026-04-25",
"epss": "0.00018",
"percentile": "0.04987"
},
"nvd": "{\"cve\":{\"id\":\"CVE-2026-31654\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-04-24T15:16:44.890\",\"lastModified\":\"2026-04-24T17:51:40.810\",\"vulnStatus\":\"Awaiting Analysis\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nmm/vma: fix memory leak in __mmap_region()\\n\\ncommit 605f6586ecf7 (\\\"mm/vma: do not leak memory when .mmap_prepare\\nswaps the file\\\") handled the success path by skipping get_file() via\\nfile_doesnt_need_get, but missed the error path.\\n\\nWhen /dev/zero is mmap\u0027d with MAP_SHARED, mmap_zero_prepare() calls\\nshmem_zero_setup_desc() which allocates a new shmem file to back the\\nmapping. If __mmap_new_vma() subsequently fails, this replacement\\nfile is never fput()\u0027d - the original is released by\\nksys_mmap_pgoff(), but nobody releases the new one.\\n\\nAdd fput() for the swapped file in the error path.\\n\\nReproducible with fault injection.\\n\\nFAULT_INJECTION: forcing a failure.\\nname failslab, interval 1, probability 0, space 0, times 1\\nCPU: 2 UID: 0 PID: 366 Comm: syz.7.14 Not tainted 7.0.0-rc6 #2 PREEMPT(full)\\nHardware name: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014\\nCall Trace:\\n \u003cTASK\u003e\\n dump_stack_lvl+0x164/0x1f0\\n should_fail_ex+0x525/0x650\\n should_failslab+0xdf/0x140\\n kmem_cache_alloc_noprof+0x78/0x630\\n vm_area_alloc+0x24/0x160\\n __mmap_region+0xf6b/0x2660\\n mmap_region+0x2eb/0x3a0\\n do_mmap+0xc79/0x1240\\n vm_mmap_pgoff+0x252/0x4c0\\n ksys_mmap_pgoff+0xf8/0x120\\n __x64_sys_mmap+0x12a/0x190\\n do_syscall_64+0xa9/0x580\\n entry_SYSCALL_64_after_hwframe+0x76/0x7e\\n \u003c/TASK\u003e\\n\\nkmemleak: 1 new suspected memory leaks (see /sys/kernel/debug/kmemleak)\\nBUG: memory leak\\nunreferenced object 0xffff8881118aca80 (size 360):\\n comm \\\"syz.7.14\\\", pid 366, jiffies 4294913255\\n hex dump (first 32 bytes):\\n 00 00 00 00 ad 4e ad de ff ff ff ff 00 00 00 00 .....N..........\\n ff ff ff ff ff ff ff ff c0 28 4d ae ff ff ff ff .........(M.....\\n backtrace (crc db0f53bc):\\n kmem_cache_alloc_noprof+0x3ab/0x630\\n alloc_empty_file+0x5a/0x1e0\\n alloc_file_pseudo+0x135/0x220\\n __shmem_file_setup+0x274/0x420\\n shmem_zero_setup_desc+0x9c/0x170\\n mmap_zero_prepare+0x123/0x140\\n __mmap_region+0xdda/0x2660\\n mmap_region+0x2eb/0x3a0\\n do_mmap+0xc79/0x1240\\n vm_mmap_pgoff+0x252/0x4c0\\n ksys_mmap_pgoff+0xf8/0x120\\n __x64_sys_mmap+0x12a/0x190\\n do_syscall_64+0xa9/0x580\\n entry_SYSCALL_64_after_hwframe+0x76/0x7e\\n\\nFound by syzkaller.\"}],\"metrics\":{},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/61fc8eaf2ab214b32c7bce52597c80cf0ca41ada\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/894f99eb535edc4514f756818f3c4f688ba53a59\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}"
}
}
Loading…
Loading…
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Loading…
Loading…