CVE-2026-90013
massUse-after-free in Linux kernel ftrace tracing instance options files
CVE-2026-90013 is a use-after-free flaw in the Linux kernel's ftrace tracing subsystem: the per-instance 'options' files under tracefs do not take a reference on the trace_array structure they describe. A local process that opens one of these files can race against another task deleting the corresponding tracing instance, freeing the options descriptor while it is still in use and causing a kernel use-after-free crash. The CVSS vector rates this high for confidentiality, integrity, and availability with only low local privileges required, meaning a kernel crash (denial of service) and potentially local privilege escalation typical of use-after-free bugs. Any Linux system where the tracefs/debugfs tracing files are reachable by untrusted local users is affected; the source data does not specify exact kernel version ranges. No in-the-wild exploitation, public proof-of-concept, or CISA KEV listing is known; the fix adds a trace_array_options_get() helper that takes a trace_array reference when the file is opened.
What to do: Install a kernel update that includes the upstream fix 'tracing: Take trace_array reference when opening options file' as soon as your distribution ships it. Until then, restrict access to /sys/kernel/tracing and /sys/kernel/debug/tracing to root or trusted administrators, and audit for unprivileged processes opening tracefs options files or creating/removing tracing instances.
| Linux kernel (tracing/ftrace subsystem, per-instance tracefs 'options' files) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: tracing: Take trace_array reference when opening options file The options files do not take the trace_array reference for the options they represent. This could cause a use-after-free kernel crash if one of these files is opened by one task and another task removes the instance that the option is for. Because it doesn't take a reference upon opening, it will not stop the removal which will free the options descriptor that is being used. As the options are somewhat dynamic in their creation at boot up, each file represents a flag in the trace_array. The trace_array has an array of indexes to represent each of these flags that is stored in the trace_flags_index array. The address of the index array element is used to pass to the inode->i_private pointer. Then that element is read which holds the index (which represents the flag) and then the index is used to calculate the trace_array descriptor from its trace_flags_index array. One issue is that the index element can not be referenced until the trace_array's reference is taken. To handle this, create a new helper function called: trace_array_options_get() that will iterate all the existing trace_arrays in the ftrace_trace_arrays list (under the trace_types_lock), and compare the passed in address of the index element with the entire array of the trace_array's trace_flags_index array. If it matches, then up the corresponding trace_array's reference and return.
- Vector
- CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.