Subject: CVE-2024-40948: mm/page_table_check: fix crash on ZONE_DEVICE

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

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

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

mm/page_table_check: fix crash on ZONE_DEVICE

Not all pages may apply to pgtable check.  One example is ZONE_DEVICE
pages: they map PFNs directly, and they don't allocate page_ext at all
even if there's struct page around.  One may reference
devm_memremap_pages().

When both ZONE_DEVICE and page-table-check enabled, then try to map some
dax memories, one can trigger kernel bug constantly now when the kernel
was trying to inject some pfn maps on the dax device:

 kernel BUG at mm/page_table_check.c:55!

While it's pretty legal to use set_pxx_at() for ZONE_DEVICE pages for page
fault resolutions, skip all the checks if page_ext doesn't even exist in
pgtable checker, which applies to ZONE_DEVICE but maybe more.

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

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

	Issue introduced in 5.17 with commit df4e817b7108 and fixed in 6.1.96 with commit 51897f99351f
	Issue introduced in 5.17 with commit df4e817b7108 and fixed in 6.6.36 with commit 84d3549d54f5
	Issue introduced in 5.17 with commit df4e817b7108 and fixed in 6.9.7 with commit dec238224786
	Issue introduced in 5.17 with commit df4e817b7108 and fixed in 6.10 with commit 8bb592c2eca8

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-40948
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:
	mm/page_table_check.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/51897f99351fff7b57f4f141940fa93b4e90fd2b
	https://git.kernel.org/stable/c/84d3549d54f5ff9fa3281257be3019386f51d1a0
	https://git.kernel.org/stable/c/dec2382247860d2134c8d41e103e26460c099629
	https://git.kernel.org/stable/c/8bb592c2eca8fd2bc06db7d80b38da18da4a2f43