mm: validate the mm before dropping the mmap lock
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 3 Jul 2023 17:08:50 +0000 (10:08 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 3 Jul 2023 17:08:50 +0000 (10:08 -0700)
Commit 408579cd627a ("mm: Update do_vmi_align_munmap() return
semantics") made the return value and locking semantics of
do_vmi_align_munmap() more straightforward, but in the process it ended
up unlocking the mmap lock just a tad too early: the debug code doing
the mmap layout validation still needs to run with the lock held, or
things might change under it while it's trying to validate things.

So just move the unlocking to after the validate_mm() call.

Reported-by: kernel test robot <oliver.sang@intel.com>
Link: https://lore.kernel.org/lkml/ZKIsoMOT71uwCIZX@xsang-OptiPlex-9020/
Fixes: 408579cd627a ("mm: Update do_vmi_align_munmap() return semantics")
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/mmap.c

index 51e70fa984503cd937654ad977b49c8196f84129..547b405317915a871773b9f1c60411ab70437ecd 100644 (file)
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2554,11 +2554,10 @@ do_vmi_align_munmap(struct vma_iterator *vmi, struct vm_area_struct *vma,
        mas_set(&mas_detach, start);
        remove_mt(mm, &mas_detach);
        __mt_destroy(&mt_detach);
+       validate_mm(mm);
        if (unlock)
                mmap_read_unlock(mm);
 
-
-       validate_mm(mm);
        return 0;
 
 clear_tree_failed: