]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: selftests: Verify KVM disable interception (for userspace) on filter change
authorSean Christopherson <seanjc@google.com>
Tue, 10 Jun 2025 22:57:37 +0000 (15:57 -0700)
committerSean Christopherson <seanjc@google.com>
Fri, 20 Jun 2025 20:07:38 +0000 (13:07 -0700)
Re-read MSR_{FS,GS}_BASE after restoring the "allow everything" userspace
MSR filter to verify that KVM stops forwarding exits to userspace.  This
can also be used in conjunction with manual verification (e.g. printk) to
ensure KVM is correctly updating the MSR bitmaps consumed by hardware.

Tested-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
Tested-by: Manali Shukla <Manali.Shukla@amd.com>
Link: https://lore.kernel.org/r/20250610225737.156318-33-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
tools/testing/selftests/kvm/x86/userspace_msr_exit_test.c

index 32b2794b78fece1172fbf44e63ff770e1507a965..8463a99564105180b4530da968a45755efec3e6d 100644 (file)
@@ -343,6 +343,12 @@ static void guest_code_permission_bitmap(void)
        data = test_rdmsr(MSR_GS_BASE);
        GUEST_ASSERT(data == MSR_GS_BASE);
 
+       /* Access the MSRs again to ensure KVM has disabled interception.*/
+       data = test_rdmsr(MSR_FS_BASE);
+       GUEST_ASSERT(data != MSR_FS_BASE);
+       data = test_rdmsr(MSR_GS_BASE);
+       GUEST_ASSERT(data != MSR_GS_BASE);
+
        GUEST_DONE();
 }
 
@@ -682,6 +688,8 @@ KVM_ONE_VCPU_TEST(user_msr, msr_permission_bitmap, guest_code_permission_bitmap)
                    "Expected ucall state to be UCALL_SYNC.");
        vm_ioctl(vm, KVM_X86_SET_MSR_FILTER, &filter_gs);
        run_guest_then_process_rdmsr(vcpu, MSR_GS_BASE);
+
+       vm_ioctl(vm, KVM_X86_SET_MSR_FILTER, &filter_allow);
        run_guest_then_process_ucall_done(vcpu);
 }