summaryrefslogtreecommitdiffstats
path: root/mm/mmap.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2023-07-03 19:08:50 +0200
committerLinus Torvalds <torvalds@linux-foundation.org>2023-07-03 19:08:50 +0200
commitae80b404198434e49e903dc3b1ba83e2c7bb3ee2 (patch)
tree309b930f2e2d85877b425a9034457b93b5b8729e /mm/mmap.c
parentexecve: always mark stack as growing down during early stack setup (diff)
downloadlinux-ae80b404198434e49e903dc3b1ba83e2c7bb3ee2.tar.xz
linux-ae80b404198434e49e903dc3b1ba83e2c7bb3ee2.zip
mm: validate the mm before dropping the mmap lock
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>
Diffstat (limited to 'mm/mmap.c')
-rw-r--r--mm/mmap.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/mm/mmap.c b/mm/mmap.c
index 51e70fa98450..547b40531791 100644
--- 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: