CVE-2026-93239: arm64: mm: Fix the lockless page-table walk in show_pte()

Published Sep 24, 2026
·
Updated

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

arm64: mm: Fix the lockless page-table walk in showpte()

showpte() 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 showpte() checked it; the regular pXdoffset() 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 gupfast() does, and pass the saved PMD to pteoffsetmap().

For task page tables, arm64 selects MMUGATHERRCUTABLEFREE. Disable local interrupts around the walk to hold off RCU-deferred table frees and block the tlbremovetablesyncone() 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.

Affected Software

1 affected component
Linux Linux kernel

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Configuration

    Disable MMU_GATHER_RCU_TABLE_FREE for task page tables.

    arm64 task page tables MMU_GATHER_RCU_TABLE_FREE = disabled

Event History

Sep 24, 2026
CVE Published
via MITRE·03:34 PM
Data Sourced
via MITRE·03:34 PM
Description
Data Sourced
via NVD·04:17 PM
Description

Frequently Asked Questions

1

When can this race be triggered?

It requires show_pte() to walk task page tables while another context concurrently tears down those page tables. The walk runs locklessly with interrupts enabled, allowing a table page to be freed or a parent entry to change during traversal.

2

What is the practical impact of the race?

show_pte() can dereference a released page-table page or derive a lower-level page-table pointer from a parent entry that has since been cleared. This can cause another fault during the diagnostic page-table walk.

3

Does the fix make show_pte() output a consistent page-table snapshot?

No. The change prevents dereferences of released table pages and pointers derived from changed parent entries, but the output can still reflect concurrent page-table changes.

4

What protection does the fix add for task page tables?

It uses lockless offset helpers with saved parent entries and passes the saved PMD to pte_offset_map(). It also disables local interrupts during the walk so RCU-deferred table frees and the relevant TLB synchronization IPI cannot complete until the walk finishes.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203