diff --git a/arch/x86/mm/pat/memtype.c b/arch/x86/mm/pat/memtype.c
index bdc2a240c2aa..0f2cfe595686 100644
--- a/arch/x86/mm/pat/memtype.c
+++ b/arch/x86/mm/pat/memtype.c
@@ -954,8 +954,12 @@ static int follow_phys(struct vm_area_struct *vma, unsigned long *prot,
 	pte_t *ptep, pte;
 	spinlock_t *ptl;
 
-	if (follow_pte(vma, vma->vm_start, &ptep, &ptl))
+	mmap_read_lock(vma->mm);
+	if (follow_pte(vma, vma->vm_start, &ptep, &ptl)) {
+		mmap_read_unlock(current->mm);
 		return -EINVAL;
+	}
+	mmap_read_unlock(vma->mm);
 
 	pte = ptep_get(ptep);