From 03f36830923fdcd2003eddeb7c8dfca2bde28544 Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Fri, 29 Jan 2021 10:45:27 -0500 Subject: [PATCH] mm/mmap: Fix brk logic when there is no vma for brk Signed-off-by: Liam R. Howlett --- mm/mmap.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/mm/mmap.c b/mm/mmap.c index a327ec3f57a1..961d0294110b 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -268,8 +268,15 @@ SYSCALL_DEFINE1(brk, unsigned long, brk) goto out; brkvma = mas_prev(&ma_neighbour, mm->start_brk); - if (brkvma && (brkvma->vm_start >= oldbrk)) - goto out; // Trying to map over another vma. + if (likely(brkvma)) { + if (unlikely(brkvma->vm_start >= oldbrk)) + goto out; // Trying to map over another vma. + + if (unlikely(brkvma->vm_end <= min_brk)) { + brkvma = NULL; // No brk. + ma_neighbour = mas; + } + } /* Ok, looks good - let it rip. */ if (do_brk_flags(&mas, &ma_neighbour, &brkvma, oldbrk, -- 2.49.0