From mboxrd@z Thu Jan 1 00:00:00 1970 From: AL-KERNEL To: kernel-cve@kernelcve.org Subject: [CVE-2026-97921][LOW] tracing: Free histogram the field rejected for a bad modifier Date: Sat, 26 Sep 2026 14:14:06 -0400 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-AL-KERNEL-CVE: CVE-2026-97921 X-AL-KERNEL-Priority: LOW X-AL-KERNEL-Severity: LOW X-AL-KERNEL-Base-Severity: LOW X-AL-KERNEL-KPANIC: NO X-AL-KERNEL-ActionableScore: 2 X-AL-KERNEL-ActionableScore-Lower: 1 X-AL-KERNEL-Commit: e787361bb6b0026ea3eb4d3fa7a304c7fcb99555 List-Id: CVE: CVE-2026-97921 Priority: LOW AL-KERNEL base severity: LOW KPANIC flag: NO Patch: tracing: Free histogram the field rejected for a bad modifier Commit: e787361bb6b0026ea3eb4d3fa7a304c7fcb99555 Upstream patch: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=e787361bb6b0026ea3eb4d3fa7a304c7fcb99555 Original CVE announcement: https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-97921 Analysis date: Sat, 26 Sep 2026 14:14:06 -0400 ActionableScore: 2 ActionableScore lower bound: 1 Actionable bucket: Ordinary Moderate Manual review required: NO Summary: No one-sentence report phrase was found. ====================================================================== ABOUT THIS REPORT ====================================================================== The original Linux kernel CVE announcement for CVE-2026-97921 is available here: https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-97921 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: LOW Manual review required: NO A detailed explanation of the methodology and priority rules is included at the end of this message. ====================================================================== AL-KERNEL CLASSIFICATION RESULT ====================================================================== CVE-2026-97921 LOW https://www.kernelcve.org/list/?q=CVE-2026-97921 CHECK WITH IMPACT FROM ORIG NN IMPORTANT Maybe valid. Check manually. Hints by AL-KERNEL: The best (paranoid) CVSS is 'AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H';*CWE-401;*CWE-772;**CWE-400;Other CVSS 'AV:L/AC:L/PR:H/UI:N/S:U/C:N/I:N/A:L';BEST CVSS score: '5.5';DESCR 'A memory leak occurs when tracing histogram parsing creates a field for a value or variable with a forbidden modifier and then rejects it before storing the field in hist_data fields. The normal histogram cleanup path cannot reach that allocation, so repeated invalid trigger writes can steadily consume kernel memory. A single or small number of writes has limited availability impact, while sustained abuse may eventually cause memory pressure or denial of service. For the CVSS the PR:L value is used for the paranoid score because some deployments may delegate write access to tracefs trigger files to a restricted local service or user, although typical systems require administrative tracing privileges. The issue is local and is not network reachable. There is no UAF, OOB access, information disclosure, or write primitive that would support confidentiality impact, integrity impact, or privilege escalation.';NO MANUAL CHECK; ,and ActionableScore result is Ordinary Moderate (with actual score 2) SKIP CVE-2026-97921 UNKNOWN SKIP The Fixes patch not applied yet, so unlikely that actual: url YES NO NO unknown MAYBE TRACE LEAK UAF IMPROVEONLY LINUS LOWERED_FROM_HIGH_BASED_ON_GUESSCVSS DECREASED_TO_MODERATEREG_BASED_ON_ACTIONABLESCORELESSTHAN4 DECREASED_TO_LOW_FROM_MODERATE_BASED_ON_ACTIONABLESCORELESSTHAN3 - - checked ====================================================================== ACTIONABLESCORE ANALYSIS ====================================================================== ActionableScore=2 ActionableScoreLower=1 PrimitiveClass=NONE RealUAF=NO HostAdminRequired=UNKNOWN NamespaceScopedPrivilege=UNKNOWN ImportantCandidate=NO ManualReview=NO AutoDowngradeAllowed=YES 1. ActionableScore * Raw conservative score: 1. * Conservative score: 1. No floor or cap applied. * Raw paranoid score: 2. * Paranoid score: 2. No floor or cap applied. * Final recommended bucket: **Ordinary Moderate**:: 2. Signal breakdown Conservative signals: * +1 Concrete persistent kernel resource leak. A rejected histogram field and its modifier operand become unreachable from normal cleanup. * No negative privilege score. Access to the relevant tracefs trigger file is not resolved sufficiently to establish host-admin-equivalent privilege. Paranoid additional signal: * +1 Meaningful accumulation potential. Repeated rejected writes produce persistent, approximately linear allocation growth and could eventually cause memory pressure through sustained abuse. Not awarded: * No UAF, stale post-lifetime access, double release, OOB access, or active-object corruption. * No reliable kernel crash or immediate host-wide exhaustion is demonstrated. * No controlled reclaim, arbitrary write, disclosure, integrity impact, privilege escalation, or security-boundary bypass. * No remote-reachability point. The trigger is a local tracefs write. * No race or timing penalty. The leak follows a deterministic error path. * No additional availability point for merely theoretical eventual exhaustion. Repeated-release checks: * The path does not release an object and retain a dangling reference. * No second lifetime or refcount mutation exists. * Concrete repeated release/refcount +1 was not awarded. * Paranoid repeated-refcount leverage was not awarded. * REAL UAF FLOOR 5 does not apply. 3. Reachability analysis The trigger is repeated writing of an invalid histogram expression to an event trigger file in tracefs. The supplied context does not establish the exact permission checks, mount ownership, or delegation policy, so HostAdminRequired remains UNKNOWN rather than assuming either host root or below-admin access. Namespace-scoped access is not established. No network trigger, special hardware, race, or asynchronous timing is involved. Histogram trigger support and writable tracing files are prerequisites. CONFIG_DEBUG_KMEMLEAK is required only to detect the leak, not to trigger it. An attacker who can write the trigger can repeat the deterministic allocation failure path cheaply, but significant memory pressure requires sustained high-volume abuse. 4. Primitive and severity interpretation The exact defect is a missing destruction operation after parse_expr creates hist_field but modifier validation rejects it before ownership is transferred to hist_data fields. The leaked object and its operand remain unreachable from destroy_hist_data. This is a concrete resource leak, not a UAF or kernel memory-corruption primitive. There is no stale dereference, post-free mutation, attacker-controlled overwrite, or semantic reinterpretation. The demonstrated consequence is small persistent memory growth. Host-wide denial of service is a plausible sustained-abuse worst case but is not demonstrated as immediate or efficient. PrimitiveClass is NONE because no corruption, stale-object use, authorization bypass, or independently useful exploitation primitive exists. ImportantCandidate is NO, and AutoDowngradeAllowed is YES because the issue is limited to deterministic resource leakage without an unresolved security-boundary or corruption primitive. Likely operational severity is Low to ordinary Moderate. 5. One-sentence report phrase A missing cleanup call for rejected tracing histogram fields causes a repeatable local kernel memory leak that may lead to memory pressure under sustained abuse but provides no demonstrated memory corruption, disclosure, or privilege escalation primitive. 6. Manual review recommendation NO MANUAL CHECK NEEDED The patch establishes a straightforward resource leak with low per-operation impact and no corruption or security-boundary primitive, so deferred automated handling is reasonable. 7. Call-site confidence Call-site confidence: high ====================================================================== UPSTREAM PATCH SUMMARY ====================================================================== Patch: tracing: Free histogram the field rejected for a bad modifier Commit: e787361bb6b0026ea3eb4d3fa7a304c7fcb99555 Upstream URL: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=e787361bb6b0026ea3eb4d3fa7a304c7fcb99555 Commit description: Writing a hist trigger whose value or variable carries a modifier that is not allowed there leaks the fields that were built for it. __create_val_field() takes the field from parse_expr() and stores it in hist_data->fields[] only after the modifier checks have run: hist_field = parse_expr(hist_data, file, field_str, flags, var_name, &n_subexprs); ... if (hist_field->flags & HIST_FIELD_FL_VAR) { if (hist_field->flags & (...)) goto err; } else { if (hist_field->flags & (...)) goto err; } hist_data->fields[val_idx] = hist_field; Both checks jump past that store, and the err label returns without freeing anything. The error unwinds to create_hist_data(), which calls destroy_hist_data() -> destroy_hist_fields(), and that reaches a field only by walking fields[]. A field that never got there is unreachable. commit e021343 ("tracing: Do not let histogram values have some modifiers") set ret to -EINVAL and fell through to the store, which left the field owned by fields[] and freed along with the rest of hist_data. Splitting the check into a value case and a variable case replaced that fall-through with a goto that skips it. With CONFIG_DEBUG_KMEMLEAK, 200 writes of # echo 'hist:keys=prev_pid:vals=next_pid.log2' > \ events/sched/sched_switch/trigger each correctly rejected with -EINVAL, leave 332 unreferenced objects (63744 bytes) reported at create_hist_field(); 200 install and remove cycles of a valid trigger leave none. A '.log2' field is two allocations, since create_hist_field() puts the plain field in operands[0] of the log2 field, and both are reported. Use destroy_hist_field() rather than __destroy_hist_field() so that operands[0] is freed as well. It returns early for HIST_FIELD_FL_VAR_REF, which is what an operand owned by hist_data->var_refs[] needs; the rejected field itself is never a var ref, because a var ref never carries a modifier flag. Cc: stable@vger.kernel.org Fixes: e30fbc6 ("tracing/histograms: Allow variables to have some modifiers") Link: https://patch.msgid.link/20260907034948.240387-1-donggeunyoo.kernel@gmail.com Signed-off-by: Donggeun Yoo Signed-off-by: Steven Rostedt Signed-off-by: Greg Kroah-Hartman Changed files: kernel/trace/trace_events_hist.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=e787361bb6b0026ea3eb4d3fa7a304c7fcb99555 ====================================================================== DETAILED REPORT METHODOLOGY ====================================================================== The original Linux kernel CVE announcement for CVE-2026-97921 can be found here: https://lore.kernel.org/linux-cve-announce/?q=CVE-2026-97921 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:L/PR:H/UI:N/S:U/C:N/I:N/A:L The Best / paranoid CVSS vector: AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H The Best / paranoid CVSS score: 5.5 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: 1 Paranoid ActionableScore: 2 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: LOW KPANIC detected for this report: NO Published priority for this report (same as in Subject): LOW 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).