From: Liam R. Howlett Date: Wed, 20 Oct 2021 17:02:19 +0000 (-0400) Subject: mmap: Fix locking again in munmap X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=b515a22f62add2c40513cd0fba949093945d96bd;p=users%2Fjedix%2Flinux-maple.git mmap: Fix locking again in munmap Signed-off-by: Liam R. Howlett --- diff --git a/mm/mmap.c b/mm/mmap.c index d5fa26a1883d..babb05f8662c 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -2433,18 +2433,23 @@ do_mas_align_munmap(struct ma_state *mas, struct vm_area_struct *vma, downgrade = false; else if (prev && (prev->vm_flags & VM_GROWSUP)) downgrade = false; - else { - mas_unlock(mas); + else mmap_write_downgrade(mm); - } } + /* Have to unlock since unmap_vmas may sleep */ + mas_unlock(mas); unmap_region(mm, &mt_detach, vma, prev, next, start, end); + /* Statistics and freeing VMAs */ + /* Have to remain unlocked as remove_vma() might sleep */ remove_mt(mm, &mt_detach); - mtree_destroy(&mt_detach); + /* validate_mt() requires unlocking due to anon_vma check if DEBUG_RB*/ validate_mm(mm); + if (!downgrade) + mas_lock(mas); + mtree_destroy(&mt_detach); return downgrade ? 1 : 0; }