All vulnerabilities
CVE-2026-97935

Linux: tracing: Set the trace clock before registering the histogram trigger

Linux LinuxOperating systems
CVSS
NoneNot scored
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)0.17%Chance of exploitation activity in the next 30 days, higher than 5% of CVEs. Scored 23 Oct 2026FIRST EPSS
Fixed in578d39ab420b18b76a12fc8d0573ec041a84da28Also 65d1e28198f344832a8a63e8ccf84b8f65b92a32, 6ede78d0563a2a3ae3e46f9c07cedb5d79645429CVE List
Published25 Sep 2026Updated 21 Oct 2026CVE List

What fixes it

  • 578d39ab420b18b76a12fc8d0573ec041a84da28LinuxCVE List
  • 65d1e28198f344832a8a63e8ccf84b8f65b92a32LinuxCVE List
  • 6ede78d0563a2a3ae3e46f9c07cedb5d79645429LinuxCVE List

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

In the Linux kernel, the following vulnerability has been resolved:

tracing: Set the trace clock before registering the histogram trigger

hist_register_trigger() puts the trigger on the global named_triggers list in cmd_ops->init(), and only then sets the trace clock:

if (data->cmd_ops->init) { ret = data->cmd_ops->init(data); if (ret < 0) goto out; }

if (hist_data->enable_timestamps) { ret = tracing_set_clock(file->tr, hist_data->attrs->clock); if (ret) { hist_err(tr, HIST_ERR_SET_CLOCK_FAIL, errpos(clock)); goto out; }

The clock string is not checked anywhere before that call, so a named trigger using common_timestamp with an unknown clock fails after it has already become findable. event_hist_trigger_parse() then frees it without taking it off the list, and the next lookup by name reads the freed object:

~# cd /sys/kernel/tracing/events/sched/sched_switch ~# echo 'hist:name=foo:keys=common_pid:ts=common_timestamp:clock=bogus' > trigger bash: echo: write error: Invalid argument ~# echo 'hist:name=foo:keys=common_pid' > trigger

BUG: KASAN: slab-use-after-free in find_named_trigger+0xac/0xc0 Read of size 8 at addr ffff88800915d760 by task init/1 find_named_trigger+0xac/0xc0 hist_register_trigger+0xc1/0x900 event_hist_trigger_parse+0x3146/0x6af0 event_trigger_write+0xce/0x160 Freed by task 63: kfree+0x154/0x420 trigger_kthread_fn+0xfd/0x160

Set the clock before the trigger is registered, so that nothing which can fail runs after it is published, the way commit 6f86bdeab633 ("tracing: Fix bad hist from corrupting named_triggers list") moved the registration below the rest of the setup.

tracing_set_filter_buffering() is reference counted, so the init failure path has to drop the reference that the clock block now takes first.

Text from CVE List

Affected versions 12

  • Linuxaffected: a4072fe85ba3671720cab0788291af953db27318 before 578d39ab420b18b76a12fc8d0573ec041a84da28CVE List
  • Linuxaffected: a4072fe85ba3671720cab0788291af953db27318 before cc6c4cf565b0c187c61ffd2e67a4dfb2427675adCVE List
  • Linuxaffected: a4072fe85ba3671720cab0788291af953db27318 before cfad128171f8e2237a3c723d6478ef2cfb3b9127CVE List
  • Linuxaffected: a4072fe85ba3671720cab0788291af953db27318 before 65d1e28198f344832a8a63e8ccf84b8f65b92a32CVE List
  • Linuxaffected: a4072fe85ba3671720cab0788291af953db27318 before 6ede78d0563a2a3ae3e46f9c07cedb5d79645429CVE List
  • Linuxaffected: 4.17CVE List
  • Linuxunaffected: all versions before 4.17CVE List
  • Linuxunaffected: 6.6.160 through 6.6.*CVE List
  • Linuxunaffected: 6.12.112 through 6.12.*CVE List
  • Linuxunaffected: 6.18.53 through 6.18.*CVE List
  • Linuxunaffected: 7.2.7 through 7.2.*CVE List
  • Linuxunaffected: 7.3CVE List

References 5