CVE-2025-22035

tracing: Fix use-after-free in print_graph_function_flags during tracer switching

HIGH
7.8
CVSS Score
Published: April 16, 2025 at 02:11 PM UTC
Updated: August 5, 2026 at 12:44 PM UTC
1 product affected across 1 vendorLinux Kernel

Using Linux by Linux?

Get instant alerts when new vulnerabilities affect Linux - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
HIGH7.8
Exploit prediction
EPSS 0.3%
SSVC
No known exploit

Description

In the Linux kernel, the following vulnerability has been resolved: tracing: Fix use-after-free in print_graph_function_flags during tracer switching Kairui reported a UAF issue in print_graph_function_flags() during ftrace stress testing [1]. This issue can be reproduced if puting a 'mdelay(10)' after 'mutex_unlock(&trace_types_lock)' in s_start(), and executing the following script: $ echo function_graph > current_tracer $ cat trace > /dev/null & $ sleep 5 # Ensure the 'cat' reaches the 'mdelay(10)' point $ echo timerlat > current_tracer The root cause lies in the two calls to print_graph_function_flags within print_trace_line during each s_show(): * One through 'iter->trace->print_line()'; * Another through 'event->funcs->trace()', which is hidden in print_trace_fmt() before print_trace_line returns. Tracer switching only updates the former, while the latter continues to use the print_line function of the old tracer, which in the script above is print_graph_function_flags. Moreover, when switching from the 'function_graph' tracer to the 'timerlat' tracer, s_start only calls graph_trace_close of the 'function_graph' tracer to free 'iter->private', but does not set it to NULL. This provides an opportunity for 'event->funcs->trace()' to use an invalid 'iter->private'. To fix this issue, set 'iter->private' to NULL immediately after freeing it in graph_trace_close(), ensuring that an invalid pointer is not passed to other tracers. Additionally, clean up the unnecessary 'iter->private = NULL' during each 'cat trace' when using wakeup and irqsoff tracers. [1] https://lore.kernel.org/all/[email protected]/

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

v ≥ 4.14.324v ≥ 4.19.293v ≥ 6.4.134.14.324 ≤ v < 4.154.19.293 ≤ v < 4.205.10.193 ≤ v < 5.10.2365.15.129 ≤ v < 5.15.1805.4.255 ≤ v < 5.4.2926.1.50 ≤ v < 6.1.1346.13 ≤ v < 6.13.116.14 ≤ v < 6.14.26.4.13 ≤ v < 6.56.4.13 ≤ v < 6.6.876.5 ≤ v < 6.12.236.5 ≤ v < 6.13.116.5 ≤ v < 6.14.26.5 ≤ v < 6.156.5 ≤ v < 6.6.876.7 ≤ v < 6.12.232242640e9bd94e706acf75c60a2ab1d0e150e0fb2cb0c037c927db4ec928cc927488e52aa359786e4.14.3244.19.2935.10.1935.15.1295.4.2555319d707732c728eb721ac616a50e7978eb499a5d433eda76b66ab271f5924b26ddfec063eeb4546.1.506.4.136.5b8205dfed68183dc1470e83863c5ded6d7fa30a9ce6e2b14bc094866d9173db6935da2d752f06d8bd6b35c9a8d51032ed9890431da3ae39fe76c1ae3eecb91b9f98d6427d4af5fdb8f108f52572a39e7
Vendor states this is fixed in 099ef3385800828b74933a96c117574637c3fb3a (fixed)
Vendor states this is fixed in 42561fe62c3628ea3bc9623f64f047605e98857f (fixed)
Vendor states this is fixed in 70be951bc01e4a0e10d443f3510bb17426f257fb (fixed)
Vendor states this is fixed in 7f81f27b1093e4895e87b74143c59c055c3b1906 (fixed)
Vendor states this is fixed in 81a85b12132c8ffe98f5ddbdc185481790aeaa1b (fixed)
Vendor states this is fixed in a2cce54c1748216535dda02e185d07a084be837e (fixed)
Vendor states this is fixed in c85efe6e13743cac6ba4ccf144cb91f44c86231a (fixed)
Vendor states this is fixed in de7b309139f862a44379ecd96e93c9133c69f813 (fixed)
Vendor states this is fixed in f14752d66056d0c7bffe5092130409417d3baa70 (fixed)
Affected range stops below 4.15, so it looks safe — our inference, not a vendor statement
Affected range stops below 4.20, so it looks safe — our inference, not a vendor statement
Vendor states this is fixed in 5.10.236 (unaffected)
Vendor states this is fixed in 5.15.180 (unaffected)
Vendor states this is fixed in 5.4.292 (unaffected)
Vendor states this is fixed in 6.1.134 (unaffected)
Vendor states this is fixed in 6.12.23 (unaffected)
Vendor states this is fixed in 6.13.11 (unaffected)
Vendor states this is fixed in 6.14.2 (unaffected)
Vendor states this is fixed in 6.15 (unaffected)
Vendor states this is fixed in 6.5 (unaffected)
Vendor states this is fixed in 6.6.87 (unaffected)

References (11)

Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/099ef3385800828b74933a96c117574637c3fb3a
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/42561fe62c3628ea3bc9623f64f047605e98857f
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/70be951bc01e4a0e10d443f3510bb17426f257fb
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/7f81f27b1093e4895e87b74143c59c055c3b1906
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/81a85b12132c8ffe98f5ddbdc185481790aeaa1b
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/a2cce54c1748216535dda02e185d07a084be837e
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/c85efe6e13743cac6ba4ccf144cb91f44c86231a
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/de7b309139f862a44379ecd96e93c9133c69f813

SSVC — Action Prioritization

SSVCNo known exploitNot automatableTotal impact

SSVC signals action urgency (what to patch first), separate from CVSS which measures severity.

CVSS

7.8HIGHLinux
Vector?

Quick Info

StatusMODIFIED
CWE
CWE-416

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card