mm/memblock.c: fix NULL dereference error
authorzijun_hu <zijun_hu@htc.com>
Thu, 4 Aug 2016 22:32:00 +0000 (15:32 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 5 Aug 2016 00:02:09 +0000 (20:02 -0400)
It causes NULL dereference error and failure to get type_a->regions[0]
info if parameter type_b of __next_mem_range_rev() == NULL

Fix this by checking before dereferring and initializing idx_b to 0

The approach is tested by dumping all types of region via
__memblock_dump_all() and __next_mem_range_rev() fixed to UART
separately the result is okay after checking the logs.

Link: http://lkml.kernel.org/r/57A0320D.6070102@zoho.com
Signed-off-by: zijun_hu <zijun_hu@htc.com>
Tested-by: zijun_hu <zijun_hu@htc.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/memblock.c

index 1f065da..483197e 100644 (file)
@@ -994,7 +994,10 @@ void __init_memblock __next_mem_range_rev(u64 *idx, int nid, ulong flags,
 
        if (*idx == (u64)ULLONG_MAX) {
                idx_a = type_a->cnt - 1;
-               idx_b = type_b->cnt;
+               if (type_b != NULL)
+                       idx_b = type_b->cnt;
+               else
+                       idx_b = 0;
        }
 
        for (; idx_a >= 0; idx_a--) {