diff options
| author | Vitaly Kuznetsov <vkuznets@redhat.com> | 2020-07-08 16:00:23 +0200 | 
|---|---|---|
| committer | Paolo Bonzini <pbonzini@redhat.com> | 2020-07-09 07:08:37 -0400 | 
| commit | 995decb6c43e1d6e9d6a7d590471f2eea74600f4 (patch) | |
| tree | d4eae76f4d0582ab885c3d4c24685a0a59f60938 /virt | |
| parent | 5668821aefcbd8511740301de8bc9153c103a43a (diff) | |
| download | linux-995decb6c43e1d6e9d6a7d590471f2eea74600f4.tar.bz2 | |
KVM: x86: take as_id into account when checking PGD
OVMF booted guest running on shadow pages crashes on TRIPLE FAULT after
enabling paging from SMM. The crash is triggered from mmu_check_root() and
is caused by kvm_is_visible_gfn() searching through memslots with as_id = 0
while vCPU may be in a different context (address space).
Introduce kvm_vcpu_is_visible_gfn() and use it from mmu_check_root().
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Message-Id: <20200708140023.1476020-1-vkuznets@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'virt')
| -rw-r--r-- | virt/kvm/kvm_main.c | 8 | 
1 files changed, 8 insertions, 0 deletions
| diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 0a68c9d3d3ab..b528a59b0a84 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -1626,6 +1626,14 @@ bool kvm_is_visible_gfn(struct kvm *kvm, gfn_t gfn)  }  EXPORT_SYMBOL_GPL(kvm_is_visible_gfn); +bool kvm_vcpu_is_visible_gfn(struct kvm_vcpu *vcpu, gfn_t gfn) +{ +	struct kvm_memory_slot *memslot = kvm_vcpu_gfn_to_memslot(vcpu, gfn); + +	return kvm_is_visible_memslot(memslot); +} +EXPORT_SYMBOL_GPL(kvm_vcpu_is_visible_gfn); +  unsigned long kvm_host_page_size(struct kvm_vcpu *vcpu, gfn_t gfn)  {  	struct vm_area_struct *vma; |