Sceawere

Vulnerability Detail

CVE-2026-74518UPDATED Verified Sceawere Triage Sources: NVD / CISA KEV

Linux Kernel Hugetlb List Corruption

Vulnerability Metadata

Severity
High
Score / CVSS
7.8
Creation Date
1d ago
Vendor
Linux
Product
Linux
Attack Type
N/A
Vector String
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Attack Complexity
LOW

Narrative and Response

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.

Executive Summary

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Executive Summary Locked

Sign up to unlock professional threat analysis, mitigations, and indicator signatures.

Technical Details

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Detailed Technical Analysis Locked

Sign up to unlock professional threat analysis, mitigations, and indicator signatures.

Mitigations

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Remediation & Mitigations Locked

Sign up to unlock professional threat analysis, mitigations, and indicator signatures.

References

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Intelligence References Locked

Sign up to unlock professional threat analysis, mitigations, and indicator signatures.

Additional Metadata

{
  "score": "7.8",
  "pubDate": "2026-08-15T13:17:56.967Z",
  "pubdate": "2026-08-15T13:17:56.967Z",
  "executiveSummary": "A list corruption vulnerability exists in the Linux kernel memory management subsystem, specifically within the hugetlb file region allocation mechanism (allocate_file_region_entries()).\nThe flaw is classified as a linked list corruption leading to use-after-free and potential kernel panic.\nIt impacts Linux kernel environments utilizing hugetlbfs shared mappings, particularly dense virtualization hosts running QEMU and SPDK/DPDK vhost-user targets where concurrent region operations occur on a shared resv_map.\nAn attacker or concurrent workload triggering specific race conditions can cause kernel memory corruption.\nWithout CONFIG_DEBUG_LIST enabled, the bug silently links kernel-stack memory addresses into the persistent resv->region_cache, resulting in a subsequent use-after-free condition.\nExploitation requires local system access or concurrent operations on shared hugetlbfs mappings that generate high contention on the resv_map.",
  "technicalDetails": "The vulnerable component is the allocate_file_region_entries() function located in the mm/hugetlb.c source file of the Linux kernel.\nThe root cause of the vulnerability stems from improper handling of temporary linked list heads during cache replenishment operations.\nWhen allocate_file_region_entries() tops up resv->region_cache with newly allocated file_region descriptors, it performs memory allocations using GFP_KERNEL.\nBecause GFP_KERNEL allocations can sleep, resv->lock is temporarily dropped.\nDuring this unlocked window, newly allocated entries are gathered onto a stack-local list head named allocated_regions.\nOnce the lock is re-acquired, these entries are spliced into resv->region_cache using the standard list_splice() function.\nThe critical flaw is that list_splice() moves the entries but fails to re-initialize the source head, leaving allocated_regions pointing directly at an entry that now resides on resv->region_cache.\nThe top-up logic operates inside a while loop that re-checks the cache deficit after re-acquiring resv->lock.\nIn shared mappings, the resv_map is shared across every mapper of the hugetlbfs inode.\nConcurrent operations such as region_chg(), region_add(), or region_del() executing on the same resv_map can consume cache entries during the unlocked window, forcing the while loop to execute a second iteration.\nDuring this subsequent iteration, the loop invokes list_add() on the stale, uninitialized allocated_regions head, corrupting the list pointers.\nIf CONFIG_DEBUG_LIST is enabled, the __list_add_valid() integrity check trips immediately, causing a kernel BUG and resulting in a host panic.\nIf CONFIG_DEBUG_LIST is disabled, the invalid list_add() silently introduces a kernel-stack address into resv->region_cache.\nSubsequent allocations and cache usage lead directly to a use-after-free condition, where kernel stack memory can be accessed or overwritten via heap-like operations on the hugetlb reservation map.\nNo special authentication or network exposure is required, as the attack vector relies on local concurrent process interactions with shared hugetlbfs memory segments."
}
CVE-2026-74518: Linux Kernel Hugetlb List Corruption (HIGH Severity, CVSS: 7.8) - Sceawere