From e361de0242a9e16a1f33750d142c9db752d689eb Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Tue, 27 Oct 2020 20:25:17 -0400 Subject: [PATCH] mm/mmap: Fix vma locking on brk Signed-off-by: Liam R. Howlett --- mm/mmap.c | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/mm/mmap.c b/mm/mmap.c index e173561e5022..ad63cc7cf3da 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -2896,33 +2896,16 @@ static int do_brk_munmap(struct vm_area_struct *vma, unsigned long newbrk, // Change the oldbrk of vma to the newbrk of the munmap area vma_adjust_trans_huge(vma, vma->vm_start, newbrk, 0); - if (vma->anon_vma) { - anon_vma_lock_write(vma->anon_vma); - anon_vma_interval_tree_pre_update_vma(vma); - } vma_mt_szero(vma->vm_mm, newbrk, vma->vm_end); vma->vm_end = newbrk; vmacache_invalidate(vma->vm_mm); - if (vma->anon_vma) { - anon_vma_interval_tree_post_update_vma(vma); - anon_vma_unlock_write(vma->anon_vma); - } - unmap_pages = vma_pages(&unmap); if (unmap.vm_flags & VM_LOCKED) { mm->locked_vm -= unmap_pages; munlock_vma_pages_range(&unmap, newbrk, oldbrk); } - // prev of unmap_pages is just vma. - if (vma->vm_flags & VM_GROWSUP) - ret = 0; - else if (vma->vm_next && (vma->vm_next->vm_flags & VM_GROWSDOWN)) - ret = 0; - - if (ret) - mmap_write_downgrade(mm); - + mmap_write_downgrade(mm); unmap_region(mm, &unmap, vma, newbrk, oldbrk); /* Statistics */ vm_stat_account(mm, unmap.vm_flags, -unmap_pages); @@ -2931,7 +2914,7 @@ static int do_brk_munmap(struct vm_area_struct *vma, unsigned long newbrk, munmap_full_vma: validate_mm_mt(mm); - return ret; + return 1; } /* -- 2.50.1