CVE-2026-31787
Awaiting Analysis
Awaiting Analysis - Queue
Double Free in Linux Kernel via VMA Splitting
Publication date: 2026-04-30
Last updated on: 2026-05-06
Assigner: kernel.org
Description
Description
In the Linux kernel, the following vulnerability has been resolved:
xen/privcmd: fix double free via VMA splitting
privcmd_vm_ops defines .close (privcmd_close), but neither .may_split
nor .open. When userspace does a partial munmap() on a privcmd mapping,
the kernel splits the VMA via __split_vma(). Since may_split is NULL,
the split is allowed. vm_area_dup() copies vm_private_data (a pages
array allocated in alloc_empty_pages()) into the new VMA without any
fixup, because there is no .open callback.
Both VMAs now point to the same pages array. When the unmapped portion
is closed, privcmd_close() calls:
- xen_unmap_domain_gfn_range()
- xen_free_unpopulated_pages()
- kvfree(pages)
The surviving VMA still holds the dangling pointer. When it is later
destroyed, the same sequence runs again, which leads to a double free.
Fix this issue by adding a .may_split callback denying the VMA split.
This is XSA-487 / CVE-2026-31787
CVSS Scores
EPSS Scores
| Probability: | |
| Percentile: |
Meta Information
Affected Vendors & Products
| Vendor | Product | Version / Range |
|---|---|---|
| linux | linux_kernel | From 5.11 (inc) to 5.15.204 (exc) |
| linux | linux_kernel | From 5.16 (inc) to 6.1.170 (exc) |
| linux | linux_kernel | From 6.2 (inc) to 6.6.137 (exc) |
| linux | linux_kernel | From 6.7 (inc) to 6.12.85 (exc) |
| linux | linux_kernel | 7.1 |
| linux | linux_kernel | 7.1 |
| linux | linux_kernel | From 6.13 (inc) to 6.18.26 (exc) |
| linux | linux_kernel | From 6.19 (inc) to 7.0.3 (exc) |
| linux | linux_kernel | From 3.8 (inc) to 5.10.254 (exc) |
Helpful Resources
Exploitability
| CWE ID | Description |
|---|---|
| CWE-415 | The product calls free() twice on the same memory address. |