]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
KVM: VMX: Allow guest to set DEBUGCTL.RTM_DEBUG if RTM is supported
authorSean Christopherson <seanjc@google.com>
Fri, 15 Aug 2025 00:57:21 +0000 (17:57 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Aug 2025 16:30:16 +0000 (18:30 +0200)
[ Upstream commit 17ec2f965344ee3fd6620bef7ef68792f4ac3af0 ]

Let the guest set DEBUGCTL.RTM_DEBUG if RTM is supported according to the
guest CPUID model, as debug support is supposed to be available if RTM is
supported, and there are no known downsides to letting the guest debug RTM
aborts.

Note, there are no known bug reports related to RTM_DEBUG, the primary
motivation is to reduce the probability of breaking existing guests when a
future change adds a missing consistency check on vmcs12.GUEST_DEBUGCTL
(KVM currently lets L2 run with whatever hardware supports; whoops).

Note #2, KVM already emulates DR6.RTM, and doesn't restrict access to
DR7.RTM.

Fixes: 83c529151ab0 ("KVM: x86: expose Intel cpu new features (HLE, RTM) to guest")
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20250610232010.162191-5-seanjc@google.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/x86/include/asm/msr-index.h
arch/x86/kvm/vmx/vmx.c

index 7ebe76f69417ae23a55cdb5ccf089c54b2d01ae0..2b6e3127ef4e2d9232c165e50e9acd5d1f703cc5 100644 (file)
 #define DEBUGCTLMSR_FREEZE_PERFMON_ON_PMI      (1UL << 12)
 #define DEBUGCTLMSR_FREEZE_IN_SMM_BIT  14
 #define DEBUGCTLMSR_FREEZE_IN_SMM      (1UL << DEBUGCTLMSR_FREEZE_IN_SMM_BIT)
+#define DEBUGCTLMSR_RTM_DEBUG          BIT(15)
 
 #define MSR_PEBS_FRONTEND              0x000003f7
 
index b9c7940feac6baf5fc8a0f9bd62d521815118275..529a10bba056d1dc7e5283862591c58314d2ef90 100644 (file)
@@ -2185,6 +2185,10 @@ static u64 vmx_get_supported_debugctl(struct kvm_vcpu *vcpu, bool host_initiated
            (host_initiated || intel_pmu_lbr_is_enabled(vcpu)))
                debugctl |= DEBUGCTLMSR_LBR | DEBUGCTLMSR_FREEZE_LBRS_ON_PMI;
 
+       if (boot_cpu_has(X86_FEATURE_RTM) &&
+           (host_initiated || guest_cpuid_has(vcpu, X86_FEATURE_RTM)))
+               debugctl |= DEBUGCTLMSR_RTM_DEBUG;
+
        return debugctl;
 }