Read the docs
TI-2025-15789 Aliases CVE-2025-21839GHSA-m8v3-m369-c2xp

KVM: x86: Load DR6 with guest value only before entering .vcpu_run() loop

Priority LOW 32Published · Updated

Key facts

Attack vector
Local
Privileges required
Low
User interaction
None
Attack complexity
Low
Impact type
—
Confidentiality · integrity · availability
None · Low · High
Fix status
Partial Red Hat: 10 fixed, 3 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: KVM: x86: Load DR6 with guest value only before entering .vcpu_run() loop Move the conditional loading of hardware DR6 with the guest's DR6 value out of the core .vcpu_run() loop to fix a bug where KVM can load hardware with a stale vcpu->arch.dr6. When the guest accesses a DR and host userspace isn't debugging the guest, KVM disables DR interception and loads the guest's values into hardware on VM-Enter and saves them on VM-Exit. This allows the guest to access DRs at will, e.g. so that a sequence of DR accesses to configure a breakpoint only generates one VM-Exit. For DR0-DR3, the logic/behavior is identical between VMX and SVM, and also identical between KVM_DEBUGREG_BP_ENABLED (userspace debugging the guest) and KVM_DEBUGREG_WONT_EXIT (guest using DRs), and so KVM handles loading DR0-DR3 in common code, _outside_ of the core kvm_x86_ops.vcpu_run() loop. But for DR6, the guest's value doesn't need to be loaded into hardware for KVM_DEBUGREG_BP_ENABLED, and SVM provides a dedicated VMCB field whereas VMX requires software to manually load the guest value, and so loading the guest's value into DR6 is handled by {svm,vmx}_vcpu_run(), i.e. is done _inside_ the core run loop. Unfortunately, saving the guest values on VM-Exit is initiated by common x86, again outside of the core run loop. If the guest modifies DR6 (in hardware, when DR interception is disabled), and then the next VM-Exit is a fastpath VM-Exit, KVM will reload hardware DR6 with vcpu->arch.dr6 and clobber the guest's actual value. The bug shows up primarily with nested VMX because KVM handles the VMX preemption timer in the fastpath, and the window between hardware DR6 being modified (in guest context) and DR6 being read by guest software is orders of magnitude larger in a nested setup. E.g. in non-nested, the VMX preemption timer would need to fire precisely between #DB injection and the #DB handler's read of DR6, whereas with a KVM-on-KVM setup, the window where hardware DR6 is "dirty" extends all the way from L1 writing DR6 to VMRESUME (in L1). L1's view: ========== <L1 disables DR interception> CPU 0/KVM-7289 [023] d.... 2925.640961: kvm_entry: vcpu 0 A: L1 Writes DR6 CPU 0/KVM-7289 [023] d.... 2925.640963: <hack>: Set DRs, DR6 = 0xffff0ff1 B: CPU 0/KVM-7289 [023] d.... 2925.640967: kvm_exit: vcpu 0 reason EXTERNAL_INTERRUPT intr_info 0x800000ec D: L1 reads DR6, arch.dr6 = 0 CPU 0/KVM-7289 [023] d.... 2925.640969: <hack>: Sync DRs, DR6 = 0xffff0ff0 CPU 0/KVM-7289 [023] d.... 2925.640976: kvm_entry: vcpu 0 L2 reads DR6, L1 disables DR interception CPU 0/KVM-7289 [023] d.... 2925.640980: kvm_exit: vcpu 0 reason DR_ACCESS info1 0x0000000000000216 CPU 0/KVM-7289 [023] d.... 2925.640983: kvm_entry: vcpu 0 CPU 0/KVM-7289 [023] d.... 2925.640983: <hack>: Set DRs, DR6 = 0xffff0ff0 L2 detects failure CPU 0/KVM-7289 [023] d.... 2925.640987: kvm_exit: vcpu 0 reason HLT L1 reads DR6 (confirms failure) CPU 0/KVM-7289 [023] d.... 2925.640990: <hack>: Sync DRs, DR6 = 0xffff0ff0 L0's view: ========== L2 reads DR6, arch.dr6 = 0 CPU 23/KVM-5046 [001] d.... 3410.005610: kvm_exit: vcpu 23 reason DR_ACCESS info1 0x0000000000000216 CPU 23/KVM-5046 [001] ..... 3410.005610: kvm_nested_vmexit: vcpu 23 reason DR_ACCESS info1 0x0000000000000216 L2 => L1 nested VM-Exit CPU 23/KVM-5046 [001] ..... 3410.005610: kvm_nested_vmexit_inject: reason: DR_ACCESS ext_inf1: 0x0000000000000216 CPU 23/KVM-5046 [001] d.... 3410.005610: kvm_entry: vcpu 23 CPU 23/KVM-5046 [001] d.... 3410.005611: kvm_exit: vcpu 23 reason VMREAD CPU 23/KVM-5046 [001] d.... 3410.005611: kvm_entry: vcpu 23 CPU 23/KVM-5046 [001] d.... 3410. ---truncated---

Why it matters now

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.0023 13th percentileScored 2026-11-07
Fix Partial Linux (Linux): 5.15.182, 6.1.138, 6.6.90 +3Red Hat: 2 advisoriesRed Hat: 10 fixed, 3 without a fix

SSVC decision points

CISA ADP · SSVC 2.0.3

Exploitation
None
Automatable
No
Technical impact
Partial

The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.

Affected products

VendorProductAffected versionsFixed inStatusSource
LinuxLinux5.7 and later5.15.182, 6.1.138, 6.6.90, 6.12.16, 6.13.4, 6.14Patch availableCNA
  • Linux VendorLinux Affected 5.7 and later Fixed in 5.15.182, 6.1.138, 6.6.90, 6.12.16, 6.13.4, 6.14 Patch available CNA

CPE configurations NVD · 6

CPEVersionsRoleVendor
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*5.7.1 to before 5.15.182; 5.16 to before 6.1.138; 6.2 to before 6.6.90; 6.7 to before 6.12.16; 6.13 to before 6.13.4VulnerableLinux
cpe:2.3:o:linux:linux_kernel:5.7:-:*:*:*:*:*:*5.7VulnerableLinux
cpe:2.3:o:linux:linux_kernel:5.7:rc6:*:*:*:*:*:*5.7 rc6VulnerableLinux
cpe:2.3:o:linux:linux_kernel:5.7:rc7:*:*:*:*:*:*5.7 rc7VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.14:rc1:*:*:*:*:*:*6.14 rc1VulnerableLinux
cpe:2.3:o:linux:linux_kernel:6.14:rc2:*:*:*:*:*:*6.14 rc2VulnerableLinux
  • cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* Versions 5.7.1 to before 5.15.182; 5.16 to before 6.1.138; 6.2 to before 6.6.90; 6.7 to before 6.12.16; 6.13 to before 6.13.4 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:5.7:-:*:*:*:*:*:* Versions 5.7 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:5.7:rc6:*:*:*:*:*:* Versions 5.7 rc6 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:5.7:rc7:*:*:*:*:*:* Versions 5.7 rc7 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.14:rc1:*:*:*:*:*:* Versions 6.14 rc1 Vulnerable ·Linux
  • cpe:2.3:o:linux:linux_kernel:6.14:rc2:*:*:*:*:*:* Versions 6.14 rc2 Vulnerable ·Linux

Remediation

  • Fix · CNA Linux (Linux) Fixed in 5.15.182, 6.1.138, 6.6.90, 6.12.16, 6.13.4, 6.14

Red Hat 2 advisories

  • RHSA-2026:18134 Released 2026-05-19 · Red Hat rating Moderate
    kernel security update
    • Red Hat Enterprise Linux AppStream (v. 10) kernel-64k-debug-devel-6.12.0-211.7.1.el10_2, kernel-64k-debug-devel-matched-6.12.0-211.7.1.el10_2, kernel-64k-devel-6.12.0-211.7.1.el10_2 +12
    • Red Hat Enterprise Linux BaseOS (v. 10) kernel-6.12.0-211.7.1.el10_2, kernel-64k-6.12.0-211.7.1.el10_2, kernel-64k-core-6.12.0-211.7.1.el10_2 +29
    • Red Hat Enterprise Linux CodeReady Linux Builder (v. 10) kernel-tools-libs-devel-6.12.0-211.7.1.el10_2, libperf-6.12.0-211.7.1.el10_2
    • Red Hat Enterprise Linux Real Time (v. 10) kernel-rt-6.12.0-211.7.1.el10_2, kernel-rt-64k-6.12.0-211.7.1.el10_2, kernel-rt-64k-core-6.12.0-211.7.1.el10_2 +21
    • Red Hat Enterprise Linux Real Time for NFV (v. 10) kernel-rt-6.12.0-211.7.1.el10_2, kernel-rt-core-6.12.0-211.7.1.el10_2, kernel-rt-debug-6.12.0-211.7.1.el10_2 +9
  • RHSA-2025:20518 Released 2025-11-11 · Red Hat rating Moderate
    kernel security update
    • Red Hat Enterprise Linux AppStream (v. 9) kernel-64k-debug-devel-5.14.0-611.5.1.el9_7, kernel-64k-debug-devel-matched-5.14.0-611.5.1.el9_7, kernel-64k-devel-5.14.0-611.5.1.el9_7 +12
    • Red Hat Enterprise Linux BaseOS (v. 9) kernel-5.14.0-611.5.1.el9_7, kernel-64k-5.14.0-611.5.1.el9_7, kernel-64k-core-5.14.0-611.5.1.el9_7 +28
    • Red Hat Enterprise Linux CodeReady Linux Builder (v. 9) kernel-tools-libs-devel-5.14.0-611.5.1.el9_7, libperf-5.14.0-611.5.1.el9_7
    • Red Hat Enterprise Linux Real Time (v. 9) kernel-rt-5.14.0-611.5.1.el9_7, kernel-rt-64k-5.14.0-611.5.1.el9_7, kernel-rt-64k-core-5.14.0-611.5.1.el9_7 +21
    • Red Hat Enterprise Linux Real Time for NFV (v. 9) kernel-rt-5.14.0-611.5.1.el9_7, kernel-rt-core-5.14.0-611.5.1.el9_7, kernel-rt-debug-5.14.0-611.5.1.el9_7 +9

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
Red Hat Enterprise Linux 8AffectedNo fix planned: Out of support scope
Red Hat Enterprise Linux AppStream (v. 10)Fixed RHSA-2026:18134
Red Hat Enterprise Linux AppStream (v. 9)Fixed RHSA-2025:20518
Red Hat Enterprise Linux BaseOS (v. 10)Fixed RHSA-2026:18134
Red Hat Enterprise Linux BaseOS (v. 9)Fixed RHSA-2025:20518
Red Hat Enterprise Linux CodeReady Linux Builder (v. 10)Fixed RHSA-2026:18134
Red Hat Enterprise Linux CodeReady Linux Builder (v. 9)Fixed RHSA-2025:20518
Red Hat Enterprise Linux Real Time (v. 10)Fixed RHSA-2026:18134
Red Hat Enterprise Linux Real Time (v. 9)Fixed RHSA-2025:20518
Red Hat Enterprise Linux Real Time for NFV (v. 10)Fixed RHSA-2026:18134
Red Hat Enterprise Linux Real Time for NFV (v. 9)Fixed RHSA-2025:20518

Timeline

  1. 2026-10-02 Threatist record created from CVE-2025-21839
  2. 2026-10-03 Alias added: GHSA-m8v3-m369-c2xp
  3. 2026-10-16 CISA SSVC decision points changed
  4. 2026-10-29 Affected versions changed · Red Hat

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