Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit acb9cd81 authored by qqzhou's avatar qqzhou
Browse files

arm: mm: init: check for upper PAGE_SHIFT bits in pfn_valid()



If the pfn passed is too big and invalid, the checks in
pfn_valid() will pass because it misses to check overflow.
This will cause that calculated page pointer is overflow and
invalid, then kernel panic happens. Add checks for pfn overflow
in pfn_valid().

Change-Id: I461fb5db8de52f2249b4f70f188d6c5bfe6902f4
Signed-off-by: default avatarqqzhou <qqzhou@codeaurora.org>
parent 4d705047
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -192,7 +192,11 @@ static void __init zone_sizes_init(unsigned long min, unsigned long max_low,
#ifdef CONFIG_HAVE_ARCH_PFN_VALID
int pfn_valid(unsigned long pfn)
{
	return memblock_is_map_memory(__pfn_to_phys(pfn));
	phys_addr_t addr = __pfn_to_phys(pfn);

	if (__phys_to_pfn(addr) != pfn)
		return 0;
	return memblock_is_map_memory(addr);
}
EXPORT_SYMBOL(pfn_valid);
#endif