On Thu, 2019-05-09 at 10:16 +0530, Anshuman Khandual wrote: > Virtual address alignment is essential in ensuring correct clearing for all > intermediate level pgtable entries and freeing associated pgtable pages. An > unaligned address can end up randomly freeing pgtable page that potentially > still contains valid mappings. Hence also check it's alignment along with > existing phys_addr check. > > Signed-off-by: Anshuman Khandual <anshuman.khandual@xxxxxxx> > Cc: Toshi Kani <toshi.kani@xxxxxxx> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Cc: Will Deacon <will.deacon@xxxxxxx> > Cc: Chintan Pandya <cpandya@xxxxxxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: Catalin Marinas <catalin.marinas@xxxxxxx> > --- > lib/ioremap.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/lib/ioremap.c b/lib/ioremap.c > index 063213685563..8b5c8dda857d 100644 > --- a/lib/ioremap.c > +++ b/lib/ioremap.c > @@ -86,6 +86,9 @@ static int ioremap_try_huge_pmd(pmd_t *pmd, unsigned long addr, > if ((end - addr) != PMD_SIZE) > return 0; > > + if (!IS_ALIGNED(addr, PMD_SIZE)) > + return 0; > + > if (!IS_ALIGNED(phys_addr, PMD_SIZE)) > return 0; > > @@ -126,6 +129,9 @@ static int ioremap_try_huge_pud(pud_t *pud, unsigned long addr, > if ((end - addr) != PUD_SIZE) > return 0; > > + if (!IS_ALIGNED(addr, PUD_SIZE)) > + return 0; > + > if (!IS_ALIGNED(phys_addr, PUD_SIZE)) > return 0; Not sure if we have such case today, but I agree that it is prudent to have such checks. Is there any reason not to add this check to p4d for consistency? Thanks, -Toshi