* [CVE-2026-74576][MODERATE 7.0] mm/slab: prevent unbounded recursion in free path with new kmalloc type
@ 2026-08-15 19:13 AL-KERNEL
0 siblings, 0 replies; only message in thread
From: AL-KERNEL @ 2026-08-15 19:13 UTC (permalink / raw)
To: kernel-cve
CVE: CVE-2026-74576
Priority: MODERATE 7.0
AL-KERNEL base severity: MODERATE
KPANIC flag: NO
Patch: mm/slab: prevent unbounded recursion in free path with new kmalloc type
Commit: 3e71bfbdd3fd81ee9fefd867fdb2be62bade4140
Upstream patch: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=3e71bfbdd3fd81ee9fefd867fdb2be62bade4140
Original CVE announcement: https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-74576
Analysis date: Sat, 15 Aug 2026 15:13:10 -0400
ActionableScore: 5
ActionableScore lower bound: 3
Actionable bucket: Actionable Moderate at minimum
Manual review required: YES
Summary:
A local allocation pattern can cause cyclic SLUB obj_exts ownership between kmalloc caches, leading to unbounded recursion in the free path and kernel stack overflow, with realistic DoS impact and weak memory-safety concern requiring review.
======================================================================
ABOUT THIS REPORT
======================================================================
The original Linux kernel CVE announcement for CVE-2026-74576 is available here:
https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-74576
The original announcement does not normally provide a security severity
estimate, CVSS assessment, or enough information to determine whether the
reported kernel bug represents a practically relevant security issue.
This report was generated by AL-KERNEL, an AI-assisted Linux kernel
vulnerability analysis system developed by Alexander Larkin. It combines
an autonomous classifier with LLM-assisted technical analysis and a
separate ActionableScore mechanism.
The purpose of this report is to prioritize Linux kernel CVEs before
manual review, identify cases that require prompt investigation, and
support automatic closure of issues that are unlikely to have meaningful
security impact.
Published priority for this report: MODERATE 7.0
Manual review required: YES
A detailed explanation of the methodology and priority rules is included
at the end of this message.
======================================================================
AL-KERNEL CLASSIFICATION RESULT
======================================================================
CVE-2026-74576 MODERATE CHECK WITH IMPACT FROM ORIG NN MODERATE Maybe valid. Check manually. Hints by AL-KERNEL: The best (paranoid) CVSS is 'AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:H';CWE-674;**CWE-400;CWE-770;Other CVSS 'AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H';BEST CVSS score: '5.8';DESCR 'A stack overflow in the SLUB free path can occur when slab object extension arrays for normal kmalloc caches are allocated from other normal kmalloc caches in a cycle. Freeing one slab can free the other slabs obj_exts array and recursively enter kfree and __free_slab until the kernel task stack is exhausted. For the CVSS the PR:L is used because a local unprivileged process may be able to drive allocation and free patterns, although reliable triggering depends on CONFIG_SLAB_OBJ_EXT, memory allocation profiling, slab geometry, and workload timing. The issue is not directly network reachable, but remote services could be an indirect trigger only if they can force the affected allocation and free pattern on a vulnerable host. Impact is at least denial of service via kernel crash. A limited confidentiality or integrity impact is kept only in the paranoid score because stack exhaustion in core memory management is safety sensitive, but no arbitrary write or information leak primitive is evident from the patch. YES REQUIRES MANUAL CHECK';YES REQUIRES MANUAL CHECK; ,and ActionableScore result is Actionable Moderate at minimum (with actual score 4) SKIP CVE-2026-74576 UNKNOWN SKIP The Fixes patch not applied yet, so unlikely that actual: 4b8736964640fe160724e7135dc62883bddcdace YES NO NO unknown MAYBE OOB DANGER UAF LINUS DECREASED_TO_MODERATEREG_BASED_ON_ACTIONABLESCORELESSTHAN5 - - checked
======================================================================
ACTIONABLESCORE ANALYSIS
======================================================================
ActionableScore=5
ActionableScoreLower=3
## 1. ActionableScore
* Conservative score: 3
* Paranoid score: 5
* Final recommended bucket: **Actionable Moderate at minimum**::
## 2. Signal breakdown
Conservative signals:
* Local unprivileged trigger: +1
A local process may be able to influence kmalloc allocation and free patterns through ordinary kernel allocation activity, although reliable shaping is workload and configuration dependent.
* Memory corruption, weak/indirect corruption candidate: +1
The concrete primitive is unbounded kernel stack recursion ending in stack guard page hit / Oops, not an arbitrary write or controlled UAF. This is memory-safety sensitive but not a strong corruption primitive.
* Reliable kernel crash / strong DoS: +1
The commit describes a real production stack overflow with repeated `__free_slab()` and `kfree()` recursion.
* Broad/default/common subsystem or broadly deployed exposure: +1
The affected code is in the core SLUB / kmalloc allocator free path.
* Rare AND difficult-to-reach subsystem/configuration: -1
Triggering requires `CONFIG_SLAB_OBJ_EXT` and memory allocation profiling / accounting conditions that allow obj_exts arrays to be allocated in the problematic way.
Paranoid additional signals:
* Weak LPE concern: +1
Kernel stack exhaustion in the core allocator is safety-sensitive and deserves manual review, but there is no demonstrated reclaim, overwrite, callback control, type confusion, or arbitrary write.
* Availability impact realistic: +1
The observed failure is a production kernel stack overflow and can be system-wide depending on panic/oops policy and affected workload.
## 3. Reachability analysis
The bug is local in practical terms. It is not directly network reachable. A remote service could only be an indirect trigger if it can reliably force the affected allocation and free pattern on a vulnerable host.
No administrator capability is inherently required to cause kernel allocations, so PR:L is plausible for triage. However, reliable triggering depends on kernel configuration, memory allocation profiling, slab geometry, and workload behavior.
Namespaces and containers may help an attacker generate allocation pressure, but the patch does not show a container escape or explicit namespace boundary bypass.
Call-site confidence: medium. The patch directly shows the allocator free path and the recursive chain described in the commit message, but exploitability still depends on runtime allocation patterns.
## 4. Severity interpretation
This behaves more like an actionable Moderate than an ordinary Low/Moderate cleanup because it affects the core allocator and produced a real kernel stack overflow in production.
Realistic demonstrated impact is DoS through kernel Oops / stack exhaustion. Theoretical memory-corruption concern exists because the failure occurs in core memory management, but the patch does not show attacker-controlled overwrite, UAF reclaim, arbitrary write, type confusion, or information disclosure.
This should not be treated as a Strong Important candidate without more evidence, but it should not be auto-closed as a low-risk resource issue either.
## 5. One-sentence report phrase
A local allocation pattern can cause cyclic SLUB obj_exts ownership between kmalloc caches, leading to unbounded recursion in the free path and kernel stack overflow, with realistic DoS impact and weak memory-safety concern requiring review.
## 6. Manual review recommendation
MANUAL CHECK REQUIRED
Manual review is required because the bug is in the core allocator free path, causes a real production stack overflow, and has weak but nonzero memory-safety escalation concern even though the demonstrated impact is DoS.
======================================================================
UPSTREAM PATCH SUMMARY
======================================================================
Patch: mm/slab: prevent unbounded recursion in free path with new kmalloc type
Commit: 3e71bfbdd3fd81ee9fefd867fdb2be62bade4140
Upstream URL: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=3e71bfbdd3fd81ee9fefd867fdb2be62bade4140
Commit description:
Commit 280ea9c ("mm/slab: avoid allocating slabobj_ext array from
its own slab") avoided recursive allocation of obj_exts from kmalloc
caches of the same size, by bumping the obj_exts array's allocation
size whenever the array size equals the size of the object being
allocated.
However, as reported by Danielle Costantino and Shakeel Butt,
even slabs from kmalloc caches of different sizes can form a cycle
by allocating obj_exts arrays from each other [1]:
What happened: a KMALLOC_NORMAL slab's obj_exts array (used by
allocation profiling / memcg accounting) is itself kmalloc()'d from a
KMALLOC_NORMAL cache, so the "slab holds another slab's obj_exts array"
relation can form cycles. With sizeof(struct slabobj_ext) == 16 and
the host's geometry:
- kmalloc-512 has 64 objects/slab -> array is 64*16 == 1024 bytes,
served from kmalloc-1k;
- kmalloc-1k has 32 objects/slab -> array is 32*16 == 512 bytes,
served from kmalloc-512.
A kmalloc-512 slab and a kmalloc-1k slab therefore hold each other's
obj_exts array. Discarding one frees the other's array, which empties
and discards that slab, which frees the first's array, and so on:
__free_slab() -> free_slab_obj_exts() -> kfree() -> discard_slab() ->
__free_slab() recurses along the cycle until the stack is exhausted.
With memory allocation profiling, this allows unbounded recursion
in the free path and led to a stack overflow on a production host in
the Meta fleet [1]:
BUG: TASK stack guard page was hit
Oops: stack guard page
RIP: 0010:kfree+0x8/0x5d0
Call Trace:
__free_slab+0x66/0xc0
kfree+0x3f0/0x5d0
... ( ~125x __free_slab <-> kfree ) ...
<kernel driver freeing a resource>
do_syscall_64
It is proposed [1] to resolve this issue by always serving the obj_exts
array allocation from kmalloc caches (or large kmalloc) of sizes larger
than the object size. However, as pointed out by Vlastimil Babka [2],
this can waste an excessive amount of memory as slabs from large
kmalloc sizes (e.g. kmalloc-8k) generally need obj_exts arrays much
smaller than the object size.
Therefore, rather than bumping the size, let us take a different
approach; disallow formation of cycles between kmalloc types when
allocating obj_exts arrays. Currently, all obj_exts arrays are served
from normal kmalloc caches. Cycles cannot be created if obj_exts arrays
of normal kmalloc caches are served from a special kmalloc type that can
never have obj_exts arrays.
To achieve this, create a new kmalloc type called KMALLOC_NO_OBJ_EXT.
KMALLOC_NO_OBJ_EXT caches are created with SLAB_NO_OBJ_EXT flag when
either 1) memory allocation profiling is not permanently disabled,
or 2) kmalloc types with a priority higher than KMALLOC_CGROUP are
aliased with KMALLOC_NORMAL.
Sheaf bootstrapping for KMALLOC_NO_OBJ_EXT caches now must be deferred
because allocation of a barn can trigger obj_exts array allocation of
normal kmalloc caches when the KMALLOC_NO_OBJ_EXT cache for that size
is not ready yet. For simplicity, perform bootstrapping of sheaves for
all kmalloc caches later.
Introduce a new slab alloc flag, SLAB_ALLOC_NO_OBJ_EXT, to prevent
allocation of obj_exts arrays, and let kmalloc_slab() override the type
to KMALLOC_NO_OBJ_EXT when specified. Note that kmalloc_type() remains
unchanged because kmalloc_flags() bypasses the kmalloc fastpath.
Do not pass SLAB_ALLOC_NO_RECURSE to kmalloc_flags() in
alloc_slab_obj_exts() and instead use SLAB_ALLOC_NO_OBJ_EXT only when
the objects are allocated from normal kmalloc caches. While this
prevents unbounded recursive allocation of obj_exts, it allows
KMALLOC_NO_OBJ_EXT caches to have sheaves.
Since sheaf allocations specify SLAB_ALLOC_NO_RECURSE that prevents
allocation of both sheaves and obj_exts arrays, the recursion depth
[Commit description truncated; see the upstream URL below]
Changed files:
mm/20260625230029.703750-1-shakeel.butt
include/linux/slab.h
mm/slab.h
mm/slab_common.c
mm/slub.c
Diff excerpt:
Not included in this email. See the upstream URL for the full patch.
Full patch:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=3e71bfbdd3fd81ee9fefd867fdb2be62bade4140
======================================================================
DETAILED REPORT METHODOLOGY
======================================================================
The original Linux kernel CVE announcement for CVE-2026-74576 can be found here:
https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-74576
The original CVE announcement normally does not include a security-level
estimate. In particular, it may not contain a CVSS assessment, an impact
level, or enough information to determine whether the reported bug is a
practically relevant security issue. One purpose of this parallel CVE list
is to provide that missing technical and prioritization information.
The original goal of the AL-KERNEL project was to prioritize Linux kernel
CVE analysis automatically before manual review. The system can also help
identify non-security issues that may be suitable for automatic closure.
This report was generated by AL-KERNEL, an AI-assisted Linux kernel
vulnerability analysis system developed by Alexander Larkin.
The first analysis stage combines an autonomous classifier with additional
LLM-based analysis. The autonomous classifier runs locally on a CPU and is
based on a backpropagation neural network. Together, these mechanisms
produce a technical vulnerability description, identify likely weakness
types, estimate CVSS severity, and provide input for ActionableScore.
Two CVSS estimates are retained because incomplete kernel vulnerability
information often permits more than one defensible interpretation:
Conservative CVSS vector: AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H
The Best / paranoid CVSS vector: AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:H
The Best / paranoid CVSS score: 5.8
The conservative vector represents a lower-impact interpretation.
The Best/paranoid vector intentionally represents a plausible upper-bound
interpretation and should not automatically be treated as demonstrated
real-world impact.
CVSS may also need to be adjusted for a particular Linux deployment,
because actual reachability, privileges, enabled kernel configuration,
hardware, namespaces, exposed device nodes, and other environmental
conditions can differ significantly between systems.
A separate ActionableScore mechanism evaluates practical remediation
urgency. Its analysis may include reachability, attack prerequisites,
subsystem exposure, memory-corruption characteristics, denial-of-service
reliability, and possible confidentiality, integrity, or
privilege-escalation impact.
Conservative ActionableScore: 3
Paranoid ActionableScore: 5
The final base severity is taken directly from the second tab-separated
field of the AL-KERNEL classification result. ActionableScore does not
replace or independently override that final AL-KERNEL decision, and
if ActionableScore adjusted impact level of ALKERNEL, then you would see
self-readable flags above like INCREASED_TO_HIGH_BASED_ON_ACTIONABLESCOREHIGHEREQTHAN7.
For an AL-KERNEL result of MODERATE, this report uses the following
additional presentation split:
ActionableScore below 5 -> MODERATE REGULAR
ActionableScore 5 or more -> MODERATE 7.0
The distinction between MODERATE REGULAR and MODERATE 7.0 makes it
possible to identify Moderate issues that should receive manual analysis
and fixes before lower-priority MODERATE REGULAR issues. In many cases,
MODERATE REGULAR fixes may wait for a later rebase or routine update.
There is one override in which MODERATE REGULAR becomes MODERATE 7.0
even when the ActionableScore is below 5. When the AL-KERNEL result
contains the KPANIC flag, a MODERATE result is always presented as
MODERATE 7.0. The KPANIC flag selected with few regexps without
usage of AI at all, so it helps to detect cases when Kernel Crash happens
and similar (to filter False-Negative results from the LLM usage).
KPANIC indicates that a reliable kernel crash, kernel panic, or similarly
serious kernel availability impact was identified by the classification
workflow.
AL-KERNEL base severity for this report: MODERATE
KPANIC detected for this report: NO
Published priority for this report (same as in Subject): MODERATE 7.0
These results are intended to support engineering triage. They are
machine-generated estimates, and cases marked for manual review should
be validated by a human security engineer before final disposition.
For more info read docs linked from here: https://kernelcve.org/
(and you can submit you own patch there to generate such a report
for non-existant CVE-id yet).
Note that in many cases this AI tool selects higher severity, than
real is (means you can expect Importants instead of Moderate 7.0 or
Moderates 7.0 instead of regular Moderates). If you see such cases,
please use reply email interface to add additional manual analyses
info to this particular CVE.
And please, please, let me know when you see Lows instead of Importants
or Important instead of Low (because particular for such cases I
need to tune this AI tool to make it better for this one and next similar).
My contact email for such notifications is [email protected] (and both
send reply to CVE record itself too and see "reply" button below for howto reply).
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-08-15 19:13 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-15 19:13 [CVE-2026-74576][MODERATE 7.0] mm/slab: prevent unbounded recursion in free path with new kmalloc type AL-KERNEL
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox