From mboxrd@z Thu Jan 1 00:00:00 1970 From: AL-KERNEL To: kernel-cve@kernelcve.org 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 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-AL-KERNEL-CVE: CVE-2026-98385 X-AL-KERNEL-Priority: MODERATE 7.0 X-AL-KERNEL-Severity: MODERATE 7.0 X-AL-KERNEL-Base-Severity: MODERATE X-AL-KERNEL-KPANIC: YES X-AL-KERNEL-ActionableScore: 5 X-AL-KERNEL-ActionableScore-Lower: 4 X-AL-KERNEL-Commit: 852ecb6bc0bc0106f44f74ba3944524732486025 List-Id: 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/343a7e07-7fad-4979-9c9b-82ec038c293c@linux.dev/ Reported-by: Hyunwoo Kim Reported-by: Zenghui Yu (Huawei) Co-developed-by: Chen Yu Signed-off-by: Chen Yu Signed-off-by: Tim Chen Signed-off-by: Peter Zijlstra (Intel) Signed-off-by: Ingo Molnar Cc: #7.2.x Link: https://patch.msgid.link/91fd1e3266707c865bc9abecfb3e17bc676712df.1790035273.git.tim.c.chen@linux.intel.com Signed-off-by: Greg Kroah-Hartman 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 alexanjelausa@gmail.com (and both send reply to CVE record itself too and see "reply" button below for howto reply).