xtensa: fix lock_mm_and_find_vma in case VMA not found
authorMax Filippov <jcmvbkbc@gmail.com>
Sat, 1 Jul 2023 10:31:55 +0000 (03:31 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 1 Jul 2023 15:00:05 +0000 (08:00 -0700)
MMU version of lock_mm_and_find_vma releases the mm lock before
returning when VMA is not found. Do the same in noMMU version.
This fixes hang on an attempt to handle protection fault.

Fixes: d85a143b69ab ("xtensa: fix NOMMU build with lock_mm_and_find_vma() conversion")
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/nommu.c

index fdc3927..c072a66 100644 (file)
@@ -637,8 +637,13 @@ EXPORT_SYMBOL(find_vma);
 struct vm_area_struct *lock_mm_and_find_vma(struct mm_struct *mm,
                        unsigned long addr, struct pt_regs *regs)
 {
+       struct vm_area_struct *vma;
+
        mmap_read_lock(mm);
-       return vma_lookup(mm, addr);
+       vma = vma_lookup(mm, addr);
+       if (!vma)
+               mmap_read_unlock(mm);
+       return vma;
 }
 
 /*