All vulnerabilities
CVE-2026-97936

Linux: tracing: Fix memory corruption from the histogram stacktrace modifier

Linux LinuxOperating systems
CVSS
NoneNot scored
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)0.20%Chance of exploitation activity in the next 30 days, higher than 9% of CVEs. Scored 23 Oct 2026FIRST EPSS
Fixed in98da3379cdee343f671dac89b9afbd8b071f2591Also 57bfc2a17954d173d2a4182f3b582ffbb23aff64, 55caaf25da2c2bb9b75307e4c868726cb954b1d6CVE List
Published25 Sep 2026Updated 19 Oct 2026CVE List

What fixes it

  • 98da3379cdee343f671dac89b9afbd8b071f2591LinuxCVE List
  • 57bfc2a17954d173d2a4182f3b582ffbb23aff64LinuxCVE List
  • 55caaf25da2c2bb9b75307e4c868726cb954b1d6LinuxCVE 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: Fix memory corruption from the histogram stacktrace modifier

parse_field() sets HIST_FIELD_FL_STACKTRACE from the ".stacktrace" modifier before it looks the field name up, and nothing afterwards checks that the name resolved to a field which holds a stacktrace. create_hist_field() picks HIST_FIELD_FN_STACK on the strength of the field pointer alone, which reads a __data_loc word from the record and follows its low 16 bits as an offset into the same record. event_hist_trigger() takes the first word there as an entry count and copies that many longs into a 31 entry array:

n_entries = *stack; memcpy(entries, ++stack, n_entries * sizeof(unsigned long));

Neither end of that copy is bounded, and the count is whatever the event holds at the offset, so any field will do:

cd /sys/kernel/tracing/events/sched/sched_process_fork

echo 'hist:keys=parent_pid.stacktrace' > trigger

(true)

BUG: kernel NULL pointer dereference, address: 0000000000000008 RIP: 0010:rb_insert_color+0x18/0x130 timerqueue_linked_add+0x7e/0xd0 enqueue_hrtimer+0x39/0xb0 __hrtimer_run_queues+0x10f/0x1f0 </IRQ> RIP: 0010:memcpy+0xc/0x30 event_hist_trigger+0x165/0x690

The timer interrupt landed on the rbtree the copy had already run over. No debug options are needed for this; KASAN reports the same write as an out-of-bounds read of 13835058055416381440 bytes.

Documentation/trace/histogram.rst already states the rule, "must be a long[] type", so enforce it once the name has been resolved. Names which resolve to no field at all, "hitcount.stacktrace" and the common_* pseudo-fields, are refused for the same reason: they hold no stacktrace to read.

Text from CVE List

Affected versions 12

  • Linuxaffected: cc5fc8bfc961eeb99b7e8dffbeff7a3f6995d314 before 98da3379cdee343f671dac89b9afbd8b071f2591CVE List
  • Linuxaffected: cc5fc8bfc961eeb99b7e8dffbeff7a3f6995d314 before e183b84968d4a6ea476d806ea97668405aa56880CVE List
  • Linuxaffected: cc5fc8bfc961eeb99b7e8dffbeff7a3f6995d314 before 57bfc2a17954d173d2a4182f3b582ffbb23aff64CVE List
  • Linuxaffected: cc5fc8bfc961eeb99b7e8dffbeff7a3f6995d314 before 55caaf25da2c2bb9b75307e4c868726cb954b1d6CVE List
  • Linuxaffected: cc5fc8bfc961eeb99b7e8dffbeff7a3f6995d314 before a5e70ba87ca8ebc79b4e63de302d03b0625fe153CVE List
  • Linuxaffected: 6.3CVE List
  • Linuxunaffected: all versions before 6.3CVE List
  • Linuxunaffected: 6.6.158 through 6.6.*CVE List
  • Linuxunaffected: 6.12.111 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