]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: VMX: Allow toggling bits in MSR_IA32_RTIT_CTL when enable bit is cleared
authorAdrian Hunter <adrian.hunter@intel.com>
Fri, 1 Nov 2024 18:50:31 +0000 (11:50 -0700)
committerSean Christopherson <seanjc@google.com>
Thu, 19 Dec 2024 15:34:10 +0000 (07:34 -0800)
Allow toggling other bits in MSR_IA32_RTIT_CTL if the enable bit is being
cleared, the existing logic simply ignores the enable bit.  E.g. KVM will
incorrectly reject a write of '0' to stop tracing.

Fixes: bf8c55d8dc09 ("KVM: x86: Implement Intel PT MSRs read/write emulation")
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
[sean: rework changelog, drop stable@]
Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com>
Link: https://lore.kernel.org/r/20241101185031.1799556-3-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/vmx/vmx.c

index 01abcdcbbf70abb010e437876816eea354d28e48..a17a1b390375a4d4552fd26cd57525a6b1498b1e 100644 (file)
@@ -1636,7 +1636,8 @@ static int vmx_rtit_ctl_check(struct kvm_vcpu *vcpu, u64 data)
         * result in a #GP unless the same write also clears TraceEn.
         */
        if ((vmx->pt_desc.guest.ctl & RTIT_CTL_TRACEEN) &&
-               ((vmx->pt_desc.guest.ctl ^ data) & ~RTIT_CTL_TRACEEN))
+           (data & RTIT_CTL_TRACEEN) &&
+           data != vmx->pt_desc.guest.ctl)
                return 1;
 
        /*