CVE-2026-99235
High · 7.8CVSS
7.8
EPSS
0.1%
Published
Nov 2, 2026
CISA due date
—
Cloudanix analysis
A bug in the Linux kernel's tracing feature can let a local user crash the whole system or take it over completely by creating and deleting certain performance measurements in a particular order.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Low
- Impact
- Full Compromise
- Component
- OS kernel
- Class
- Use After Free
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Use-after-free in Linux kernel tracing when create_field_var_hist saves a pointer to a compatible histogram's hist_data instead of the event file; the referenced hist_data can be freed by event_hist_trigger_free while unregister_field_var_hists still dereferences it via event_file, causing slab-use-after-free.
Why it matters to the business
Local attackers on affected Linux systems can trigger kernel crashes or achieve arbitrary code execution, leading to full system compromise, data loss, or service disruption on any host using dynamic event tracing and histograms.
How an attack unfolds
An attacker with local access crafts a sequence of histogram trigger creations and removals that causes find_compatible_hist to return a histogram lacking its own variables; when the user later removes that trigger, the still-referenced hist_data is freed, and subsequent access in event_hist_trigger_free or unregister_field_var_hists reads freed memory.
How to fix it
Apply the upstream patch that changes the saved pointer from hist_data to the event_file so the reference remains valid after the original histogram is removed; rebuild and boot the fixed kernel on all affected systems.
How to confirm the fix worked
Confirm the kernel source contains the corrected create_field_var_hist logic that stores event_file rather than hist_data, then verify the running kernel was built from that source tree and test that repeated histogram create/remove sequences no longer produce KASAN reports.
Typical attack path
- Obtain local shell on target Linux system
- Load or enable tracing subsystem with event histograms
- Create multiple compatible histograms sharing the same keys via trigger commands
- Remove the source histogram while the dependent field-var histogram still holds a dangling reference
- Trigger event_hist_trigger_free or unregister_field_var_hists to dereference freed memory
How to detect it
Inspect kernel logs for KASAN slab-use-after-free reports mentioning event_hist_trigger_free or unregister_field_var_hists; correlate with audit logs showing tracefs writes that create or delete histogram triggers immediately preceding the crash.
What your security team should do
- Prioritize patching all systems that expose tracing interfaces to untrusted local users within the next 48 hours
- Restrict unprivileged access to tracefs and event triggers until kernels are updated
- Monitor for any new exploit code targeting this tracing UAF once public PoCs appear
- Audit custom tracing scripts or tools that dynamically register and unregister histograms
The record
In the Linux kernel, the following vulnerability has been resolved: tracing: Save the event file instead of the compatible histogram create_field_var_hist() creates a histogram on the matched event to supply a field variable, and records it on the target so it can be torn down later: hist_data = find_compatible_hist(target_hist_data, file); ... /* Save the compatible histogram information */ var_hist->hist_data = hist_data; hist_data is not the histogram it creates. It is one that was already there, whose keys the new one copies. The saved pointer has a single user, unregister_field_var_hists(), which runs when the target is removed: file = hist_data->field_var_hists[i]->hist_data->event_file; find_compatible_hist() matches on keys alone, so it can pick one with no variables of its own. check_var_refs() then returns false and the user can remove it while the target still points at it: BUG: KASAN: slab-use-after-free in event_hist_trigger_free+0x2b2/0x320 Read of size 8 at addr ffff8880093b90e0 by task init/1 Freed by task 1: kfree+0x154/0x420 event_hist_trigger_free+0x1d5/0x320 event_hist_trigger_parse+0x35f3/0x69e0 trigger_process_regex+0x1a6/0x250 Save the event file instead. It is all the dereference ever wanted, and it does not go away when the user removes a trigger.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|