Skip to content

Commit 616cb2f

Browse files
brooniectmarinas
authored andcommitted
arm64/signal: Restore TPIDR2 register rather than memory state
Currently when restoring the TPIDR2 signal context we set the new value from the signal frame in the thread data structure but not the register, following the pattern for the rest of the data we are restoring. This does not work in the case of TPIDR2, the register always has the value for the current task. This means that either we return to userspace and ignore the new value or we context switch and save the register value on top of the newly restored value. Load the value from the signal context into the register instead. Fixes: 39e5449 ("arm64/signal: Include TPIDR2 in the signal context") Signed-off-by: Mark Brown <broonie@kernel.org> Cc: <stable@vger.kernel.org> # 6.3.x Link: https://lore.kernel.org/r/20230621-arm64-fix-tpidr2-signal-restore-v2-1-c8e8fcc10302@kernel.org Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
1 parent 44c026a commit 616cb2f

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

arch/arm64/kernel/signal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ static int restore_tpidr2_context(struct user_ctxs *user)
398398

399399
__get_user_error(tpidr2_el0, &user->tpidr2->tpidr2, err);
400400
if (!err)
401-
current->thread.tpidr2_el0 = tpidr2_el0;
401+
write_sysreg_s(tpidr2_el0, SYS_TPIDR2_EL0);
402402

403403
return err;
404404
}

0 commit comments

Comments
 (0)