Permission overlays are not currently applied for memory types configured in PIR_EL1, meaning that even if POE were enabled at EL1, memory accesses would not be subject to POE restrictions.
A patch [1] in my series adding page table protection using pkeys/POE [2] enabled overlays for all memory types in PIR_EL1. It turns out this is wrong, as reported by Sashiko [3]. User memory types must not have overlays applied in PIR_EL1, otherwise direct accesses to user memory with privileged loads/stores (and PAN disabled) will mistakenly be checked against POR_EL1, instead of the intended POR_EL0. To avoid any accident in the future, this series adds a comment above the PIR_EL1 configuration block, and a kselftest to ensure that atomic futex uaccess (which uses privileged loads/stores unless FEAT_LSUI is available) does work on memory mapped with a non-default pkey. Signed-off-by: Kevin Brodsky <[email protected]> [1] https://lore.kernel.org/all/[email protected]/ [2] https://lore.kernel.org/all/[email protected]/ [3] https://sashiko.dev/#/patchset/20260505-kpkeys-v7-0-20c0bdd97197%40arm.com?part=3 --- To: [email protected] Cc: Catalin Marinas <[email protected]> Cc: Joey Gouly <[email protected]> Cc: Mark Brown <[email protected]> Cc: Shuah Khan <[email protected]> Cc: Will Deacon <[email protected]> Cc: [email protected] Cc: [email protected] --- Kevin Brodsky (2): arm64: mm: Add note about overlays in PIE_EL1 kselftest/arm64: Add test for atomic futex uaccess with POE arch/arm64/include/asm/pgtable-prot.h | 7 +++ tools/testing/selftests/arm64/Makefile | 2 +- tools/testing/selftests/arm64/poe/.gitignore | 2 + tools/testing/selftests/arm64/poe/Makefile | 6 +++ tools/testing/selftests/arm64/poe/poe_futex.c | 62 +++++++++++++++++++++++++++ 5 files changed, 78 insertions(+), 1 deletion(-) --- base-commit: 5200f5f493f79f14bbdc349e402a40dfb32f23c8 change-id: 20260520-poe_futex-ecb8c2276894

