All vulnerabilities
CVE-2026-97960

Linux: perf/x86/intel: Prevent drain_pebs() reentry

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 in9882068ed242fcd4743f53027e8c790e88dcafffAlso 999e482fdf89400cc1ae937680fc05096b4c915b, 6.4CVE List
Published25 Sep 2026Updated 21 Oct 2026CVE List

What fixes it

  • 9882068ed242fcd4743f53027e8c790e88dcafffLinuxCVE List
  • 999e482fdf89400cc1ae937680fc05096b4c915bLinuxCVE List
  • 6.4LinuxCVE 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:

perf/x86/intel: Prevent drain_pebs() reentry

The PEBS buffer is shared by all events on a CPU, so drain_pebs() must not be reentered. If so, one instance may observe stale buffer state and potentially access out-of-bound memory.

Most invocations happen in NMI context, which naturally prevents reentry. However, drain_pebs() is also reachable from process context via intel_pmu_drain_pebs_buffer().

In those paths, the PMU is often already disabled, but not guaranteed. For example, __intel_pmu_pebs_disable() only disables the target counter, so other active counters can still raise a PMI and interrupt an in-flight drain_pebs(). Here is an example,

__perf_addr_filters_adjust() perf_event_stop() __perf_event_stop() x86_pmu_stop() (event->pmu->stop) intel_pmu_disable_event() intel_pmu_pebs_disable() __intel_pmu_pebs_disable() intel_pmu_drain_large_pebs() intel_pmu_drain_pebs_buffer()

Introduce __intel_pmu_quiesce() and __intel_pmu_resume() helpers and use them in intel_pmu_drain_large_pebs() to disable the full PMU around the intel_pmu_drain_pebs_buffer() call, preventing reentry.

Also add a warning in intel_pmu_drain_pebs_buffer() when the full PMU is not disabled.

Text from CVE List

Affected versions 14

  • Linuxaffected: b752ea0c28e3f7f0aaaad6abf84f735eebc37a60 before 9882068ed242fcd4743f53027e8c790e88dcafffCVE List
  • Linuxaffected: b752ea0c28e3f7f0aaaad6abf84f735eebc37a60 before 999e482fdf89400cc1ae937680fc05096b4c915bCVE List
  • Linuxaffected: b752ea0c28e3f7f0aaaad6abf84f735eebc37a60 before a5fe19dd8b3ed5fad6e5e0f0c58c7245043ee4afCVE List
  • Linuxaffected: b752ea0c28e3f7f0aaaad6abf84f735eebc37a60 before c55599c0ec2aa020e41a0599c3044c56d8a2e7d9CVE List
  • Linuxaffected: b752ea0c28e3f7f0aaaad6abf84f735eebc37a60 before a56c03a397e2cd0c4cf8da96dcd6214f7d0e7d8cCVE List
  • Linuxaffected: a9165207b2b07415eeb01b3ac8bb84976ec96984CVE List
  • Linuxaffected: 6.3.7 before 6.4CVE List
  • Linuxaffected: 6.4CVE List
  • Linuxunaffected: all versions before 6.4CVE List
  • Linuxunaffected: 6.6.160 through 6.6.*CVE List
  • Linuxunaffected: 6.12.114 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