arm64/ptrace: Don't flush ZA/ZT storage when writing ZA via ptrace
authorMark Brown <broonie@kernel.org>
Mon, 15 Jan 2024 18:42:38 +0000 (18:42 +0000)
committerWill Deacon <will@kernel.org>
Thu, 18 Jan 2024 11:04:17 +0000 (11:04 +0000)
commitb7c510d049049409e8945b932f4b0b357fa17415
tree429d149fc34f86c1b12ae54a3d3257d70f3b86ed
parentda59f1d051d57e85eca49401a3a36d5a622babde
arm64/ptrace: Don't flush ZA/ZT storage when writing ZA via ptrace

When writing ZA we currently unconditionally flush the buffer used to store
it as part of ensuring that it is allocated. Since this buffer is shared
with ZT0 this means that a write to ZA when PSTATE.ZA is already set will
corrupt the value of ZT0 on a SME2 system. Fix this by only flushing the
backing storage if PSTATE.ZA was not previously set.

This will mean that short or failed writes may leave stale data in the
buffer, this seems as correct as our current behaviour and unlikely to be
something that userspace will rely on.

Fixes: f90b529bcbe5 ("arm64/sme: Implement ZT0 ptrace support")
Signed-off-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20240115-arm64-fix-ptrace-za-zt-v1-1-48617517028a@kernel.org
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/kernel/ptrace.c