mm/page_alloc: restrict and formalize compound_page_dtors[]
authorAnshuman Khandual <anshuman.khandual@arm.com>
Wed, 3 Jun 2020 22:59:17 +0000 (15:59 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 4 Jun 2020 03:09:45 +0000 (20:09 -0700)
Restrict elements in compound_page_dtors[] array per NR_COMPOUND_DTORS and
explicitly position them according to enum compound_dtor_id.  This
improves protection against possible misalignment between
compound_page_dtors[] and enum compound_dtor_id later on.

Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: David Hildenbrand <david@redhat.com>
Link: http://lkml.kernel.org/r/1589795958-19317-1-git-send-email-anshuman.khandual@arm.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/mm.h
mm/page_alloc.c

index 4141ebcb3a654c3d9c7232c50d03c026a2224e49..32f3c17715ac00d35dc66d2da93c52c59f39de43 100644 (file)
@@ -867,7 +867,7 @@ enum compound_dtor_id {
 #endif
        NR_COMPOUND_DTORS,
 };
-extern compound_page_dtor * const compound_page_dtors[];
+extern compound_page_dtor * const compound_page_dtors[NR_COMPOUND_DTORS];
 
 static inline void set_compound_page_dtor(struct page *page,
                enum compound_dtor_id compound_dtor)
index d95442f7e4781d6e3a17e411c05f1f5ff9f19e67..045c4aeeec9ad760a73217ac1757b9da4674c901 100644 (file)
@@ -302,14 +302,14 @@ const char * const migratetype_names[MIGRATE_TYPES] = {
 #endif
 };
 
-compound_page_dtor * const compound_page_dtors[] = {
-       NULL,
-       free_compound_page,
+compound_page_dtor * const compound_page_dtors[NR_COMPOUND_DTORS] = {
+       [NULL_COMPOUND_DTOR] = NULL,
+       [COMPOUND_PAGE_DTOR] = free_compound_page,
 #ifdef CONFIG_HUGETLB_PAGE
-       free_huge_page,
+       [HUGETLB_PAGE_DTOR] = free_huge_page,
 #endif
 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
-       free_transhuge_page,
+       [TRANSHUGE_PAGE_DTOR] = free_transhuge_page,
 #endif
 };