CVE-2022-49778

arm64/mm: fix incorrect file_map_count for non-leaf pmd/pud

published May 1, 2025

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

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

arm64/mm: fix incorrect file_map_count for non-leaf pmd/pud

The page table check trigger BUG_ON() unexpectedly when collapse hugepage:

------------[ cut here ]------------

kernel BUG at mm/page_table_check.c:82!

Internal error: Oops - BUG: 00000000f2000800 [#1] SMP

Dumping ftrace buffer:

(ftrace buffer empty)

Modules linked in:

CPU: 6 PID: 68 Comm: khugepaged Not tainted 6.1.0-rc3+ #750

Hardware name: linux,dummy-virt (DT)

pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)

pc : page_table_check_clear.isra.0+0x258/0x3f0

lr : page_table_check_clear.isra.0+0x240/0x3f0

[...]

Call trace:

page_table_check_clear.isra.0+0x258/0x3f0

__page_table_check_pmd_clear+0xbc/0x108

pmdp_collapse_flush+0xb0/0x160

collapse_huge_page+0xa08/0x1080

hpage_collapse_scan_pmd+0xf30/0x1590

khugepaged_scan_mm_slot.constprop.0+0x52c/0xac8

khugepaged+0x338/0x518

kthread+0x278/0x2f8

ret_from_fork+0x10/0x20

[...]

Since pmd_user_accessible_page() doesn't check if a pmd is leaf, it

decrease file_map_count for a non-leaf pmd comes from collapse_huge_page().

and so trigger BUG_ON() unexpectedly.

Fix this problem by using pmd_leaf() insteal of pmd_present() in

pmd_user_accessible_page(). Moreover, use pud_leaf() for

pud_user_accessible_page() too.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00170 · 6.1th percentile
Published
2025-05-01T14:09Z
EPSS history
Timeline
  • 01 MAY 14:09Z
    arm64/mm: fix incorrect file_map_count for non-leaf pmd/pud
    cvelistv5