Thread (131 messages) 131 messages, 1 author, 2015-05-27
STALE4072d REVIEWED: 1 (0M)

[PATCH 3.16.y-ckt 055/129] arm/arm64: KVM: fix potential NULL dereference in user_mem_abort()

From: Luis Henriques <hidden>
Date: 2015-05-22 09:28:47
Also in: lkml
Subsystem: arm port, the rest · Maintainers: Russell King, Linus Torvalds

3.16.7-ckt12 -stable review patch.  If anyone has any objections, please let me know.

------------------

From: Ard Biesheuvel <redacted>

commit 37b544087ef3f65ca68465ba39291a07195dac26 upstream.

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

Acked-by: Marc Zyngier <redacted>
Signed-off-by: Ard Biesheuvel <redacted>
Signed-off-by: Christoffer Dall <redacted>
Signed-off-by: Shannon Zhao <redacted>
Signed-off-by: Luis Henriques <redacted>
---
 arch/arm/kvm/mmu.c | 6 ++++++
 1 file changed, 6 insertions(+)
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
index 40e52eeaf12f..0258b22bf9d1 100644
--- a/arch/arm/kvm/mmu.c
+++ b/arch/arm/kvm/mmu.c
@@ -778,6 +778,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 */
 	down_read(&current->mm->mmap_sem);
 	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)) {
 		hugetlb = true;
 		gfn = (fault_ipa & PMD_MASK) >> PAGE_SHIFT;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help