From: AKASHI Takahiro <takahiro.akashi@linaro.org>
Date: Fri, 10 Mar 2017 00:17:17 +0000 (-0800)
Subject: mm/memblock.c: fix memblock_next_valid_pfn()
X-Git-Tag: v4.11-rc2~15^2~8
X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=c9a1b80daeb50e39f21fd7e62f7224f317ac85f0;p=users%2Fdwmw2%2Flinux.git

mm/memblock.c: fix memblock_next_valid_pfn()

Obviously, we should not access memblock.memory.regions[right] if
'right' is outside of [0..memblock.memory.cnt>.

Fixes: b92df1de5d28 ("mm: page_alloc: skip over regions of invalid pfns where possible")
Link: http://lkml.kernel.org/r/20170303023745.9104-1-takahiro.akashi@linaro.org
Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Cc: Paul Burton <paul.burton@imgtec.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
---

diff --git a/mm/memblock.c b/mm/memblock.c
index b64b47803e529..696f06d17c4e8 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -1118,7 +1118,10 @@ unsigned long __init_memblock memblock_next_valid_pfn(unsigned long pfn,
 		}
 	} while (left < right);
 
-	return min(PHYS_PFN(type->regions[right].base), max_pfn);
+	if (right == type->cnt)
+		return max_pfn;
+	else
+		return min(PHYS_PFN(type->regions[right].base), max_pfn);
 }
 
 /**