ZeroHour

CVE-2026-89986

mass

Linux kernel weighted-interleave mempolicy sleeping allocation in atomic context flaw

CVSS 3.1
7.8 high
EPSS
Published
()
Modified
AI analysis

The Linux kernel's alloc_pages_bulk_weighted_interleave() hardcodes GFP_KERNEL when allocating a temporary weights array, even when it is invoked from atomic (non-sleeping) contexts. The bug is reached when an rhashtable rehash under rcu_read_lock() requests a GFP_ATOMIC bucket-table allocation that goes through vmalloc, and the current task has an MPOL_WEIGHTED_INTERLEAVE mempolicy, causing the kernel to attempt a sleeping allocation in an invalid context (a 'might sleep' splat). A local attacker with low privileges who can set a weighted-interleave memory policy could trigger kernel warnings and potential instability or denial of service. Any Linux system running a kernel containing the weighted-interleave mempolicy code is affected in principle, though triggering requires that specific policy to be in use, which is mostly seen on NUMA/multi-node servers. No public proof-of-concept or exploitation is known, and the flaw is not on the CISA KEV list.

What to do: Track your distribution's kernel advisory and update to a kernel that includes the upstream mm/mempolicy fix once backported. As an interim measure, avoid setting MPOL_WEIGHTED_INTERLEAVE memory policies on affected multi-node systems and limit unprivileged local users' ability to set custom mempolicies. Check kernel logs for 'sleeping function called from invalid context' splats referencing bucket_table_alloc or vmalloc paths as indicators of attempted triggering.

Affected
Linux kernel (mm/mempolicy)
Estimated exposure
mass≈1 billion+ devices ship affected Linux kernel code, though practically triggerable systems are a small subset (mostly NUMA/CXL memory-tiering servers using… — The Linux kernel is deployed on billions of servers, cloud instances, embedded devices and Android phones, and the vulnerable mempolicy code is built into mainstream NUMA-enabled kernels, but exploitation requires a task to use the…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In the Linux kernel, the following vulnerability has been resolved: mm/mempolicy: fix sleeping allocation in alloc_pages_bulk_weighted_interleave() syzbot reported a sleeping function called from invalid context splat in bucket_table_alloc(). When rhashtable_insert_slow() rehashes the table under rcu_read_lock(), it calls bucket_table_alloc(..., GFP_ATOMIC | __GFP_NOWARN). If the bucket table allocation uses vmalloc, __vmalloc_node_range_noprof() invokes vm_area_alloc_pages() -> alloc_pages_bulk_mempolicy_noprof() with the passed GFP_ATOMIC flags. If the current task has an MPOL_WEIGHTED_INTERLEAVE mempolicy, alloc_pages_bulk_weighted_interleave() is called and currently hardcodes GFP_KERNEL when allocating the temporary weights array, triggering a might_alloc() splat in atomic/RCU contexts. Pass the gfp flags (masked with GFP_RECLAIM_MASK to strip page-allocator zone modifiers like __GFP_HIGHMEM) received by alloc_pages_bulk_weighted_interleave() to kmalloc() instead of hardcoding GFP_KERNEL. Since the weights buffer is immediately initialized in full, kmalloc() is sufficient.

Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

In the news

No ingested article mentions this CVE yet.