CVE-2025-21839 json
KVM: x86: Load DR6 with guest value only before entering .vcpu_run() loop
published 2025-03-07 20 mo ago modified 2026-10-15 24 d ago also EUVD-2025-7590
- cvss
- 7.3
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.2%
- EPSS 0.2% chance of exploitation in 30 days, percentile 13%
- public exploits
- 0
- none known
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---
Patch / fix
- Linux Linux 5.15.182, 6.1.138, 6.6.90, 6.12.16, 6.13.4, 6.14
- linux Debian 12 6.1.140-1
- linux Debian 14, Debian 13 6.12.16-1
debian advisories DEBIAN-CVE-2025-21839
- linux Ubuntu 22.04 LTS 5.15.0-144.157
- linux Ubuntu 24.04 LTS 6.8.0-78.78
- linux-aws Ubuntu 22.04 LTS 5.15.0-1088.95
- linux-aws Ubuntu 24.04 LTS 6.8.0-1035.37
- linux-gcp Ubuntu 22.04 LTS 5.15.0-1087.96
- linux-gcp Ubuntu 24.04 LTS 6.8.0-1036.38
- linux-gke Ubuntu 22.04 LTS 5.15.0-1085.91
- linux-gke Ubuntu 24.04 LTS 6.8.0-1032.36
ubuntu advisories UBUNTU-CVE-2025-21839
Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
- kernel RHEL 10.2 6.12.0-211.7.1.el10_2
- rv RHEL 10.2 6.12.0-211.7.1.el10_2
- perf RHEL 10.2 6.12.0-211.7.1.el10_2
- rtla RHEL 10.2 6.12.0-211.7.1.el10_2
- libperf RHEL 10.2 6.12.0-211.7.1.el10_2
- kernel-rt RHEL 10.2 6.12.0-211.7.1.el10_2
- kernel-64k RHEL 10.2 6.12.0-211.7.1.el10_2
- kernel-core RHEL 10.2 6.12.0-211.7.1.el10_2
red hat advisories RHSA-2026:18134RHSA-2025:20518
- kernel-rt Real Time Module 15 SP6, openSUSE Leap 15.6 6.4.0-150600.10.49.1
- kernel-syms-rt Real Time Module 15 SP6, openSUSE Leap 15.6 6.4.0-150600.10.49.1
- kernel-rt_debug Real Time Module 15 SP6, openSUSE Leap 15.6 6.4.0-150600.10.49.1
- kernel-source-rt Real Time Module 15 SP6, openSUSE Leap 15.6 6.4.0-150600.10.49.1
- kernel-azure SLE Module for Public Cloud 15 SP7 6.4.0-150700.20.11.1
- kernel-syms-azure SLE Module for Public Cloud 15 SP7 6.4.0-150700.20.11.1
- kernel-source-azure SLE Module for Public Cloud 15 SP7 6.4.0-150700.20.11.1
- kernel-64kb SLE Module for Basesystem 15 SP7 6.4.0-150700.53.11.1
suse advisories SUSE-SU-2025:03023-1SUSE-SU-2025:03011-1SUSE-SU-2025:02997-1SUSE-SU-2025:02996-1SUSE-SU-2025:20586-1SUSE-SU-2025:20602-1
- kernel AlmaLinux 10 6.12.0-211.7.1.el10_2
- rv AlmaLinux 10 6.12.0-211.7.1.el10_2
- perf AlmaLinux 10 6.12.0-211.7.1.el10_2
- rtla AlmaLinux 10 6.12.0-211.7.1.el10_2
- libperf AlmaLinux 10 6.12.0-211.7.1.el10_2
- kernel-rt AlmaLinux 10 6.12.0-211.7.1.el10_2
- kernel-64k AlmaLinux 10 6.12.0-211.7.1.el10_2
- kernel-core AlmaLinux 10 6.12.0-211.7.1.el10_2
almalinux advisories ALSA-2026:18134ALSA-2025:20518
- kernel Rocky Linux 9 5.14.0-611.5.1.el9_7
rocky linux advisories RLSA-2025:20518
- git.kernel.org/stable/c/9efb2b99b96c86664bbdbdd2cdb354ac9627eb20 commit
- git.kernel.org/stable/c/93eeb6df1605b3a24f38afdba7ab903ba6b64133 commit
- git.kernel.org/stable/c/a1723e9c53fe6431415be19302a56543daf503f5 commit
- git.kernel.org/stable/c/4eb063de686bfcdfd03a8c801d1bbe87d2d5eb55 commit
- git.kernel.org/stable/c/d456de38d9eb753a4e9fde053c18d4ef8e485339 commit
- git.kernel.org/stable/c/c2fee09fc167c74a64adb08656cb993ea475197e commit
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2025-21839 updated cvss 5.5
kernel: KVM: x86: Load DR6 with guest value only before entering .vcpu_run() loop
-
Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 more Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 more Red Hat Enterprise Linux 8 perf, kernel, bpftool, kernel-rt, kernel-core, kernel-tools, +29 moreaffected: no fix planned “Out of support scope”
-
Red Hat Enterprise Linux AppStream (v. 9) rv 5.14.0-611.5.1.el9_7, perf 5.14.0-611.5.1.el9_7, rtla 5.14.0-611.5.1.el9_7, python3-perf 5.14.0-611.5.1.el9_7, kernel-devel-matched 5.14.0-611.5.1.el9_7, kernel-64k-devel-matched 5.14.0-611.5.1.el9_7, +7 morefixed: vendor fix RHSA-2025:20518
-
Red Hat Enterprise Linux AppStream (v. 10) rv 6.12.0-211.7.1.el10_2, perf 6.12.0-211.7.1.el10_2, rtla 6.12.0-211.7.1.el10_2, python3-perf 6.12.0-211.7.1.el10_2, kernel-devel-matched 6.12.0-211.7.1.el10_2, kernel-64k-devel-matched 6.12.0-211.7.1.el10_2, +7 morefixed: vendor fix RHSA-2026:18134
-
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-core 5.14.0-611.5.1.el9_7, kernel-tools 5.14.0-611.5.1.el9_7, kernel-modules 5.14.0-611.5.1.el9_7, kernel-64k-core 5.14.0-611.5.1.el9_7, +27 morefixed: vendor fix RHSA-2025:20518
-
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-core 6.12.0-211.7.1.el10_2, kernel-tools 6.12.0-211.7.1.el10_2, kernel-modules 6.12.0-211.7.1.el10_2, kernel-64k-core 6.12.0-211.7.1.el10_2, +28 morefixed: vendor fix RHSA-2026:18134
-
Red Hat Enterprise Linux CodeReady Linux Builder (v. 9) libperf 5.14.0-611.5.1.el9_7, kernel-debuginfo-common-s390x 5.14.0-611.5.1.el9_7, kernel-debuginfo-common-x86_64 5.14.0-611.5.1.el9_7, kernel-debuginfo-common-aarch64 5.14.0-611.5.1.el9_7, kernel-debuginfo-common-ppc64le 5.14.0-611.5.1.el9_7fixed: vendor fix RHSA-2025:20518
-
Red Hat Enterprise Linux CodeReady Linux Builder (v. 10) libperf 6.12.0-211.7.1.el10_2, kernel-debuginfo-common-s390x 6.12.0-211.7.1.el10_2, kernel-debuginfo-common-x86_64 6.12.0-211.7.1.el10_2, kernel-debuginfo-common-aarch64 6.12.0-211.7.1.el10_2, kernel-debuginfo-common-ppc64le 6.12.0-211.7.1.el10_2fixed: vendor fix RHSA-2026:18134
-
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-core 5.14.0-611.5.1.el9_7, kernel-rt-modules 5.14.0-611.5.1.el9_7, kernel-rt-64k-core 5.14.0-611.5.1.el9_7, kernel-rt-debug-core 5.14.0-611.5.1.el9_7, +14 morefixed: vendor fix RHSA-2025:20518
show 3 moreshow fewer
-
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-core 6.12.0-211.7.1.el10_2, kernel-rt-modules 6.12.0-211.7.1.el10_2, kernel-rt-64k-core 6.12.0-211.7.1.el10_2, kernel-rt-debug-core 6.12.0-211.7.1.el10_2, +14 morefixed: vendor fix RHSA-2026:18134
-
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-modules 5.14.0-611.5.1.el9_7, kernel-rt-debug-core 5.14.0-611.5.1.el9_7, kernel-rt-modules-core 5.14.0-611.5.1.el9_7, kernel-rt-debug-modules 5.14.0-611.5.1.el9_7, +4 morefixed: vendor fix RHSA-2025:20518
-
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-modules 6.12.0-211.7.1.el10_2, kernel-rt-debug-core 6.12.0-211.7.1.el10_2, kernel-rt-modules-core 6.12.0-211.7.1.el10_2, kernel-rt-debug-modules 6.12.0-211.7.1.el10_2, +4 morefixed: vendor fix RHSA-2026:18134
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
CISA SSVC
- Exploitation
- none
- Automatable
- no
- Technical impact
- partial
- Assessed
- 24 d ago
Exploit prediction
0.23% chance of exploitation in the next 30 days, higher than 13% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.1 | 7.3 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:L/A:H |
| NVD | 3.1 | 5.5 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H |
Affected products
- Linux Linux
Classification
- Technology feeds
References
-
git.kernel.org
/stable/c/9efb2b99b96c86664bbdbdd2cdb354ac9627eb20
patch
-
git.kernel.org
/stable/c/93eeb6df1605b3a24f38afdba7ab903ba6b64133
patch
-
git.kernel.org
/stable/c/a1723e9c53fe6431415be19302a56543daf503f5
patch
-
git.kernel.org
/stable/c/4eb063de686bfcdfd03a8c801d1bbe87d2d5eb55
patch
-
git.kernel.org
/stable/c/d456de38d9eb753a4e9fde053c18d4ef8e485339
patch
-
git.kernel.org
/stable/c/c2fee09fc167c74a64adb08656cb993ea475197e
patch
- lists.debian.org /debian-lts-announce/2025/08/msg00010.html
Sources
- CVE List CVE-2025-21839
- NVD CVE-2025-21839
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.