diff mbox series

arm64/fpsimd: Clear SME state in the target task when setting the VL

Message ID 20230803-arm64-fix-ptrace-tif-sme-v1-1-88312fd6fbfd@kernel.org (mailing list archive)
State New, archived
Headers show
Series arm64/fpsimd: Clear SME state in the target task when setting the VL | expand

Commit Message

Mark Brown Aug. 2, 2023, 11:46 p.m. UTC
When setting SME vector lengths we clear TIF_SME to reenable SME traps,
doing a reallocation of the backing storage on next use. We do this using
clear_thread_flag() which operates on the current thread, meaning that when
setting the vector length via ptrace we may both not force traps for the
target task and force a spurious flush of any SME state that the tracing
task may have.

Clear the flag in the target task.

Fixes: e12310a0d30f ("arm64/sme: Implement ptrace support for streaming mode SVE registers")
Reported-by: David Spickett <David.Spickett@arm.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org
---
 arch/arm64/kernel/fpsimd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


---
base-commit: 5d0c230f1de8c7515b6567d9afba1f196fb4e2f4
change-id: 20230802-arm64-fix-ptrace-tif-sme-0bfd94c8266d

Best regards,

Comments

Catalin Marinas Aug. 3, 2023, 5:28 p.m. UTC | #1
On Thu, 03 Aug 2023 00:46:39 +0100, Mark Brown wrote:
> When setting SME vector lengths we clear TIF_SME to reenable SME traps,
> doing a reallocation of the backing storage on next use. We do this using
> clear_thread_flag() which operates on the current thread, meaning that when
> setting the vector length via ptrace we may both not force traps for the
> target task and force a spurious flush of any SME state that the tracing
> task may have.
> 
> [...]

Applied to arm64 (for-next/fixes), thanks!

[1/1] arm64/fpsimd: Clear SME state in the target task when setting the VL
      https://git.kernel.org/arm64/c/c9bb40b7f786
diff mbox series

Patch

diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c
index 520b681a07bb..a61a1fd6492d 100644
--- a/arch/arm64/kernel/fpsimd.c
+++ b/arch/arm64/kernel/fpsimd.c
@@ -909,7 +909,7 @@  int vec_set_vector_length(struct task_struct *task, enum vec_type type,
 			 */
 			task->thread.svcr &= ~(SVCR_SM_MASK |
 					       SVCR_ZA_MASK);
-			clear_thread_flag(TIF_SME);
+			clear_tsk_thread_flag(task, TIF_SME);
 			free_sme = true;
 		}
 	}