Skip to main content

Linux Kernel EUVDEUVD-2026-86795

| CVE-2026-97941 HIGH
2026-09-25 Linux GHSA-jvph-rmf4-fgm6
7.8
CVSS 3.1 · Vendor: Linux
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain local unprivileged shell
  2. Delivery
    Pin racing threads across multiple CPUs
  3. Exploit
    Churn slab alloc/free via msgsnd syscalls
  4. Execution
    Win ABA cmpxchg race in __slab_try_return_freelist
  5. Persist
    Concurrent list_add vs list_del corrupts partial list
  6. Impact
    Kernel panic (denial of service)

Vulnerability Assessment

Exploitation Conditions

Requires local code execution on the host running an affected build (Linux kernel 7.2 before 7.2.7, i.e. only kernels containing regressing commit ba7425312607 - released stable series are not affected). No special privilege beyond an ordinary local account: the demonstrated trigger uses the System V message-queue send path (msgsnd) reachable by unprivileged users, and the crash trace shows UID 65534 (nobody). The practical limiting factor is the race itself - the attacker must win a narrow multi-CPU timing window where one CPU inserts a slab onto pc.slabs outside n->list_lock while another removes it from n->partial, so reliable triggering needs concurrent threads across multiple CPUs. No user interaction and no non-default configuration are required beyond running the vulnerable kernel version.

Impact

This is a slab allocator (mm/slab) ABA race introduced by commit ba7425312607's optimistic __slab_try_return_freelist(). The NVD CVSS of 7.8 (AV:L/AC:L/PR:L/C:H/I:H/A:H) overstates real-world risk on two counts. First, AC:L is inconsistent with the mechanism: the description explicitly frames this as 'a classic ABA problem where cmpxchg succeeds but the state has changed' - a tight cross-CPU race between __refill_objects_node() inserting a slab onto pc.slabs outside n->list_lock and another CPU removing it from n->partial. Winning that window reliably requires precise multi-CPU timing, which is AC:H, not AC:L. Second, the C:H/I:H/A:H impact triad is not supported by the evidence: the only demonstrated outcome is 'list_add corruption' hitting the BUG at lib/list_debug.c:29 followed by 'Kernel panic - not syncing', i.e. a denial-of-service crash. There is no described information leak, so C:H is unjustified and the 'Information Disclosure' tag is a mislabel. While list corruption is in principle a memory-corruption primitive that a skilled attacker could try to shape into escalation, the CVE presents it purely as a crash. On exploitation signals: EPSS is absent, there is no CISA KEV listing, and no public exploit is in the references. The reporter (Hyunwoo Kim) evidently had a private reproducer ('Comm: poc' in the trace), but a private repro is not a public POC and is not active exploitation. No SSVC decision data is provided. Net: a genuine local DoS worth patching on any system actually running the affected kernel, but not the near-critical priority the raw 7.8 implies.

Exploit ScenarioDerived

A local unprivileged user runs a program that spins multiple threads pinned to different CPUs, hammering System V message-queue sends (do_msgsnd → load_msg → security_msg_msg_alloc → __kmalloc) to churn slab allocations and frees so that one CPU is mid-removal of a slab from the partial list while another re-inserts it via the optimistic freelist-return path. Landing the ABA window corrupts the partial list and triggers the list_debug BUG, panicking the kernel. No public exploit code is published; the reporter's proof-of-concept reproducer is referenced in the crash trace but is not available in the provided sources.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 25, 2026

Linux kernel builds in the 7.2 development series contain a regression in the mm/slab allocator that lets an unprivileged local user corrupt the kernel's partial-slab lists by winning a narrow multi-CPU race, resulting in a list_add corruption BUG and a fatal kernel panic (denial of service). The independent assessment rates it CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:H: the attacker needs only an ordinary local account and no user interaction, but must win a tight timing window in which one CPU inserts a slab onto pc.slabs outside n->list_lock while another is removing that slab from n->partial, as demonstrated in the upstream report through the System V message-queue (msgsnd) path running as UID 65534. The issue is not listed in CISA KEV and no public exploit was identified at time of analysis, although the upstream report includes a reproducer trace; vendor fixes are released as stable commits 570a6aaf6b52c6ec098f4811cdb52b1496f13d15 (Linux 7.2.7) and 4a724bcf5d703e18957397914d79156fa2cf1174 (Linux 7.3-rc3).

RemediationAI

Vendor-released patch: upgrade to Linux 7.2.7 or later, or to Linux 7.3-rc3 or later, both of which contain the fix. The stable fix is commit 570a6aaf6b52c6ec098f4811cdb52b1496f13d15 (https://git.kernel.org/stable/c/570a6aaf6b52c6ec098f4811cdb52b1496f13d15) and the 7.3-rc3 fix is commit 4a724bcf5d703e18957397914d79156fa2cf1174 (https://git.kernel.org/stable/c/4a724bcf5d703e18957397914d79156fa2cf1174); downstream distributions should backport one of these rather than the original ba7425312607 commit. If immediate upgrade is not possible, the most direct compensating control is to back out or revert commit ba7425312607 so the allocator returns to the pre-regression path that takes n->list_lock around the slab handoff - the trade-off is losing the optimistic fast-path optimization (a modest allocator performance regression) in exchange for eliminating the corruptible window. Because the race requires concurrent execution across multiple CPUs by a local account, absorbing the risk by restricting who can run arbitrary local code on affected hosts (disabling untrusted multi-tenant workloads or non-essential local logins) reduces the practical attack surface, but it is not a complete mitigation and does not address the underlying list corruption; there is no simple way to disable the System V message-queue path that the reproducer uses without breaking legitimate IPC. Kernel boot parameters and runtime configuration options do not remove this window, so patching or reverting is the only reliable remediation; the advisory pages at https://nvd.nist.gov/vuln/detail/CVE-2026-97941 and the EUVD entry EUVD-2026-86795 should be tracked for updates.

Affected VersionsENISA

Linux 7.2
Linux patch: 7.2.7
Linux patch: 7.3-rc3
Linux patch: 0
Linux ba742531260782a2646bc031f9a12cafebc22594 <4a724bcf5d703e18957397914d79156fa2cf1174
Linux ba742531260782a2646bc031f9a12cafebc22594 <570a6aaf6b52c6ec098f4811cdb52b1496f13d15

Affected Packages

euvd linux no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The flaw lives in the Linux memory-management slab allocator (mm/slab), specifically in the optimistic fast path introduced by commit ba7425312607 that added __slab_try_return_freelist(). That code assumed that if slab->freelist was NULL and a cmpxchg succeeded, no other CPU could have concurrently freed an object back to the slab. That assumption is wrong: another CPU can free an object, insert the slab into the per-node partial list, allocate from it again, and be removing it from that list under n->list_lock while __refill_objects_node() places the slab back onto the per-CPU pc.slabs list outside n->list_lock. Because the two list manipulations are not serialized by the same lock, the slab can be added to pc.slabs while it is simultaneously being unlinked from n->partial - a classic ABA problem where the cmpxchg succeeds even though the underlying state has since changed. The result is list corruption detected by lib/list_debug.c and an invalid-opcode kernel BUG with a panic, reachable from alloc_from_new_slab() / ___slab_alloc() and the kmalloc path used by LSM blob allocation for message-queue operations. The upstream fix restores the earlier approach of returning the slab directly to the partial list while holding n->list_lock across both the cmpxchg and add_partial(), serializing the list manipulation; the CWE field is unassigned in the source data, but the root-cause class is a concurrency race (improper synchronization of shared list state), not a memory-safety bug in the usual sense.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Linux) PRIMARY 7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 5.3 MEDIUM

Local unprivileged trigger (AV:L/PR:L); tight cross-CPU ABA race gives AC:H; demonstrated impact is a panic (A:H) with only incidental corruption (I:L) and no disclosure (C:N).

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:H
4.0 AV:L/AC:H/AT:N/PR:L/UI:N/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N
SUSE 5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
Red Hat 5.5 MEDIUM

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

4
CVSS changed
Sep 25, 2026 - 15:22 NVD
7.8 (HIGH)
Patch available
Sep 25, 2026 - 11:02 EUVD
CVE Published
Sep 25, 2026 - 10:22 cve.org
HIGH 7.8
CVE Published
Sep 25, 2026 - 10:22 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

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

mm/slab: take n->list_lock in __slab_try_return_freelist() to avoid race

Commit ba7425312607 ("mm, slab: add an optimistic __slab_try_return_freelist()") incorrectly assumed that nobody has freed an object to the slab as long as slab->freelist is NULL and cmpxchg succeeds.

However, as reported by Hyunwoo Kim [1], other CPUs might have freed an object to the slab, insert the slab to the partial list, then allocated an object from the slab, and be in the middle of removing the slab from the list under n->list_lock.

Since __refill_objects_node() puts the slab back on pc.slabs outside n->list_lock, it might insert the slab into that list while the slab is concurrently being removed from n->partial. This led to a list corruption [1]:

list_add corruption. next->prev should be prev (ffff888100000248), but was dead000000000122. (next=ffffea000416e410). kernel BUG at lib/list_debug.c:29! Oops: invalid opcode: 0000 [#1] SMP NOPTI CPU: 1 UID: 65534 PID: 144 Comm: poc Not tainted 7.2.0-16172-gcf72cbb39da8-dirty #1 PREEMPT(lazy) RIP: 0010:__list_add_valid_or_report+0x80/0xd0 ... Call Trace: alloc_from_new_slab+0x183/0x300 ___slab_alloc+0x31c/0x890 __kmalloc_noprof+0x3d4/0x800 lsm_blob_alloc+0x2d/0x50 security_msg_msg_alloc+0x26/0x90 load_msg+0x1aa/0x210 do_msgsnd+0x91/0x800 do_syscall_64+0x109/0x5d0 entry_SYSCALL_64_after_hwframe+0x77/0x7f ... Kernel panic - not syncing: Fatal exception

This is a classic ABA problem where cmpxchg succeeds but the state has changed since __refill_objects_node() took the freelist from the slab.

As Vlastimil Babka mentioned [2], it should be rare to return more than one slab (due to the racy read of slab->counters in get_partial_node_bulk()). Therefore, instead of introducing additional complexity, acquire and release n->list_lock twice in the worst case.

Return the slab directly to the partial list and hold n->list_lock across the cmpxchg and add_partial(). This is similar to the initial version of commit ba7425312607 [3]. This is enough to avoid the race as the list manipulation is serialized by n->list_lock. While at it, bring back unlikely() hint now that the condition is unlikely.

Executive ViewAI

Why It Matters

Linux kernel 7.2 development-series builds contain an allocator regression that can let an authenticated local user crash the kernel, causing a denial-of-service condition on affected hosts. The issue is rated high severity, requires only a local account and a difficult timing race, and has no public exploit identified at time of analysis; vendor fixes are available in Linux 7.2.7. Organizations running these development kernels, particularly multi-user or production-adjacent systems, should treat this as a patch-priority availability risk and migrate to fixed builds.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 96% exploitable
Prevalence
Low
core mm/slab code, but vulnerable window is only bleeding-edge kernel 7.2
Data Quality
3 sources
Confidence: Low

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact
Medium

Priority Score

39
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +39
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 16.0 Not-Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy