ARM: 8590/1: sanity_check_meminfo(): avoid overflow on vmalloc_limit
authorNicolas Pitre <nicolas.pitre@linaro.org>
Thu, 28 Jul 2016 18:38:07 +0000 (19:38 +0100)
committerRussell King <rmk+kernel@armlinux.org.uk>
Tue, 9 Aug 2016 21:57:40 +0000 (22:57 +0100)
commitb9a019899f61acca18df5fb5e38a8fcdfea86fcd
treeb82cffdfbc870cf30555cfe57459559d62a60eee
parent29b4817d4018df78086157ea3a55c1d9424a7cfc
ARM: 8590/1: sanity_check_meminfo(): avoid overflow on vmalloc_limit

To limit the amount of mapped low memory, we determine a physical address
boundary based on the start of the vmalloc area using __pa().
Strictly speaking, the vmalloc area location is arbitrary and does not
necessarily corresponds to a valid physical address. For example, if

PAGE_OFFSET = 0x80000000
PHYS_OFFSET = 0x90000000
vmalloc_min = 0xf0000000

then __pa(vmalloc_min) overflows and returns a wrapped 0 when phys_addr_t
is a 32-bit type. Then the code that follows determines that the entire
physical memory is above that boundary and no low memory gets mapped at
all:

|[...]
|Machine model: Freescale i.MX51 NA04 Board
|Ignoring RAM at 0x90000000-0xb0000000 (!CONFIG_HIGHMEM)
|Consider using a HIGHMEM enabled kernel.

To avoid this problem let's make vmalloc_limit a 64-bit value all the
time and determine that boundary explicitly without using __pa().

Reported-by: Emil Renner Berthing <kernel@esmil.dk>
Signed-off-by: Nicolas Pitre <nico@linaro.org>
Tested-by: Emil Renner Berthing <kernel@esmil.dk>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mm/mmu.c
This page took 0.027093 seconds and 5 git commands to generate.