From: Liam R. Howlett <Liam.Howlett@Oracle.com>
Date: Fri, 29 Jan 2021 15:45:27 +0000 (-0500)
Subject: mm/mmap: Fix brk logic when there is no vma for brk
X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Fmaple3;p=users%2Fjedix%2Flinux-maple.git

mm/mmap: Fix brk logic when there is no vma for brk

Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>
---

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,