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.
Unified · Split
| @@ -867,7 +867,7 @@ enum compound_dtor_id { · 866 unmodified lines | ||
| 867 | 867 | #endif |
| 868 | 868 | NR_COMPOUND_DTORS, |
| 869 | 869 | }; |
| 870 | −extern compound_page_dtor * const compound_page_dtors[]; | |
| 870 | +extern compound_page_dtor * const compound_page_dtors[NR_COMPOUND_DTORS]; | |
| 871 | 871 | |
| 872 | 872 | static inline void set_compound_page_dtor(struct page *page, |
| 873 | 873 | enum compound_dtor_id compound_dtor) |
| @@ -302,14 +302,14 @@ const char * const migratetype_names[MIGRATE_TYPES] = { · 301 unmodified lines | ||
| 302 | 302 | #endif |
| 303 | 303 | }; |
| 304 | 304 | |
| 305 | −compound_page_dtor * const compound_page_dtors[] = { | |
| 306 | − NULL, | |
| 307 | − free_compound_page, | |
| 305 | +compound_page_dtor * const compound_page_dtors[NR_COMPOUND_DTORS] = { | |
| 306 | + [NULL_COMPOUND_DTOR] = NULL, | |
| 307 | + [COMPOUND_PAGE_DTOR] = free_compound_page, | |
| 308 | 308 | #ifdef CONFIG_HUGETLB_PAGE |
| 309 | − free_huge_page, | |
| 309 | + [HUGETLB_PAGE_DTOR] = free_huge_page, | |
| 310 | 310 | #endif |
| 311 | 311 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE |
| 312 | − free_transhuge_page, | |
| 312 | + [TRANSHUGE_PAGE_DTOR] = free_transhuge_page, | |
| 313 | 313 | #endif |
| 314 | 314 | }; |
| 315 | 315 | |