Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 909ba297 authored by Masahiro Yamada's avatar Masahiro Yamada Committed by Russell King
Browse files

ARM: 8292/1: mm: fix size rounding-down of arm_add_memory() function



The current rounding of "size" is wrong:

 - If "start" is sufficiently near the next page boundary, "size"
   is decremented by more than enough and the last page is lost.

 - If "size" is sufficiently small, it is wrapped around and gets
   a bogus value.

Signed-off-by: default avatarMasahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
Acked-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 2d9ed740
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -657,10 +657,13 @@ int __init arm_add_memory(u64 start, u64 size)

	/*
	 * Ensure that start/size are aligned to a page boundary.
	 * Size is appropriately rounded down, start is rounded up.
	 * Size is rounded down, start is rounded up.
	 */
	size -= start & ~PAGE_MASK;
	aligned_start = PAGE_ALIGN(start);
	if (aligned_start > start + size)
		size = 0;
	else
		size -= aligned_start - start;

#ifndef CONFIG_ARCH_PHYS_ADDR_T_64BIT
	if (aligned_start > ULONG_MAX) {