mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-09-13 14:56:11 -04:00
KVM: selftests: Expose PTE masks to guests as part of an MMU
Expose a guest_mmu to the guest to allow guest code to use the PTE masks for page table manipulation. Since guest page tables are not mapped in the guest by default, zero the PGD in guest_mmu in an attempt to make it more difficult for new tests to shoot themselves in the foot and assume that page tables can be immediately used by guest code. Ultimately, guest code can read CR3 any way, so guest_mmu.pgd doesn't add a lot of value. Suggested-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Yosry Ahmed <yosry@kernel.org> Link: https://patch.msgid.link/20260728174232.2423257-9-yosry@kernel.org Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
committed by
Sean Christopherson
parent
12f4d8b06a
commit
e21d4dc0ca
@@ -24,6 +24,7 @@ extern bool host_cpu_is_amd;
|
||||
extern bool host_cpu_is_hygon;
|
||||
extern bool host_cpu_is_amd_compatible;
|
||||
extern u64 guest_tsc_khz;
|
||||
extern struct kvm_mmu guest_mmu;
|
||||
|
||||
#ifndef MAX_NR_CPUID_ENTRIES
|
||||
#define MAX_NR_CPUID_ENTRIES 100
|
||||
|
||||
@@ -28,6 +28,7 @@ bool host_cpu_is_hygon;
|
||||
bool host_cpu_is_amd_compatible;
|
||||
bool is_forced_emulation_enabled;
|
||||
u64 guest_tsc_khz;
|
||||
struct kvm_mmu guest_mmu;
|
||||
|
||||
struct guest_regs guest_regs;
|
||||
|
||||
@@ -831,6 +832,17 @@ void kvm_arch_vm_post_create(struct kvm_vm *vm, unsigned int nr_vcpus)
|
||||
TEST_ASSERT(r > 0, "KVM_GET_TSC_KHZ did not provide a valid TSC frequency.");
|
||||
guest_tsc_khz = r;
|
||||
sync_global_to_guest(vm, guest_tsc_khz);
|
||||
|
||||
/*
|
||||
* The guest MMU is just a placeholder to provide access to PTE masks
|
||||
* (for now). The guest does not have mappings for its own page tables
|
||||
* by default, so any meaningful use of guest page tables requires
|
||||
* explicit setup by the test. Zero the PGD to make it obvious the guest
|
||||
* page tables are not immediately usable by guest code.
|
||||
*/
|
||||
guest_mmu = vm->mmu;
|
||||
guest_mmu.pgd = 0;
|
||||
sync_global_to_guest(vm, guest_mmu);
|
||||
}
|
||||
|
||||
void vcpu_arch_set_entry_point(struct kvm_vcpu *vcpu, void *guest_code)
|
||||
|
||||
Reference in New Issue
Block a user