Message ID | 1557887716-17918-1-git-send-email-anshuman.khandual@arm.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | 6b95ab4218bfa59bc315105127ffe03aef3b5742 |
Headers | show |
Series | [V4] mm/ioremap: Check virtual address alignment while creating huge mappings | expand |
On Wed, May 15, 2019 at 08:05:16AM +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@arm.com> > Cc: Toshi Kani <toshi.kani@hpe.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Will Deacon <will.deacon@arm.com> > Cc: Chintan Pandya <cpandya@codeaurora.org> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Catalin Marinas <catalin.marinas@arm.com> > --- > Changes in V4: > > - Added similar check for ioremap_try_huge_p4d() as per Toshi Kani Sorry to be a pain, but in future please can you just resend the entire series as a v4 (after giving it a few days for any other comments to come in) if you make an update? It's a bit fiddly tracking which replies to which individual patches need to be picked up, although I'm sure this varies between maintainers. No need to do anything this time, but just a small ask for future patches. Will
On 05/15/2019 03:16 PM, Will Deacon wrote: > On Wed, May 15, 2019 at 08:05:16AM +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@arm.com> >> Cc: Toshi Kani <toshi.kani@hpe.com> >> Cc: Andrew Morton <akpm@linux-foundation.org> >> Cc: Will Deacon <will.deacon@arm.com> >> Cc: Chintan Pandya <cpandya@codeaurora.org> >> Cc: Thomas Gleixner <tglx@linutronix.de> >> Cc: Catalin Marinas <catalin.marinas@arm.com> >> --- >> Changes in V4: >> >> - Added similar check for ioremap_try_huge_p4d() as per Toshi Kani > > Sorry to be a pain, but in future please can you just resend the entire > series as a v4 (after giving it a few days for any other comments to come > in) if you make an update? It's a bit fiddly tracking which replies to which > individual patches need to be picked up, although I'm sure this varies > between maintainers. I wondered for some time about both the ways before landing on this side as it was pretty minor change. I understand the concern and will follow the suggestion next time around. If this one requires further update, will make it V5 and carry the change logs from here. > > No need to do anything this time, but just a small ask for future patches. Sure will do.
On Wed, 2019-05-15 at 08:05 +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@arm.com> > Cc: Toshi Kani <toshi.kani@hpe.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Will Deacon <will.deacon@arm.com> > Cc: Chintan Pandya <cpandya@codeaurora.org> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Catalin Marinas <catalin.marinas@arm.com> > --- > Changes in V4: > > - Added similar check for ioremap_try_huge_p4d() as per Toshi Kani Thanks for the update. It looks good to me. Reviewed-by: Toshi Kani <toshi.kani@hpe.com> -Toshi
On Wed, May 15, 2019 at 08:05:16AM +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@arm.com> > Cc: Toshi Kani <toshi.kani@hpe.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Will Deacon <will.deacon@arm.com> > Cc: Chintan Pandya <cpandya@codeaurora.org> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: Catalin Marinas <catalin.marinas@arm.com> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> I guess Andrew can pick this up, otherwise I can queue it through arm64 (there are no arm64 dependencies on this). Thanks.
diff --git a/lib/ioremap.c b/lib/ioremap.c index 063213685563..a95161d9c883 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; @@ -166,6 +172,9 @@ static int ioremap_try_huge_p4d(p4d_t *p4d, unsigned long addr, if ((end - addr) != P4D_SIZE) return 0; + if (!IS_ALIGNED(addr, P4D_SIZE)) + return 0; + if (!IS_ALIGNED(phys_addr, P4D_SIZE)) return 0;
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@arm.com> Cc: Toshi Kani <toshi.kani@hpe.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Will Deacon <will.deacon@arm.com> Cc: Chintan Pandya <cpandya@codeaurora.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Catalin Marinas <catalin.marinas@arm.com> --- Changes in V4: - Added similar check for ioremap_try_huge_p4d() as per Toshi Kani lib/ioremap.c | 9 +++++++++ 1 file changed, 9 insertions(+)