Subject: CVE-2024-35993: mm: turn folio_test_hugetlb into a PageType

From: Greg Kroah-Hartman <[email-masked]>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

mm: turn folio_test_hugetlb into a PageType

The current folio_test_hugetlb() can be fooled by a concurrent folio split
into returning true for a folio which has never belonged to hugetlbfs. 
This can't happen if the caller holds a refcount on it, but we have a few
places (memory-failure, compaction, procfs) which do not and should not
take a speculative reference.

Since hugetlb pages do not use individual page mapcounts (they are always
fully mapped and use the entire_mapcount field to record the number of
mappings), the PageType field is available now that page_mapcount()
ignores the value in this field.

In compaction and with CONFIG_DEBUG_VM enabled, the current implementation
can result in an oops, as reported by Luis. This happens since 9c5ccf2db04b
("mm: remove HUGETLB_PAGE_DTOR") effectively added some VM_BUG_ON() checks
in the PageHuge() testing path.

[[email-masked]: update vmcoreinfo]
  Link: https://lkml.kernel.org/r/[email-masked]

The Linux kernel CVE team has assigned CVE-2024-35993 to this issue.

Affected and fixed versions
===========================

	Issue introduced in 6.6 with commit 9c5ccf2db04b and fixed in 6.6.30 with commit 2431b5f2650d
	Issue introduced in 6.6 with commit 9c5ccf2db04b and fixed in 6.8.9 with commit 9fdcc5b6359d
	Issue introduced in 6.6 with commit 9c5ccf2db04b and fixed in 6.9 with commit d99e3140a4d3

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2024-35993
will be updated if fixes are backported, please check that for the most
up to date information about this issue.

Affected files
==============

The file(s) affected by this issue are:
	include/linux/page-flags.h
	include/trace/events/mmflags.h
	kernel/vmcore_info.c
	mm/hugetlb.c

Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/2431b5f2650dfc47ce782d1ca7b02d6b3916976f
	https://git.kernel.org/stable/c/9fdcc5b6359dfdaa52a55033bf50e2cedd66eb32
	https://git.kernel.org/stable/c/d99e3140a4d33e26066183ff727d8f02f56bec64