aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Mattson <jmattson@google.com>2018-05-09 17:02:05 -0400
committerPaolo Bonzini <pbonzini@redhat.com>2018-05-14 12:24:26 -0400
commit3a2936dedd207b99c64bf1507a62a9ae44114220 (patch)
tree137cbab7344cb910caa650f51cf3fea92ebb85c8
parent1313cc2bd8f6568dd8801feef446afbe43e6d313 (diff)
kvm: mmu: Don't expose private memslots to L2
These private pages have special purposes in the virtualization of L1, but not in the virtualization of L2. In particular, L1's APIC access page should never be entered into L2's page tables, because this causes a great deal of confusion when the APIC virtualization hardware is being used to accelerate L2's accesses to its own APIC. Signed-off-by: Jim Mattson <jmattson@google.com> Signed-off-by: Krish Sadhukhan <krish.sadhukhan@oracle.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r--arch/x86/kvm/mmu.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
index ca04766edbd4..8af8c8f88bd7 100644
--- a/arch/x86/kvm/mmu.c
+++ b/arch/x86/kvm/mmu.c
@@ -3807,6 +3807,14 @@ static bool try_async_pf(struct kvm_vcpu *vcpu, bool prefault, gfn_t gfn,
3807 struct kvm_memory_slot *slot; 3807 struct kvm_memory_slot *slot;
3808 bool async; 3808 bool async;
3809 3809
3810 /*
3811 * Don't expose private memslots to L2.
3812 */
3813 if (is_guest_mode(vcpu) && !kvm_is_visible_gfn(vcpu->kvm, gfn)) {
3814 *pfn = KVM_PFN_NOSLOT;
3815 return false;
3816 }
3817
3810 slot = kvm_vcpu_gfn_to_memslot(vcpu, gfn); 3818 slot = kvm_vcpu_gfn_to_memslot(vcpu, gfn);
3811 async = false; 3819 async = false;
3812 *pfn = __gfn_to_pfn_memslot(slot, gfn, false, &async, write, writable); 3820 *pfn = __gfn_to_pfn_memslot(slot, gfn, false, &async, write, writable);