]> git.baikalelectronics.ru Git - kernel.git/commitdiff
KVM: selftests: Trust that MAXPHYADDR > memslot0 in vmx_apic_access_test
authorSean Christopherson <seanjc@google.com>
Tue, 3 May 2022 21:48:59 +0000 (14:48 -0700)
committerPaolo Bonzini <pbonzini@redhat.com>
Sat, 11 Jun 2022 15:47:26 +0000 (11:47 -0400)
Use vm->max_gfn to compute the highest gpa in vmx_apic_access_test, and
blindly trust that the highest gfn/gpa will be well above the memory
carved out for memslot0.  The existing check is beyond paranoid; KVM
doesn't support CPUs with host.MAXPHYADDR < 32, and the selftests are all
kinds of hosed if memslot0 overlaps the local xAPIC, which resides above
"lower" (below 4gb) DRAM.

Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
tools/testing/selftests/kvm/x86_64/vmx_apic_access_test.c

index ef7514376b1e5c91bde31d7afbdf7b45063a0c47..ccb05ef7234e0964a09e4025b82d34370c760699 100644 (file)
@@ -72,8 +72,6 @@ static void l1_guest_code(struct vmx_pages *vmx_pages, unsigned long high_gpa)
 int main(int argc, char *argv[])
 {
        unsigned long apic_access_addr = ~0ul;
-       unsigned int paddr_width;
-       unsigned int vaddr_width;
        vm_vaddr_t vmx_pages_gva;
        unsigned long high_gpa;
        struct vmx_pages *vmx;
@@ -86,12 +84,7 @@ int main(int argc, char *argv[])
 
        vm = vm_create_with_one_vcpu(&vcpu, l1_guest_code);
 
-       kvm_get_cpu_address_width(&paddr_width, &vaddr_width);
-       high_gpa = (1ul << paddr_width) - getpagesize();
-       if ((unsigned long)DEFAULT_GUEST_PHY_PAGES * getpagesize() > high_gpa) {
-               print_skip("No unbacked physical page available");
-               exit(KSFT_SKIP);
-       }
+       high_gpa = (vm->max_gfn - 1) << vm->page_shift;
 
        vmx = vcpu_alloc_vmx(vm, &vmx_pages_gva);
        prepare_virtualize_apic_accesses(vmx, vm);