d6da04b6fb
When we collect a signal context with one of the SME modes enabled we will have enabled that mode behind the compiler and libc's back so they may issue some instructions not valid in streaming mode, causing spurious failures. For the code prior to issuing the BRK to trigger signal handling we need to stay in streaming mode if we were already there since that's a part of the signal context the caller is trying to collect. Unfortunately this code includes a memset() which is likely to be heavily optimised and is likely to use FP instructions incompatible with streaming mode. We can avoid this happening by open coding the memset(), inserting a volatile assembly statement to avoid the compiler recognising what's being done and doing something in optimisation. This code is not performance critical so the inefficiency should not be an issue. After collecting the context we can simply exit streaming mode, avoiding these issues. Use a full SMSTOP for safety to prevent any issues appearing with ZA. Reported-by: Will Deacon <will@kernel.org> Signed-off-by: Mark Brown <broonie@kernel.org> Link: https://lore.kernel.org/r/20230728-arm64-signal-memcpy-fix-v4-1-0c1290db5d46@kernel.org Signed-off-by: Will Deacon <will@kernel.org>
KSelfTest ARM64 =============== - These tests are arm64 specific and so not built or run but just skipped completely when env-variable ARCH is found to be different than 'arm64' and `uname -m` reports other than 'aarch64'. - Holding true the above, ARM64 KSFT tests can be run within the KSelfTest framework using standard Linux top-level-makefile targets: $ make TARGETS=arm64 kselftest-clean $ make TARGETS=arm64 kselftest or $ make -C tools/testing/selftests TARGETS=arm64 \ INSTALL_PATH=<your-installation-path> install or, alternatively, only specific arm64/ subtargets can be picked: $ make -C tools/testing/selftests TARGETS=arm64 ARM64_SUBTARGETS="tags signal" \ INSTALL_PATH=<your-installation-path> install Further details on building and running KFST can be found in: Documentation/dev-tools/kselftest.rst