folio_split_supported() used in try_folio_split_to_order() requires folio->mapping to be non NULL, but current try_folio_split_to_order() does not check it. Add the check to prevent NULL pointer dereference. There is no issue in the current code, since try_folio_split_to_order() is only used in truncate_inode_partial_folio(), where folio->mapping is not NULL. Signed-off-by: Zi Yan --- include/linux/huge_mm.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index 1d439de1ca2c..0d55354e3a34 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -407,6 +407,13 @@ static inline int split_huge_page_to_order(struct page *page, unsigned int new_o static inline int try_folio_split_to_order(struct folio *folio, struct page *page, unsigned int new_order) { + /* + * Folios that just got truncated cannot get split. Signal to the + * caller that there was a race. + */ + if (!folio_test_anon(folio) && !folio->mapping) + return -EBUSY; + if (!folio_split_supported(folio, new_order, SPLIT_TYPE_NON_UNIFORM, /* warns= */ false)) return split_huge_page_to_order(&folio->page, new_order); return folio_split(folio, new_order, page, NULL); -- 2.51.0