In the Linux kernel, the following vulnerability has been resolved:
arm64/mm: fix incorrect filemapcount for invalid pmd
The page table check trigger BUG_ON() unexpectedly when split hugepage:
------------[ cut here ]------------ kernel BUG at mm/pagetablecheck.c:119! Internal error: Oops - BUG: 00000000f2000800 [#1] SMP Dumping ftrace buffer: (ftrace buffer empty) Modules linked in: CPU: 7 PID: 210 Comm: transhuge-stres Not tainted 6.1.0-rc3+ #748 Hardware name: linux,dummy-virt (DT) pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : pagetablecheckset.isra.0+0x398/0x468 lr : pagetablecheckset.isra.0+0x1c0/0x468 [...] Call trace: pagetablecheck_set.isra.0+0x398/0x468 __pagetablecheckpteset+0x160/0x1c0 __splithugepmd_locked+0x900/0x1648 __splithugepmd+0x28c/0x3b8 unmap_pagerange+0x428/0x858 unmapsinglevma+0xf4/0x1c8 zappagerange+0x2b0/0x410 madvisevmabehavior+0xc44/0xe78 domadvise+0x280/0x698 _arm64sysmadvise+0x90/0xe8 invokesyscall.constprop.0+0xdc/0x1d8 doel0svc+0xf4/0x3f8 el0svc+0x58/0x120 el0t64synchandler+0xb8/0xc0 el0t64sync+0x19c/0x1a0 [...]
On arm64, pmdleaf() will return true even if the pmd is invalid due to pmdpresentinvalid() check. So in pmdpinvalidate() the filemapcount will not only decrease once but also increase once. Then in setpteat(), the filemapcount increase again, and so trigger BUG_ON() unexpectedly.
Add !pmdpresentinvalid() check in pmduseraccessible_page() to fix the problem.
{
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2022/48xxx/CVE-2022-48897.json"
}[
{
"signature_type": "Line",
"deprecated": false,
"id": "CVE-2022-48897-aae6e800",
"target": {
"file": "arch/arm64/include/asm/pgtable.h"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"103018055793085398549219050941122367207",
"121902217310614962299391523459353346349",
"234617898214254618583781033206033146374",
"330382534119236508521481491714902273308"
]
},
"signature_version": "v1",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@21e5eca0ac9046da9918a919bc92b7b5a78d27e7"
}
]
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2022-48897.json"