Bug 1227801 (CVE-2024-40948)

Summary: VUL-0: CVE-2024-40948: kernel: mm/page_table_check: fix crash on ZONE_DEVICE
Product: [Novell Products] SUSE Security Incidents Reporter: SMASH SMASH <smash_bz>
Component: IncidentsAssignee: Security Team bot <security-team>
Status: NEW --- QA Contact: Security Team bot <security-team>
Severity: Normal    
Priority: P3 - Medium CC: mgorman, mhocko, miroslav.franc, rfrohl, vbabka
Version: unspecified   
Target Milestone: ---   
Hardware: Other   
OS: Other   
URL: https://smash.suse.de/issue/413875/
Whiteboard: CVSSv3.1:SUSE:CVE-2024-40948:5.5:(AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)
Found By: Security Response Team Services Priority:
Business Priority: Blocker: ---
Marketing QA Status: --- IT Deployment: ---

Description SMASH SMASH 2024-07-15 12:53:11 UTC
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.

References:
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2024-40948
https://www.cve.org/CVERecord?id=CVE-2024-40948
https://git.kernel.org/stable/c/51897f99351fff7b57f4f141940fa93b4e90fd2b
https://git.kernel.org/stable/c/84d3549d54f5ff9fa3281257be3019386f51d1a0
https://git.kernel.org/stable/c/8bb592c2eca8fd2bc06db7d80b38da18da4a2f43
https://git.kernel.org/stable/c/dec2382247860d2134c8d41e103e26460c099629
https://git.kernel.org/pub/scm/linux/security/vulns.git/plain/cve/published/2024/CVE-2024-40948.mbox
Comment 2 Michal Hocko 2024-07-17 15:30:25 UTC
We do not enable CONFIG_PAGE_TABLE_CHECK_ENFORCED so this debugging feature needs to be enabled explicitly by page_table_check kernel command line parameter.

Strictly speaking this is not a security threat for SLES kernels. The fix is reasonable so I have backported it anyway.