summaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/kvm/include/x86_64
diff options
context:
space:
mode:
authorJim Mattson <jmattson@google.com>2020-10-26 11:09:22 -0700
committerPaolo Bonzini <pbonzini@redhat.com>2020-10-31 10:04:38 -0400
commit97a71a5455997d72adfd74e9d575d782d7c2ab9a (patch)
treee0457dba18b679dfb5fa2c5fee815104cfc46495 /tools/testing/selftests/kvm/include/x86_64
parentd383b3146d805a743658225c8973f5d38c6fedf4 (diff)
downloadlinux-97a71a5455997d72adfd74e9d575d782d7c2ab9a.tar.gz
linux-97a71a5455997d72adfd74e9d575d782d7c2ab9a.tar.bz2
linux-97a71a5455997d72adfd74e9d575d782d7c2ab9a.zip
KVM: selftests: test behavior of unmapped L2 APIC-access address
Add a regression test for commit 671ddc700fd0 ("KVM: nVMX: Don't leak L1 MMIO regions to L2"). First, check to see that an L2 guest can be launched with a valid APIC-access address that is backed by a page of L1 physical memory. Next, set the APIC-access address to a (valid) L1 physical address that is not backed by memory. KVM can't handle this situation, so resuming L2 should result in a KVM exit for internal error (emulation). Signed-off-by: Jim Mattson <jmattson@google.com> Reviewed-by: Ricardo Koller <ricarkol@google.com> Reviewed-by: Peter Shier <pshier@google.com> Message-Id: <20201026180922.3120555-1-jmattson@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'tools/testing/selftests/kvm/include/x86_64')
-rw-r--r--tools/testing/selftests/kvm/include/x86_64/vmx.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/tools/testing/selftests/kvm/include/x86_64/vmx.h b/tools/testing/selftests/kvm/include/x86_64/vmx.h
index 54d624dd6c10..e78d7e26ba61 100644
--- a/tools/testing/selftests/kvm/include/x86_64/vmx.h
+++ b/tools/testing/selftests/kvm/include/x86_64/vmx.h
@@ -573,6 +573,10 @@ struct vmx_pages {
void *eptp_hva;
uint64_t eptp_gpa;
void *eptp;
+
+ void *apic_access_hva;
+ uint64_t apic_access_gpa;
+ void *apic_access;
};
union vmx_basic {
@@ -615,5 +619,7 @@ void nested_map_memslot(struct vmx_pages *vmx, struct kvm_vm *vm,
uint32_t memslot, uint32_t eptp_memslot);
void prepare_eptp(struct vmx_pages *vmx, struct kvm_vm *vm,
uint32_t eptp_memslot);
+void prepare_virtualize_apic_accesses(struct vmx_pages *vmx, struct kvm_vm *vm,
+ uint32_t eptp_memslot);
#endif /* SELFTEST_KVM_VMX_H */