summaryrefslogtreecommitdiffstats
path: root/mm/memblock.c
diff options
context:
space:
mode:
authorzijun_hu <zijun_hu@htc.com>2016-08-04 15:32:00 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2016-08-04 20:02:09 -0400
commite47608ab6dbe63fefe60c211a30b3fc78a1b5d5e (patch)
treee1b92f9ab8517f8be2f4faf673b97606acb5584a /mm/memblock.c
parent4b16b0c0bf416de61d14ac31703883d76395ed5f (diff)
downloadlinux-e47608ab6dbe63fefe60c211a30b3fc78a1b5d5e.tar.gz
linux-e47608ab6dbe63fefe60c211a30b3fc78a1b5d5e.tar.bz2
linux-e47608ab6dbe63fefe60c211a30b3fc78a1b5d5e.zip
mm/memblock.c: fix NULL dereference error
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>
Diffstat (limited to 'mm/memblock.c')
-rw-r--r--mm/memblock.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/mm/memblock.c b/mm/memblock.c
index 1f065da87327..483197ef613f 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -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--) {