arm64/sme: Disable ZA and streaming mode when handling signals
authorMark Brown <broonie@kernel.org>
Tue, 19 Apr 2022 11:22:25 +0000 (12:22 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 22 Apr 2022 17:51:08 +0000 (18:51 +0100)
The ABI requires that streaming mode and ZA are disabled when invoking
signal handlers, do this in setup_return() when we prepare the task state
for the signal handler.

Signed-off-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Link: https://lore.kernel.org/r/20220419112247.711548-18-broonie@kernel.org
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/kernel/signal.c

index 4a4122e..42efa46 100644 (file)
@@ -759,6 +759,13 @@ static void setup_return(struct pt_regs *regs, struct k_sigaction *ka,
        /* TCO (Tag Check Override) always cleared for signal handlers */
        regs->pstate &= ~PSR_TCO_BIT;
 
+       /* Signal handlers are invoked with ZA and streaming mode disabled */
+       if (system_supports_sme()) {
+               current->thread.svcr &= ~(SYS_SVCR_EL0_ZA_MASK |
+                                         SYS_SVCR_EL0_SM_MASK);
+               sme_smstop();
+       }
+
        if (ka->sa.sa_flags & SA_RESTORER)
                sigtramp = ka->sa.sa_restorer;
        else