CVE-2024-40950

mm: huge_memory: fix misused mapping_large_folio_support() for anon folios

published July 12, 2024

CVSS
—
EPSS
0%
Percentile
10.3
In the wild
Unconfirmed
What it is

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

mm: huge_memory: fix misused mapping_large_folio_support() for anon folios

When I did a large folios split test, a WARNING "[ 5059.122759][ T166]

Cannot split file folio to non-0 order" was triggered. But the test cases

are only for anonmous folios. while mapping_large_folio_support() is only

reasonable for page cache folios.

In split_huge_page_to_list_to_order(), the folio passed to

mapping_large_folio_support() maybe anonmous folio. The folio_test_anon()

check is missing. So the split of the anonmous THP is failed. This is

also the same for shmem_mapping(). We'd better add a check for both. But

the shmem_mapping() in __split_huge_page() is not involved, as for

anonmous folios, the end parameter is set to -1, so (head[i].index >= end)

is always false. shmem_mapping() is not called.

Also add a VM_WARN_ON_ONCE() in mapping_large_folio_support() for anon

mapping, So we can detect the wrong use more easily.

THP folios maybe exist in the pagecache even the file system doesn't

support large folio, it is because when CONFIG_TRANSPARENT_HUGEPAGE is

enabled, khugepaged will try to collapse read-only file-backed pages to

THP. But the mapping does not actually support multi order large folios

properly.

Using /sys/kernel/debug/split_huge_pages to verify this, with this patch,

large anon THP is successfully split and the warning is ceased.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00208 · 10.3th percentile
Published
2024-07-12T12:31Z
EPSS history
Timeline
  • 12 JUL 12:31Z
    mm: huge_memory: fix misused mapping_large_folio_support() for anon folios
    cvelistv5