Skip to content

Commit 7b4f21f

Browse files
davidhildenbrandakpm00
authored andcommitted
mm/hugetlb: check for unreasonable folio sizes when registering hstate
Let's check that no hstate that corresponds to an unreasonable folio size is registered by an architecture. If we were to succeed registering, we could later try allocating an unsupported gigantic folio size. Further, let's add a BUILD_BUG_ON() for checking that HUGETLB_PAGE_ORDER is sane at build time. As HUGETLB_PAGE_ORDER is dynamic on powerpc, we have to use a BUILD_BUG_ON_INVALID() to make it compile. No existing kernel configuration should be able to trigger this check: either SPARSEMEM without SPARSEMEM_VMEMMAP cannot be configured or gigantic folios will not exceed a memory section (the case on sparse). Link: https://lkml.kernel.org/r/20250901150359.867252-9-david@redhat.com Signed-off-by: David Hildenbrand <david@redhat.com> Reviewed-by: Zi Yan <ziy@nvidia.com> Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> Reviewed-by: Liam R. Howlett <Liam.Howlett@oracle.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
1 parent 646b67d commit 7b4f21f

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

mm/hugetlb.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4657,6 +4657,7 @@ static int __init hugetlb_init(void)
46574657

46584658
BUILD_BUG_ON(sizeof_field(struct page, private) * BITS_PER_BYTE <
46594659
__NR_HPAGEFLAGS);
4660+
BUILD_BUG_ON_INVALID(HUGETLB_PAGE_ORDER > MAX_FOLIO_ORDER);
46604661

46614662
if (!hugepages_supported()) {
46624663
if (hugetlb_max_hstate || default_hstate_max_huge_pages)
@@ -4740,6 +4741,7 @@ void __init hugetlb_add_hstate(unsigned int order)
47404741
}
47414742
BUG_ON(hugetlb_max_hstate >= HUGE_MAX_HSTATE);
47424743
BUG_ON(order < order_base_2(__NR_USED_SUBPAGE));
4744+
WARN_ON(order > MAX_FOLIO_ORDER);
47434745
h = &hstates[hugetlb_max_hstate++];
47444746
__mutex_init(&h->resize_lock, "resize mutex", &h->resize_key);
47454747
h->order = order;

0 commit comments

Comments
 (0)