From: AL-KERNEL <[email protected]>
To: [email protected]
Subject: [CVE-2026-98385][MODERATE 7.0] sched/cache: Decouple sched_cache_group from mm to fix UAF
Date: Mon, 12 Oct 2026 04:20:56 -0400 [thread overview]
Message-ID: <[email protected]> (raw)
CVE: CVE-2026-98385
Priority: MODERATE 7.0
AL-KERNEL base severity: MODERATE
KPANIC flag: YES
Patch: sched/cache: Decouple sched_cache_group from mm to fix UAF
Commit: 852ecb6bc0bc0106f44f74ba3944524732486025
Upstream patch: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=852ecb6bc0bc0106f44f74ba3944524732486025
Original CVE announcement: https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-98385
Analysis date: Mon, 12 Oct 2026 04:20:56 -0400
ActionableScore: 5
ActionableScore lower bound: 4
Actionable bucket: Actionable Moderate / Strong Important candidate requiring manual review
Manual review required: YES
Summary:
No one-sentence report phrase was found.
======================================================================
ABOUT THIS REPORT
======================================================================
The original Linux kernel CVE announcement for CVE-2026-98385 is available here:
https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-98385
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-98385 MODERATE https://www.kernelcve.org/list/?q=CVE-2026-98385 CHECK WITH IMPACT FROM ORIG NN MODERATE | AEGIS IMPACT MODERATE_KPANIC AEGIS_AS=4 LEGACY=MODERATE_KPANIC RESULT=SAME (legacy and Aegis reconciliation agree; DECISION: both MODERATE_KPANIC) Maybe valid. Check manually. Hints by AL-KERNEL: The best (paranoid) CVSS is 'AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H';*CWE-416;CWE-362;*CWE-664;Other CVSS 'AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H';BEST CVSS score: '7';DESCR 'A race in scheduler cache accounting can access task mm scheduling statistics while another CPU replaces or releases the same mm. This creates a confirmed use-after-free of kernel memory because account_mm_sched can continue using statistics embedded in an already freed mm_struct. The demonstrated impact is at least a local denial of service through a kernel crash or corrupted scheduler state. In the worst defensible case the stale kernel object may be reused and the UAF may permit confidentiality or integrity impact or local privilege escalation, although a controlled reuse or write primitive is not demonstrated. For the CVSS the PR:L value is used because a local unprivileged user process can potentially exercise process and address space lifecycle operations needed to reach the race. AC:H is used because successful triggering depends on an inter CPU timing window. The issue is not network reachable and requires CONFIG_SCHED_CACHE or the affected scheduler cache functionality to be active.';YES REQUIRES MANUAL CHECK; ,and ActionableScore result is Actionable Moderate / Strong Important candidate requiring manual review (with actual score 5) MAYBE OOB INIT UAF HARDWARE TEST KPANIC INCREASED_TO_HIGH_BASED_ON_GUESSCVSS DECREASED_TO_MODERATE7_BASED_ON_FALSEPOSCHECKOFDH - - checked
======================================================================
ACTIONABLESCORE ANALYSIS
======================================================================
ActionableScore=5
ActionableScoreLower=4
PrimitiveClass=CLASS_B
RealUAF=YES
HostAdminRequired=NO
NamespaceScopedPrivilege=NO
ImportantCandidate=YES
ManualReview=REQUIRED
AutoDowngradeAllowed=NO
RequiresHostUID0=NO
AuthorizationDecisionBypass=NO
ProtectedResourceImpact=NONE
B4PendingReview=NO
B4PendingConfirmed=NO
1. ActionableScore
* Raw conservative score: 4
* Conservative score: 4
* Raw paranoid score: 5
* Paranoid score: 5
* The Real UAF floor 4 was checked but did not change the conservative score.
* No cap was applied.
* Final recommended bucket: **Actionable Moderate / Strong Important candidate requiring manual review**::
2. Signal breakdown
Conservative signals:
* +2 Real UAF. `account_mm_sched()` can access scheduling statistics embedded in an old `mm_struct` after another CPU switches the task to a new mm and releases the old mm. The KASAN finding and commit description directly establish post-lifetime access.
* +1 Local unprivileged trigger. Normal process address-space replacement and termination are available to an ordinary local process without host-administrator privileges.
* +1 Realistic kernel crash or strong DoS. Access to a freed `mm_struct` from scheduler accounting can produce a KASAN fault, kernel Oops, or corrupted scheduler state.
Paranoid-only signal:
* +1 Attacker-influenced repeatable lifetime manipulation. A local process can repeatedly create, replace, and destroy address spaces while scheduler accounting runs on other CPUs, providing a technically defensible repeated opportunity to reach the stale access.
No negative points:
* No race penalty was applied. The evidence confirms a cross-CPU race but does not establish a narrow, one-shot, externally uncontrollable timing window.
* No host-administrator penalty was applied because the relevant mm lifecycle can be exercised by ordinary processes.
* No rare-subsystem penalty was applied. `CONFIG_SCHED_CACHE` is a prerequisite, but the supplied evidence does not establish that the enabled path is both rare and difficult to reach.
Important non-awarded signals:
* Controlled reclaim or attacker-shaped replacement contents are not demonstrated.
* Arbitrary or directed kernel write is not demonstrated.
* Structured stale-object leverage was not separately awarded because the supplied excerpt does not show exploitation-relevant consumption of reclaimed fields.
* Weak or strong LPE leverage was not awarded merely because this is a scheduler UAF.
* Confidentiality and integrity points were not awarded. The paranoid CVSS values do not independently establish disclosure, arbitrary modification, or privilege escalation.
* No extra Availability point was awarded for the same potential kernel crash.
* Remote reachability is not established.
* No concrete repeated release or refcount operation exists. The fix introduces independent reference counting, but the vulnerable operation is stale access rather than a second `put`, `free`, or refcount mutation.
* The first relevant lifetime event can free the old `mm_struct`, but the stale scheduler path does not itself perform a second release on that exact reference.
* Concrete repeated release/refcount +1 was not awarded.
* Paranoid repeated-refcount leverage +1 was not awarded.
* Floor 5 was not applied through the repeated-release rule. The paranoid score reaches 5 through repeatable attacker-influenced mm lifetime transitions instead.
3. Reachability analysis
An ordinary local process can drive address-space lifecycle transitions through normal process operations such as execution and exit while scheduler accounting occurs concurrently. No capability, host UID 0, or administrative control-plane operation is identified as necessary for that process-level trigger.
The vulnerable sequence is a cross-CPU interaction. One CPU switches or releases the task mm while another CPU executes `account_mm_sched()` using the old `task->mm->sc_stat`. Repeated process and workload activity can provide multiple opportunities to reach the race, although reliable exploitation timing is not demonstrated.
`CONFIG_SCHED_CACHE` or the affected scheduler-cache feature must be enabled. This is a build or deployment prerequisite, not evidence that the attacker needs prior privileged setup. No special hardware, network exposure, sysctl change, namespace capability, or device assignment is identified.
The complete operation does not depend on a namespace-scoped capability, so `NamespaceScopedPrivilege=NO`. It is local rather than network-triggerable.
4. Primitive and severity interpretation
The exact primitive is a cross-CPU use-after-free of an old `mm_struct` and its embedded `sched_cache_stat`. The scheduler accounting path may continue accessing that state after the old mm lifetime has ended.
This is an active structured-object UAF, not fixed stale storage and not a cleanup-only destructor fault. The stale access occurs in active scheduler accounting. However, the supplied evidence does not establish controlled slab reuse, attacker-shaped replacement contents, callback consumption, arbitrary read or write, or a completed privilege-escalation chain.
There is no concrete repeated release/refcount operation. The vulnerable path differs from a double-put case because it accesses stale scheduling state rather than performing a second lifetime mutation through the dangling reference.
The primitive is therefore CLASS_B. The demonstrated consequence is kernel memory-safety failure with realistic crash or scheduler-state corruption. Privilege escalation remains a theoretical consequence requiring additional evidence.
`ImportantCandidate=YES` because this is a below-host-admin active scheduler UAF with repeatable lifecycle influence, and meaningful post-reuse behavior remains unresolved. `AutoDowngradeAllowed=NO` because automatically treating it as an ordinary crash-only issue could discard unresolved exploitation potential in an active kernel accounting path. The evidence does not yet justify CLASS_A or a score of 7 or higher.
The NEW52 B5-R profile does not apply because no retry-accumulated heap OOB write is present. NEW53 B3-PENDING does not apply because no shared-backing write is present. NEW54 and NEW55 authorization profiles do not apply because no authorization decision changes from DENY to ALLOW.
5. One-sentence report phrase
A cross-CPU race allows scheduler cache accounting to access an already freed mm scheduling object, creating a local unprivileged active-object UAF with demonstrated crash potential and unresolved post-reuse exploitation leverage.
6. Manual review recommendation
MANUAL CHECK REQUIRED
The confirmed active scheduler UAF is reachable through ordinary process lifecycle activity, while controlled reuse and privilege-escalation potential cannot be resolved from the supplied patch excerpt.
7. Call-site confidence
Call-site confidence: medium
======================================================================
UPSTREAM PATCH SUMMARY
======================================================================
Patch: sched/cache: Decouple sched_cache_group from mm to fix UAF
Commit: 852ecb6bc0bc0106f44f74ba3944524732486025
Upstream URL: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=852ecb6bc0bc0106f44f74ba3944524732486025
Commit description:
Currently the sched cache grouping is by mm and the scheduling statistics
sched_cache_stat lives in the mm structure. This ties the life cycle
of scheduling stats with mm.
In account_mm_sched(), the scheduling stats are accessed by
task->mm->sc_stat. However, a task may be switching mm on one CPU when
another CPU is running account_mm_sched(), and possibly accessing the
old mm that was freed. This problem was found when running tests with
KASAN by Hyunwoo:
https://lore.kernel.org/lkml/apPb-Dr4nPYuHQOK@v4bel/
Instead of serializing the mm access by introducing extra acquisition of
rq lock in the mm free path, extract sched_cache_stat from mm_struct,
rename it as sched_cache_group and manage its life cycle apart from
mm_struct with its own ref counting. This allows us in the next patch
access sched_cache_group directly from task, and add a refcount
on sched_cache_group when a task links to it. This prevents the use
after free issue when accessing stale and released old mm and its
sched cache stat a task switches to a new mm while account_mm_sched()
is done elsewhere.
The other benefit of this restructure is in the future, the grouping of
tasks to a LLC would have the flexibility to be associated with a user
defined grouping, or cgroup, cookie group, numa_group or others instead
of just with a single mm address space.
Rename sched_cache_stat to sched_cache_group and turn it into a refcounted
object allocated from mm_struct. The mm_struct now holds a pointer
(sched_cache_grp) to this object instead of embedding it.
Fixes: df0d984 ("sched/cache: Introduce infrastructure for cache-aware load balancing")
Closes: https://lore.kernel.org/lkml/apPb-Dr4nPYuHQOK@v4bel/
Closes: https://lore.kernel.org/all/[email protected]/
Reported-by: Hyunwoo Kim <[email protected]>
Reported-by: Zenghui Yu (Huawei) <[email protected]>
Co-developed-by: Chen Yu <[email protected]>
Signed-off-by: Chen Yu <[email protected]>
Signed-off-by: Tim Chen <[email protected]>
Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Signed-off-by: Ingo Molnar <[email protected]>
Cc: <[email protected]> #7.2.x
Link: https://patch.msgid.link/91fd1e3266707c865bc9abecfb3e17bc676712df.1790035273.git.tim.c.chen@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Changed files:
include/linux/mm_types.h
include/linux/sched.h
kernel/exit.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=852ecb6bc0bc0106f44f74ba3944524732486025
======================================================================
DETAILED REPORT METHODOLOGY
======================================================================
The original Linux kernel CVE announcement for CVE-2026-98385 can be found here:
https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-98385
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:H/I:H/A:H
The Best / paranoid CVSS score: 7
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: 4
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: YES
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).
reply other threads:[~2026-10-12 8:20 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --from, and --in-reply-to
switches of git-send-email(1) and next cmd tested by kernelcve.org admin:
git send-email --smtp-server=mail.kernelcve.org --smtp-server-port=25 --smtp-auth=none --from='Your Name <youremail@domain.is>' --suppress-cc=all --no-cc \
--in-reply-to=cve-2026-98385.30ba13d9a4ef6d1d77e8500b@kernelcve.org \
[email protected] \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
The file with msg could look like this then:
cat YOUR_REPLY
Subject: Re: [CVE-2026-64206][MODERATE REGULAR] Bluetooth: L2CAP test
Just testing public-inbox replies.
Thanks,
MyName
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox