of: Fix wrong kmemleak ignore in reserved_mem 48/251948/2
authorSeung-Woo Kim <sw0312.kim@samsung.com>
Thu, 21 Jan 2021 06:22:52 +0000 (15:22 +0900)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Thu, 21 Jan 2021 06:56:33 +0000 (15:56 +0900)
If size is 0, then kmemleak object found for ignore object is not
properly working and ignore should work for create kmemleak object.
Fix the wrong kmemleak ignore usages in of_reserved_mem.

This removes below kmemleak warnings:
   kmemleak: Not scanning unknown object at 0xffffffc0f4807000
   kmemleak: Not scanning unknown object at 0xffffffc0f4800000
   kmemleak: Not scanning unknown object at 0xffffffc007400000
   ...
   [<ffffff900af159b0>] kmemleak_no_scan+0xd8/0xe8
   [<ffffff900ba72d1c>] kmemleak_init+0x260/0x504
   ..
   kmemleak: Early log backtrace:
      log_early+0x1d8/0x268
      kmemleak_no_scan+0xbc/0xe8
      fdt_init_reserved_mem+0x8b4/0x928
      early_init_fdt_scan_reserved_mem+0x100/0x13c
      arm64_memblock_init+0x310/0x388
   ...

Change-Id: Idac1f672b06373f6eb7485d63b60747f2cf9f5b5
Fixes: commit 47a87b6930cd ("kmemleak: shouldn't scan reserved memory")
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
drivers/of/of_reserved_mem.c

index 0d706be..c4a7b04 100644 (file)
@@ -315,13 +315,15 @@ void __init fdt_init_reserved_mem(void)
                if (prop)
                        rmem->phandle = of_read_number(prop, len/4);
 
-               if (rmem->size == 0)
+               if (rmem->size == 0) {
                        err = __reserved_mem_alloc_size(node, rmem->name,
                                                 &rmem->base, &rmem->size);
 
 #ifdef CONFIG_AMLOGIC_MODIFY
-               kmemleak_no_scan(phys_to_virt(rmem->base));
+                       if (!err && rmem->size)
+                               kmemleak_no_scan(phys_to_virt(rmem->base));
 #endif
+               }
 
                if (err == 0)
                        __reserved_mem_init_node(rmem);