userfaultfd: fix deadlock warning when locking src and dst VMAs
authorLokesh Gidra <lokeshgidra@google.com>
Thu, 21 Mar 2024 23:58:18 +0000 (16:58 -0700)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 26 Mar 2024 18:07:23 +0000 (11:07 -0700)
Use down_read_nested() to avoid the warning.

Link: https://lkml.kernel.org/r/20240321235818.125118-1-lokeshgidra@google.com
Fixes: 867a43a34ff8 ("userfaultfd: use per-vma locks in userfaultfd operations")
Reported-by: syzbot+49056626fe41e01f2ba7@syzkaller.appspotmail.com
Signed-off-by: Lokesh Gidra <lokeshgidra@google.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Axel Rasmussen <axelrasmussen@google.com>
Cc: Brian Geffon <bgeffon@google.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Hillf Danton <hdanton@sina.com>
Cc: Jann Horn <jannh@google.com> [Bug #2]
Cc: Kalesh Singh <kaleshsingh@google.com>
Cc: Lokesh Gidra <lokeshgidra@google.com>
Cc: Mike Rapoport (IBM) <rppt@kernel.org>
Cc: Nicolas Geoffray <ngeoffray@google.com>
Cc: Peter Xu <peterx@redhat.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/userfaultfd.c

index 712160cd41ecac1a875ad4afb5b565dddc4bc2f2..3c3539c573e7fec47b2ac883e18d7644d40197c3 100644 (file)
@@ -1444,7 +1444,8 @@ static int uffd_move_lock(struct mm_struct *mm,
                 */
                down_read(&(*dst_vmap)->vm_lock->lock);
                if (*dst_vmap != *src_vmap)
-                       down_read(&(*src_vmap)->vm_lock->lock);
+                       down_read_nested(&(*src_vmap)->vm_lock->lock,
+                                        SINGLE_DEPTH_NESTING);
        }
        mmap_read_unlock(mm);
        return err;