Commit 2e8a1acea859 ("arm64: signal: Improve POR_EL0 handling to
avoid uaccess failures") introduced special handling for EL0 registers
that impact uaccess. This did not however handle the case where a signal
handler removes the relevant record (poe_context for POE) from the
signal frame; this is clearly not typical behaviour but it is legal.
That commit resulted in arbitrary data from the kernel stack being
written to POR_EL0 in that case.Patch 1 fixes this by tracking which fields in struct user_access_state are actually valid. This restores the original behaviour, where POR_EL0 is left untouched if poe_context is removed. The remaining patches add new tests to the arm64 signal kselftests to check that POR_EL0 is reset and restored (or preserved) as expected. Patch 2 fixes an issue found by Sashiko while reusing some code for the new tests. Signed-off-by: Kevin Brodsky <[email protected]> --- v1..v2: - Patch 1: introduced accessors and moved to using {} for zero-init [Will] - Patch 1: removed change in setup_sigframe() - using the new flag isn't actually more consistent than checking system_supports_poe() and doesn't play well with the new accessors - Patch 5: fixed the size passed to get_header(), as reported by Sashiko. Added patch 2 to fix the issue where I had originally found it. - Patch 4: improved commit title [Mark] - Collected R-b v1: https://lore.kernel.org/all/[email protected]/ --- To: [email protected] Cc: Andrew Morton <[email protected]> Cc: Catalin Marinas <[email protected]> Cc: David Hildenbrand (Arm) <[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] Cc: [email protected] --- Kevin Brodsky (5): arm64: signal: Preserve POR_EL0 if poe_context is missing selftests/mm: Fix resv_sz when parsing arm64 signal frame kselftest/arm64: Add POE as a feature in the signal tests kselftest/arm64: Move/add POE helpers to test_signals_utils.h kselftest/arm64: Add tests for POR_EL0 save/reset/restore arch/arm64/kernel/signal.c | 54 ++++++++++++---- .../testing/selftests/arm64/signal/test_signals.h | 2 + .../selftests/arm64/signal/test_signals_utils.c | 3 + .../selftests/arm64/signal/test_signals_utils.h | 16 +++++ .../signal/testcases/poe_missing_poe_context.c | 73 ++++++++++++++++++++++ .../selftests/arm64/signal/testcases/poe_restore.c | 64 +++++++++++++++++++ .../selftests/arm64/signal/testcases/poe_siginfo.c | 15 ----- tools/testing/selftests/mm/pkey-arm64.h | 3 +- 8 files changed, 203 insertions(+), 27 deletions(-) --- base-commit: 028ef9c96e96197026887c0f092424679298aae8 change-id: 20260423-poe_signal-809193c5225d

