KernelScan.io

HIGH Introduced in 3.7

arm64 ShowPte UAF

CVE-2026-93239

CVSS 7.4 / 10.0 KernelScan AI

CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H

01

In the Linux kernel, the following vulnerability has been resolved: arm64: mm: Fix the lockless page-table walk in show_pte() show_pte() walks page tables locklessly and can run with interrupts enabled. A concurrent teardown can free a table page while it is being walked. It can also clear a parent entry after show_pte() checked it; the regular pXd_offset() helpers then reread the cleared entry and can derive a bogus lower-level pointer and fault again. Use the lockless offset helpers with the saved parent entries, as gup_fast() does, and pass the saved PMD to pte_offset_map(). For task page tables, arm64 selects MMU_GATHER_RCU_TABLE_FREE. Disable local interrupts around the walk to hold off RCU-deferred table frees and block the tlb_remove_table_sync_one() IPI until the walk is finished. Place the IRQ guard after the header print. This does not make the output a consistent snapshot, but prevents the task page-table walk from dereferencing a released table page or deriving a pointer from a different parent value.

02

Engine v0.6.0

Risk summary

Any local process on an arm64 system can trigger a race condition in the kernel's page-table diagnostic path, causing use-after-free when page tables are concurrently torn down during a page fault. This can crash the kernel or potentially leak kernel memory from freed pages. No special privileges are required to trigger the race.

Affectedarch/arm64/mm/fault.c (arm64 mm)

Vulnerability analysis

The kernel's page-table diagnostic routine on arm64 walks page tables without holding locks or disabling interrupts, so a concurrent memory unmap operation can free a page-table page while it is still being read. A concurrent teardown can also clear a parent entry after it was checked, causing the standard offset helpers to reread the cleared value and derive a bogus lower-level pointer. The fix switches to lockless offset helpers that use saved copies of parent entries, passes the locally saved PMD value instead of a pointer to the live page, and disables local interrupts for the duration of the walk to block RCU-deferred page frees. Any local process can trigger this by inducing a page fault on an address whose page tables are being concurrently torn down by another thread or by munmap; no special privileges are required.

03

BranchIntroducedFixed inPatch commit
6.63.76.6.15708d931a0a850
6.123.76.12.110b28fe65a36b8
6.183.76.18.5168cbd70795dd
7.23.77.2.50f05d95b9916
mainline3.77.3-rc2a77644d009de
cip/6.123.76.12.111-cip32b28fe65a36b8