On Mon, Aug 19, 2019 at 09:36:09AM +0800, Zhaoyang Huang wrote: > From: Zhaoyang Huang <zhaoyang.huang@xxxxxxxxxx> > > 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@xxxxxxxxxxxxx> > Signed-off-by: Zhaoyang Huang <zhaoyang.huang@xxxxxxxxxx> > --- > 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 > -- Sincerely yours, Mike.