Re: [PATCH] ARM: mm: align hugetlb mappings to the huge page size
From: Muchun Song
Date: Thu Sep 24 2026 - 04:42:00 EST
> On Sep 1, 2026, at 16:57, Karl Mehltretter <kmehltretter@xxxxxxxxx> wrote:
>
> mmap(MAP_HUGETLB) on 32-bit Arm can return an address which is not
> aligned to the huge page size. In a QEMU virt guest, unmapping the VMA
> then hits the alignment check in __unmap_hugepage_range():
>
> kernel BUG at mm/hugetlb.c:5213!
> Internal error: Oops - BUG: 0 [#1] SMP ARM
> PC is at __unmap_hugepage_range+0x540/0x584
> LR is at __zap_vma_range+0x13a0/0x1410
>
> Commit 7bd3f1e1a9ae ("mm: make hugetlb mappings go through
> mm_get_unmapped_area_vmflags") made hugetlb mappings use the
> architecture's arch_get_unmapped_area(). The generic implementations
> handle hugetlb alignment, but the Arm implementations only account for
> the optional SHMLBA cache-colouring constraint. A 4 KiB-page kernel can
> therefore align the mapping to 4 KiB or 16 KiB instead of the required
> 2 MiB.
>
> Set the alignment mask from the file's hstate for hugetlb mappings in
> both Arm implementations. Huge-page alignment also satisfies the
> SHMLBA constraint.
>
> Fixes: 7bd3f1e1a9ae ("mm: make hugetlb mappings go through mm_get_unmapped_area_vmflags")
> Cc: stable@xxxxxxxxxxxxxxx
> Assisted-by: LLM
> Signed-off-by: Karl Mehltretter <kmehltretter@xxxxxxxxx>
Besides 32-bit Arm, the same regression appears to affect MIPS and
SuperH: both support HugeTLB and provide custom arch_get_unmapped_area*()
implementations that only enforce cache-colouring alignment, not the
hstate’s huge-page alignment.
Acked-by: Muchun Song <muchun.song@xxxxxxxxx>
Thanks.