From 7f3e23b3d8d57702d55c6d20e978da33b38ea546 Mon Sep 17 00:00:00 2001 From: Patrick Daly Date: Fri, 29 Sep 2017 18:04:45 -0700 Subject: [PATCH] ANDROID: GKI: of: reserved_mem: Fix kmemleak crash on no-map region Unable to handle kernel paging request at virtual address [] scan_block+0x88/0x170 [] scan_gray_list+0x18c/0x1c0 [] kmemleak_scan+0x208/0x4b0 [] kmemleak_write+0x338/0x378 [] full_proxy_write+0x80/0xe4 [] vfs_write+0xb4/0x1d0 early_init_dt_alloc_reserved_memory_arch() calls memblock_alloc_base(), which will create a kmemleak entry. Ensure this entry is ignored if the no-map property is set. This will prevent kmemleak from scanning the object if there is no kernel mapping for it. Bug: 153490586 Test: compile, verify MODVERSIONS CRC Change-Id: I45f35600ae2aacf0f10f8bcbc956d019b666e4a7 Signed-off-by: Patrick Daly Signed-off-by: Sudarshan Rajagopalan (cherry picked from commit cf512e1d2cae0d957674b5442a653ae5efb0a249) Signed-off-by: Will McVicker --- drivers/of/of_reserved_mem.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c index 895c83e0c7b6..779d62284b9d 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -20,6 +20,7 @@ #include #include #include +#include #define MAX_RESERVED_REGIONS 32 static struct reserved_mem reserved_mem[MAX_RESERVED_REGIONS]; @@ -50,8 +51,10 @@ int __init __weak early_init_dt_alloc_reserved_memory_arch(phys_addr_t size, } *res_base = base; - if (nomap) + if (nomap) { + kmemleak_ignore_phys(base); return memblock_remove(base, size); + } return 0; } #else