[PATCHv2] arm64: mm: Fix VM_BUG_ON(mm != &init_mm) for trans_pgd

Pasha Tatashin pasha.tatashin at soleen.com
Fri Nov 12 06:37:18 PST 2021


On Fri, Nov 12, 2021 at 12:22 AM Pingfan Liu <kernelfans at gmail.com> wrote:
>
> trans_pgd_create_copy() can hit "VM_BUG_ON(mm != &init_mm)" in the
> function pmd_populate_kernel().
>
> This is the combined consequence of commit 5de59884ac0e ("arm64:
> trans_pgd: pass NULL instead of init_mm to *_populate functions"), which
> replaced &init_mm with NULL and commit 59511cfd08f3 ("arm64: mm: use XN
> table mapping attributes for user/kernel mappings"), which introduced
> the VM_BUG_ON.
>
> Since the former sounds reasonable, it is better to work on the later.
> From the perspective of trans_pgd, two groups of functions are
> considered in the later one:
>
>   pmd_populate_kernel()
>     mm == NULL should be fixed, else it hits VM_BUG_ON()
>   p?d_populate()
>     mm == NULL means PXN, that is OK, since trans_pgd only copies a
>     linear map, no execution will happen on the map.
>
> So it is good enough to just relax VM_BUG_ON() to disregard mm == NULL
>
> Fixes: 59511cfd08f3 ("arm64: mm: use XN table mapping attributes for user/kernel mappings")
> Signed-off-by: Pingfan Liu <kernelfans at gmail.com>
> Cc: Catalin Marinas <catalin.marinas at arm.com>
> Cc: Ard Biesheuvel <ardb at kernel.org>
> Cc: Will Deacon <will at kernel.org>
> Cc: Pasha Tatashin <pasha.tatashin at soleen.com>
> Cc: James Morse <james.morse at arm.com>
> Cc: Matthias Brugger <mbrugger at suse.com>
> To: linux-arm-kernel at lists.infradead.org
> ---
>  arch/arm64/include/asm/pgalloc.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm64/include/asm/pgalloc.h b/arch/arm64/include/asm/pgalloc.h
> index 8433a2058eb1..237224484d0f 100644
> --- a/arch/arm64/include/asm/pgalloc.h
> +++ b/arch/arm64/include/asm/pgalloc.h
> @@ -76,7 +76,7 @@ static inline void __pmd_populate(pmd_t *pmdp, phys_addr_t ptep,
>  static inline void
>  pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmdp, pte_t *ptep)
>  {
> -       VM_BUG_ON(mm != &init_mm);
> +       VM_BUG_ON(mm && mm != &init_mm);

LGTM

Reviewed-by: Pasha Tatashin <pasha.tatashin at soleen.com>

Pasha



More information about the linux-arm-kernel mailing list