Description
In the Linux kernel, the following vulnerability has been resolved:

mm/hugetlb: fix list corruption in allocate_file_region_entries()

allocate_file_region_entries() tops up resv->region_cache with freshly
allocated file_region descriptors. The allocation uses GFP_KERNEL, so
resv->lock is dropped around it: the new entries are gathered on a
stack-local list head, allocated_regions, and spliced into
resv->region_cache once the lock is re-acquired.

The splice used list_splice(), which moves the entries but does not
re-initialize the source head, so allocated_regions is left pointing at an
entry that now lives on resv->region_cache. The top-up runs in a while
loop that re-checks the cache deficit after re-acquiring the lock. For a
shared mapping the resv_map is shared by every mapper of the hugetlbfs
inode, so a concurrent region_chg()/region_add()/region_del() on the same
resv_map can consume cache entries during the unlocked window and force a
second iteration. That iteration calls list_add() on the stale head and
corrupts the list; with CONFIG_DEBUG_LIST the __list_add_valid() check
trips:

list_add corruption. next->prev should be prev (ffffc900011ff7f8),
but was ffff88814c281460. (next=ffff88814c545640).
kernel BUG at lib/list_debug.c:31!
allocate_file_region_entries+0x191/0x420
region_chg+0x267/0x300
hugetlb_reserve_pages+0x387/0xc80
hugetlbfs_file_mmap+0x2ce/0x3f0
mmap_region+0x1348/0x1a80
do_mmap+0x85e/0xb90
vm_mmap_pgoff+0x18c/0x330
ksys_mmap_pgoff+0x2a1/0x3e0
do_syscall_64+0xd7/0x420

Without CONFIG_DEBUG_LIST the bad list_add() silently links a kernel-stack
address into resv->region_cache, leading to later use-after-free.

This was observed as a real host panic on a dense KVM host where a QEMU
guest-RAM hugetlbfs file was mapped MAP_SHARED by both QEMU and a separate
SPDK/DPDK vhost-user target, generating concurrent region_* traffic on one
shared resv_map.

Use list_splice_init() so the source head is re-initialized empty after
each splice, making the retry loop safe.
Published: 2026-08-15
Score: 7.8 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Allocate_file_region_entries() tops up the reservation region cache with freshly allocated file_region descriptors. The allocation uses GFP_KERNEL, causing the resv->lock to be dropped during the allocation. The splice that moves the allocated entries into the cache uses list_splice(), which does not re‑initialise the source list head. Consequently, the stale head can be reused in a subsequent iteration of the cache‑top‑up loop, corrupting the doubly‑linked list in resv->region_cache. This corruption triggers a kernel BUG, leading to a system panic. The bug manifests when multiple processes map a hugetlbfs file via MAP_SHARED and concurrently modify the reservation map, such as during KVM, QEMU, and SPDK/DPDK interactions. A real host crash was observed in a dense KVM environment. This is a form of improper list manipulation (CWE-367) that can lead to use‑after‑free and memory corruption.

Affected Systems

All Linux kernel releases before the commit that replaces list_splice() with list_splice_init() in the mm/hugetlb subsystem. The flaw exists whenever hugetlbfs files are mounted and accessed with MAP_SHARED by multiple services sharing the same reservation map.

Risk and Exploitability

The CVSS score is 7.8 and the EPSS score is <1%, indicating a high severity and low likelihood of exploitation. The vulnerability caused a production host crash in a dense KVM environment, demonstrating significant impact. The likely attack vector requires a local malicious process with sufficient privileges to perform mmap on a hugetlbfs file; this inference is derived from the need for concurrent access to a shared reservation map, which is not explicitly stated in the description. The absence of a KEV listing suggests no publicly known exploits yet, but the crash potential keeps the severity high.

Generated by OpenCVE AI on August 22, 2026 at 04:55 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply a kernel update that replaces list_splice() with list_splice_init in the mm/hugetlb subsystem.
  • Upgrade your distribution’s kernel package to a version that includes this fix, or backport the patch if running a custom kernel.
  • Follow best practices for hugetlbfs usage: avoid sharing MAP_SHARED mappings across multiple processes when possible, and consider using private mappings or separate reservation maps to reduce race conditions.

Generated by OpenCVE AI on August 22, 2026 at 04:55 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Debian DSA Debian DSA DSA-6466-1 linux security update
History

Sat, 22 Aug 2026 03:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-416
CWE-590

Sat, 22 Aug 2026 00:15:00 +0000

Type Values Removed Values Added
Weaknesses CWE-367
References
Metrics threat_severity

None

threat_severity

Important


Wed, 19 Aug 2026 17:00:00 +0000


Mon, 17 Aug 2026 13:00:00 +0000

Type Values Removed Values Added
Weaknesses CWE-416
CWE-590

Mon, 17 Aug 2026 11:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-1303
CWE-416

Mon, 17 Aug 2026 06:00:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 7.8, 'vector': 'CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'}


Sat, 15 Aug 2026 17:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-1303
CWE-416

Sat, 15 Aug 2026 12:45:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: mm/hugetlb: fix list corruption in allocate_file_region_entries() allocate_file_region_entries() tops up resv->region_cache with freshly allocated file_region descriptors. The allocation uses GFP_KERNEL, so resv->lock is dropped around it: the new entries are gathered on a stack-local list head, allocated_regions, and spliced into resv->region_cache once the lock is re-acquired. The splice used list_splice(), which moves the entries but does not re-initialize the source head, so allocated_regions is left pointing at an entry that now lives on resv->region_cache. The top-up runs in a while loop that re-checks the cache deficit after re-acquiring the lock. For a shared mapping the resv_map is shared by every mapper of the hugetlbfs inode, so a concurrent region_chg()/region_add()/region_del() on the same resv_map can consume cache entries during the unlocked window and force a second iteration. That iteration calls list_add() on the stale head and corrupts the list; with CONFIG_DEBUG_LIST the __list_add_valid() check trips: list_add corruption. next->prev should be prev (ffffc900011ff7f8), but was ffff88814c281460. (next=ffff88814c545640). kernel BUG at lib/list_debug.c:31! allocate_file_region_entries+0x191/0x420 region_chg+0x267/0x300 hugetlb_reserve_pages+0x387/0xc80 hugetlbfs_file_mmap+0x2ce/0x3f0 mmap_region+0x1348/0x1a80 do_mmap+0x85e/0xb90 vm_mmap_pgoff+0x18c/0x330 ksys_mmap_pgoff+0x2a1/0x3e0 do_syscall_64+0xd7/0x420 Without CONFIG_DEBUG_LIST the bad list_add() silently links a kernel-stack address into resv->region_cache, leading to later use-after-free. This was observed as a real host panic on a dense KVM host where a QEMU guest-RAM hugetlbfs file was mapped MAP_SHARED by both QEMU and a separate SPDK/DPDK vhost-user target, generating concurrent region_* traffic on one shared resv_map. Use list_splice_init() so the source head is re-initialized empty after each splice, making the retry loop safe.
Title mm/hugetlb: fix list corruption in allocate_file_region_entries()
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-08-19T16:38:19.402Z

Reserved: 2026-08-15T05:44:03.910Z

Link: CVE-2026-74518

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-15T13:17:56.967

Modified: 2026-08-19T17:21:08.543

Link: CVE-2026-74518

cve-icon Redhat

Severity : Important

Publid Date: 2026-08-15T00:00:00Z

Links: CVE-2026-74518 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-08-22T05:00:13Z

Weaknesses
  • CWE-367

    Time-of-check Time-of-use (TOCTOU) Race Condition