Read the docs
TI-2025-25310 Aliases CVE-2025-37964GHSA-xxw2-vx44-7cv6

x86/mm: Eliminate window where TLB flushes may be inadvertently skipped

Priority LOW 33Published · Updated

Key facts

Attack vector
Local
Privileges required
Low
User interaction
None
Attack complexity
Low
Impact type
—
Confidentiality · integrity · availability
High · High · High
Fix status
Partial Red Hat: 2 without a fix

Attack profile from CVSS 3.1 · CNA. Fix status from CNA and Red Hat.

Summary

In the Linux kernel, the following vulnerability has been resolved: x86/mm: Eliminate window where TLB flushes may be inadvertently skipped tl;dr: There is a window in the mm switching code where the new CR3 is set and the CPU should be getting TLB flushes for the new mm. But should_flush_tlb() has a bug and suppresses the flush. Fix it by widening the window where should_flush_tlb() sends an IPI. Long Version: === History === There were a few things leading up to this. First, updating mm_cpumask() was observed to be too expensive, so it was made lazier. But being lazy caused too many unnecessary IPIs to CPUs due to the now-lazy mm_cpumask(). So code was added to cull mm_cpumask() periodically[2]. But that culling was a bit too aggressive and skipped sending TLB flushes to CPUs that need them. So here we are again. === Problem === The too-aggressive code in should_flush_tlb() strikes in this window: // Turn on IPIs for this CPU/mm combination, but only // if should_flush_tlb() agrees: cpumask_set_cpu(cpu, mm_cpumask(next)); next_tlb_gen = atomic64_read(&next->context.tlb_gen); choose_new_asid(next, next_tlb_gen, &new_asid, &need_flush); load_new_mm_cr3(need_flush); // ^ After 'need_flush' is set to false, IPIs *MUST* // be sent to this CPU and not be ignored. this_cpu_write(cpu_tlbstate.loaded_mm, next); // ^ Not until this point does should_flush_tlb() // become true! should_flush_tlb() will suppress TLB flushes between load_new_mm_cr3() and writing to 'loaded_mm', which is a window where they should not be suppressed. Whoops. === Solution === Thankfully, the fuzzy "just about to write CR3" window is already marked with loaded_mm==LOADED_MM_SWITCHING. Simply checking for that state in should_flush_tlb() is sufficient to ensure that the CPU is targeted with an IPI. This will cause more TLB flush IPIs. But the window is relatively small and I do not expect this to cause any kind of measurable performance impact. Update the comment where LOADED_MM_SWITCHING is written since it grew yet another user. Peter Z also raised a concern that should_flush_tlb() might not observe 'loaded_mm' and 'is_lazy' in the same order that switch_mm_irqs_off() writes them. Add a barrier to ensure that they are observed in the order they are written.

Why it matters now

EPSS 0.00209 11th percentileScored 2026-11-07
Fix Partial Linux (Linux): 5.15.183, 6.1.139, 6.6.91 +4Red Hat: 2 without a fix

SSVC decision points

Not available: CISA has not published SSVC decision points for this record.

Affected products

VendorProductAffected versionsFixed inStatusSource
LinuxLinux5.15.179 to before 5.15.183; 6.1.129 to before 6.1.139; 6.6.79 to before 6.6.91; 6.12.16 to before 6.12.29; 6.13.4 to before 6.145.15.183, 6.1.139, 6.6.91, 6.12.29, 6.14Patch availableCNA
LinuxLinux6.14 and later5.15.183, 6.1.139, 6.6.91, 6.12.29, 6.14.7, 6.15Patch availableCNA
  • Linux VendorLinux Affected 5.15.179 to before 5.15.183; 6.1.129 to before 6.1.139; 6.6.79 to before 6.6.91; 6.12.16 to before 6.12.29; 6.13.4 to before 6.14 Fixed in 5.15.183, 6.1.139, 6.6.91, 6.12.29, 6.14 Patch available CNA
  • Linux VendorLinux Affected 6.14 and later Fixed in 5.15.183, 6.1.139, 6.6.91, 6.12.29, 6.14.7, 6.15 Patch available CNA

CPE configurations NVD · 7

CPEVersionsRoleVendor
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*5.15.179 to before 5.15.183; 6.1.129 to before 6.1.139; 6.6.79 to before 6.6.91; 6.12.16 to before 6.12.29; 6.13.4 to before 6.14.7VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.15:rc1:*:*:*:*:*:*6.15 rc1VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.15:rc2:*:*:*:*:*:*6.15 rc2VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.15:rc3:*:*:*:*:*:*6.15 rc3VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.15:rc4:*:*:*:*:*:*6.15 rc4VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.15:rc5:*:*:*:*:*:*6.15 rc5VulnerableLinux
cpe:2.3:o:debian:debian_linux:11.0:*:*:*:*:*:*:*11.0VulnerableDebian
  • cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* Versions 5.15.179 to before 5.15.183; 6.1.129 to before 6.1.139; 6.6.79 to before 6.6.91; 6.12.16 to before 6.12.29; 6.13.4 to before 6.14.7 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.15:rc1:*:*:*:*:*:* Versions 6.15 rc1 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.15:rc2:*:*:*:*:*:* Versions 6.15 rc2 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.15:rc3:*:*:*:*:*:* Versions 6.15 rc3 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.15:rc4:*:*:*:*:*:* Versions 6.15 rc4 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.15:rc5:*:*:*:*:*:* Versions 6.15 rc5 Vulnerable ·Linux
  • cpe:2.3:o:debian:debian_linux:11.0:*:*:*:*:*:*:* Versions 11.0 Vulnerable ·Debian

Remediation

  • Fix · CNA Linux (Linux) Fixed in 5.15.183, 6.1.139, 6.6.91, 6.12.29, 6.14
  • Fix · CNA Linux (Linux) Fixed in 5.15.183, 6.1.139, 6.6.91, 6.12.29, 6.14.7, 6.15

Vendor assessments

Red Hat

Red Hat rating: Moderate. Red Hat's page for this CVE →

ProductStatusPlan or fix
Red Hat Enterprise Linux 6AffectedNo fix planned: Out of support scope
Red Hat Enterprise Linux 7AffectedNo fix planned: Out of support scope
Not affected: 3 products
  • Red Hat Enterprise Linux 10
  • Red Hat Enterprise Linux 8
  • Red Hat Enterprise Linux 9

Timeline

  1. 2026-10-02 Threatist record created from CVE-2025-37964
  2. 2026-10-03 Alias added: GHSA-xxw2-vx44-7cv6

References

  • TI-2025-26358 tls: fix handling of zero-length records on the rx_list KEVCVSS 3.1CRITICAL 9.8
  • TI-2026-38352 netfilter: bridge: make ebt_snat ARP rewrite writable KEVCVSS 3.1HIGH 8.8
  • TI-2013-05264 The (1) get_user and (2) put_user API functions in the Linux kernel before 3.5.5 on the… KEVCVSS 3.1HIGH 8.8
  • TI-2022-00125 Integer overflow in kernel KEVCVSS 3.1HIGH 8.4
  • TI-2013-01864 The perf_swevent_init function in kernel/events/core.c in the Linux kernel before 3.8.9… KEVCVSS 3.1HIGH 8.4
  • TI-2021-05514 Heap Out-Of-Bounds Write in Netfilter IP6T_SO_SET_REPLACE KEVCVSS 3.1HIGH 8.3
See all 15278 →

Sources