arm/arm64: KVM: fix potential NULL dereference in user_mem_abort()

Handle the potential NULL return value of find_vma_intersection()
before dereferencing it.

Acked-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
This commit is contained in:
Ard Biesheuvel 2014-09-17 14:56:17 -07:00 committed by Christoffer Dall
parent e9e8578b6c
commit 37b544087e

View File

@ -776,6 +776,12 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
/* Let's check if we will get back a huge page backed by hugetlbfs */ /* Let's check if we will get back a huge page backed by hugetlbfs */
down_read(&current->mm->mmap_sem); down_read(&current->mm->mmap_sem);
vma = find_vma_intersection(current->mm, hva, hva + 1); vma = find_vma_intersection(current->mm, hva, hva + 1);
if (unlikely(!vma)) {
kvm_err("Failed to find VMA for hva 0x%lx\n", hva);
up_read(&current->mm->mmap_sem);
return -EFAULT;
}
if (is_vm_hugetlb_page(vma)) { if (is_vm_hugetlb_page(vma)) {
hugetlb = true; hugetlb = true;
gfn = (fault_ipa & PMD_MASK) >> PAGE_SHIFT; gfn = (fault_ipa & PMD_MASK) >> PAGE_SHIFT;