From: sashiko-bot@kernel.org
To: "Kevin Brodsky" <kevin.brodsky@arm.com>
Cc: "Andrew Morton" <akpm@linux-foundation.org>,
"Ard Biesheuvel" <ardb+git@google.com>,
"Andy Lutomirski" <luto@kernel.org>,
"Catalin Marinas" <catalin.marinas@arm.com>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
"David Hildenbrand (Arm)" <david@kernel.org>,
"Jann Horn" <jannh@google.com>, "Jeff Xu" <jeffxu@chromium.org>,
"Joey Gouly" <joey.gouly@arm.com>, "Kees Cook" <kees@kernel.org>,
"Linu Cherian" <linu.cherian@arm.com>,
"Linus Walleij" <linusw@kernel.org>,
"Marc Zyngier" <maz@kernel.org>,
"Mark Brown" <broonie@kernel.org>,
"Matthew Wilcox" <willy@infradead.org>,
"Maxwell Bland" <mbland@motorola.com>,
"Mike Rapoport (IBM)" <rppt@kernel.org>,
"Peter Zijlstra" <peterz@infradead.org>,
"Pierre Langlois" <pierre.langlois@arm.com>,
"Pierre-Clément Tosi" <ptosi@google.com>,
"Quentin Perret" <qperret@google.com>,
"Rick Edgecombe" <rick.p.edgecombe@intel.com>,
"Ryan Roberts" <ryan.roberts@arm.com>,
"Vlastimil Babka" <vbabka@kernel.org>,
"Will Deacon" <will@kernel.org>,
"Yang Shi" <yang@os.amperecomputing.com>,
"Yeoreum Yun" <yeoreum.yun@arm.com>,
linux-mm@kvack.org, x86@kernel.org,
"Ira Weiny" <iweiny@kernel.org>,
"Lorenzo Stoakes" <ljs@kernel.org>,
"Thomas Gleixner" <tglx@kernel.org>
Subject: Re: [PATCH RFC v10 20/22] arm64: kpkeys: Enable kpkeys_hardened_pgtables support
Date: Tue, 10 Nov 2026 16:02:57 +0000 [thread overview]
Message-ID: <sashiko-outbox-207334@kernel.org> (raw)
In-Reply-To: <20261109-kpkeys-v10-20-aa6c4d9603bc@arm.com>
Thank you for your contribution! Sashiko AI review found 2 potential
issues to consider:
- [High] arm64: mm: preserved pkey in trans_pgd_create_copy() faults on
kexec/hibernate
- [Medium] mm: kpkeys: redundant KASAN shadow walks in
protect_early_kernel_pgtables()
--
commit 974504a027662a7ee9def760c6976edfcfbc634c
Author: Kevin Brodsky <kevin.brodsky@arm.com>
arm64: kpkeys: Enable kpkeys_hardened_pgtables support
This commit selects ARCH_HAS_KPKEYS_HARDENED_PGTABLES under ARM64_POE to
enable kpkeys_hardened_pgtables support on arm64.
> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
> index f7e4ffbc07ac2..28023dd0fd4b0 100644
> --- a/arch/arm64/Kconfig
> +++ b/arch/arm64/Kconfig
> @@ -2301,6 +2301,7 @@ config ARM64_POE
> select ARCH_USES_HIGH_VMA_FLAGS
> select ARCH_HAS_PKEYS
> select ARCH_HAS_KPKEYS
> + select ARCH_HAS_KPKEYS_HARDENED_PGTABLES
[Severity: High]
Does enabling CONFIG_KPKEYS_HARDENED_PGTABLES cause hibernation resume and
kexec relocation to fault when writing through the transitional linear map?
When kpkeys_hardened_pgtables is active, linear-map PTEs for page table
pages carry KPKEYS_PKEY_PGTABLES, which is read-only under POR_EL1_INIT.
Both swsusp_arch_resume() and machine_kexec_post_load() call
trans_pgd_create_copy() to build a writable copy of the linear map so
swsusp_arch_suspend_exit() and arm64_relocate_new_kernel() can overwrite
existing kernel memory, including page tables:
arch/arm64/mm/trans_pgd.c:copy_pte() {
...
__set_pte(dst_ptep, pte_mkvalid_k(pte_mkwrite_novma(pte)));
...
}
Neither pte_mkwrite_novma() nor pte_mkvalid_k() clears PTE_PO_IDX_MASK, and
POR_EL1 remains set to POR_EL1_INIT during the copy. Any store in
swsusp_arch_suspend_exit() or arm64_relocate_new_kernel() to a destination
page that was a page table when trans_pgd_create_copy() ran will trigger a
fatal synchronous EL1 Permission Overlay fault with DAIF masked. Clearing
PTE_PO_IDX_MASK (or setting the default pkey) in copy_pte() would avoid
preserving the read-only overlay in the transitional page tables.
[Severity: Medium]
Can protect_early_kernel_pgtables() hang or trigger a soft lockup at boot
when KASAN or runtime-folded LPA2 is enabled?
On arm64 with CONFIG_KASAN_GENERIC or CONFIG_KASAN_SW_TAGS,
kasan_init_shadow() populates multi-terabyte shadow regions before
mm_core_init() using the shared kasan_early_shadow_{p4d,pud,pmd,pte} tables.
When kpkeys_hardened_pgtables_init() calls protect_early_kernel_pgtables(),
walk_kernel_page_table_range(PAGE_OFFSET, ULONG_MAX, ...) does not skip
these shared KASAN tables, so protect_pte_table() calls
set_direct_map_pkey() and broadcasts a TLB invalidation on the same
kasan_early_shadow_pte page for every 2 MiB PMD slot across the shadow
range.
In addition, when CONFIG_ARM64_VA_BITS_52 is enabled on hardware that falls
back to 48-bit or 47-bit VA at runtime, PAGE_OFFSET is _PAGE_OFFSET(52)
rather than _PAGE_OFFSET(vabits_actual). Because pgd_none() returns false
when folded and pgd_to_folded_p4d() / p4d_to_folded_pud() aligns down to the
start of swapper_pg_dir, walking from PAGE_OFFSET re-walks and flushes the
entire swapper_pg_dir 16 times on 4K pages or 32 times on 16K pages.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261109-kpkeys-v10-0-aa6c4d9603bc@arm.com?part=20
next prev parent reply other threads:[~2026-11-10 16:03 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-09 15:58 [PATCH RFC v10 00/22] pkeys-based page table hardening Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 01/22] mm: Introduce kpkeys Kevin Brodsky
2026-11-10 16:02 ` sashiko-bot
2026-11-11 10:24 ` Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 02/22] set_memory: Introduce set_direct_map_pkey() stub Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 03/22] arm64: Introduce por_elx_set_pkey_perms() helper Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 04/22] arm64: Implement asm/kpkeys.h using POE Kevin Brodsky
2026-11-10 14:19 ` Mark Brown
2026-11-11 10:26 ` Kevin Brodsky
2026-11-10 16:02 ` sashiko-bot
2026-11-11 15:18 ` Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 05/22] arm64: set_memory: Implement set_direct_map_pkey() Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 06/22] arm64: Disable EL2 trapping of POR_EL1 Kevin Brodsky
2026-11-10 15:29 ` Mark Brown
2026-11-11 15:22 ` Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 07/22] arm64: Initialize POR_EL1 register on cpu_resume() Kevin Brodsky
2026-11-10 15:53 ` Mark Brown
2026-11-10 16:36 ` Yeoreum Yun
2026-11-12 12:38 ` Kevin Brodsky
2026-11-12 13:02 ` Mark Brown
2026-11-12 13:14 ` Yeoreum Yun
2026-11-12 14:09 ` Mark Brown
2026-11-12 13:16 ` Kevin Brodsky
2026-11-10 16:02 ` sashiko-bot
2026-11-09 15:58 ` [PATCH RFC v10 08/22] arm64: Context-switch POR_EL1 Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 09/22] arm64: mm: Enable overlays for all EL1 indirect permissions Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 10/22] arm64: Enable kpkeys Kevin Brodsky
2026-11-10 16:02 ` sashiko-bot
2026-11-09 15:58 ` [PATCH RFC v10 11/22] mm: kpkeys: Introduce kpkeys_hardened_pgtables feature Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 12/22] mm: kpkeys: Protect regular page tables Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 13/22] mm: kpkeys: Protect early kernel " Kevin Brodsky
2026-11-10 16:02 ` sashiko-bot
2026-11-12 11:28 ` Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 14/22] mm: kpkeys: Protect vmemmap " Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 15/22] arm64: kpkeys: Implement arch_supports_kpkeys_early() Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 16/22] arm64: kpkeys: Support KPKEYS_CTX_PGTABLES Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 17/22] arm64: kpkeys: Ensure the linear map can be modified Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 18/22] arm64: kpkeys: Guard page table writes Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 19/22] arm64: kpkeys: Batch KPKEYS_CTX_PGTABLES switches Kevin Brodsky
2026-11-10 16:02 ` sashiko-bot
2026-11-12 13:21 ` Kevin Brodsky
2026-11-09 15:58 ` [PATCH RFC v10 20/22] arm64: kpkeys: Enable kpkeys_hardened_pgtables support Kevin Brodsky
2026-11-10 16:02 ` sashiko-bot [this message]
2026-11-09 15:58 ` [PATCH RFC v10 21/22] arm64: mm: Map kernel image alias of init_pg_dir read-only Kevin Brodsky
2026-11-10 16:02 ` sashiko-bot
2026-11-09 15:58 ` [PATCH RFC v10 22/22] mm: Add basic tests for kpkeys_hardened_pgtables Kevin Brodsky
2026-11-09 19:28 ` Mark Brown
2026-11-10 9:01 ` Kevin Brodsky
2026-11-10 11:24 ` Mark Brown
2026-11-11 15:29 ` Kevin Brodsky
2026-11-11 16:15 ` Mark Brown
2026-11-12 11:39 ` Kevin Brodsky
2026-11-10 16:03 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=sashiko-outbox-207334@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=ardb+git@google.com \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=dave.hansen@linux.intel.com \
--cc=david@kernel.org \
--cc=iweiny@kernel.org \
--cc=jannh@google.com \
--cc=jeffxu@chromium.org \
--cc=joey.gouly@arm.com \
--cc=kees@kernel.org \
--cc=kevin.brodsky@arm.com \
--cc=linu.cherian@arm.com \
--cc=linusw@kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=luto@kernel.org \
--cc=maz@kernel.org \
--cc=mbland@motorola.com \
--cc=peterz@infradead.org \
--cc=pierre.langlois@arm.com \
--cc=ptosi@google.com \
--cc=qperret@google.com \
--cc=rick.p.edgecombe@intel.com \
--cc=rppt@kernel.org \
--cc=ryan.roberts@arm.com \
--cc=sashiko-reviews@lists.linux.dev \
--cc=tglx@kernel.org \
--cc=vbabka@kernel.org \
--cc=will@kernel.org \
--cc=willy@infradead.org \
--cc=x86@kernel.org \
--cc=yang@os.amperecomputing.com \
--cc=yeoreum.yun@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.