Message ID | 1566178569-5674-1-git-send-email-huangzhaoyang@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] arch : arm : add a criteria for pfn_valid | expand |
On Mon, Aug 19, 2019 at 09:36:09AM +0800, Zhaoyang Huang wrote: > From: Zhaoyang Huang <zhaoyang.huang@unisoc.com> > > pfn_valid can be wrong when parsing a invalid pfn whose phys address > exceeds BITS_PER_LONG as the MSB will be trimed when shifted. I'd appreciate to see in the changelog that this could be triggered from userspace via /proc/kpageflags Otherwise: Reviewed-by: Mike Rapoport <rppt@linux.ibm.com> > Signed-off-by: Zhaoyang Huang <zhaoyang.huang@unisoc.com> > --- > arch/arm/mm/init.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c > index c2daabb..cc769fa 100644 > --- a/arch/arm/mm/init.c > +++ b/arch/arm/mm/init.c > @@ -177,6 +177,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) > { > + phys_addr_t addr = __pfn_to_phys(pfn); > + > + if (__phys_to_pfn(addr) != pfn) > + return 0; > + > return memblock_is_map_memory(__pfn_to_phys(pfn)); > } > EXPORT_SYMBOL(pfn_valid); > -- > 1.9.1 >
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index c2daabb..cc769fa 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c @@ -177,6 +177,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) { + phys_addr_t addr = __pfn_to_phys(pfn); + + if (__phys_to_pfn(addr) != pfn) + return 0; + return memblock_is_map_memory(__pfn_to_phys(pfn)); } EXPORT_SYMBOL(pfn_valid);