| From 35d33c76d68dfacc330a8eb477b51cc647c5a847 Mon Sep 17 00:00:00 2001 |
| From: Alexandre Ghiti <alexandre.ghiti@canonical.com> |
| Date: Mon, 6 Dec 2021 11:46:56 +0100 |
| Subject: riscv: Initialize thread pointer before calling C functions |
| |
| From: Alexandre Ghiti <alexandre.ghiti@canonical.com> |
| |
| commit 35d33c76d68dfacc330a8eb477b51cc647c5a847 upstream. |
| |
| Because of the stack canary feature that reads from the current task |
| structure the stack canary value, the thread pointer register "tp" must |
| be set before calling any C function from head.S: by chance, setup_vm |
| and all the functions that it calls does not seem to be part of the |
| functions where the canary check is done, but in the following commits, |
| some functions will. |
| |
| Fixes: f2c9699f65557a31 ("riscv: Add STACKPROTECTOR supported") |
| Signed-off-by: Alexandre Ghiti <alexandre.ghiti@canonical.com> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/riscv/kernel/head.S | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/arch/riscv/kernel/head.S |
| +++ b/arch/riscv/kernel/head.S |
| @@ -297,6 +297,7 @@ clear_bss_done: |
| REG_S a0, (a2) |
| |
| /* Initialize page tables and relocate to virtual addresses */ |
| + la tp, init_task |
| la sp, init_thread_union + THREAD_SIZE |
| XIP_FIXUP_OFFSET sp |
| #ifdef CONFIG_BUILTIN_DTB |