riscv: Support RANDOMIZE_KSTACK_OFFSET
authorSong Shuai <songshuaishuai@tinylab.org>
Thu, 9 Nov 2023 13:37:51 +0000 (21:37 +0800)
committerPalmer Dabbelt <palmer@rivosinc.com>
Thu, 25 Jan 2024 01:24:24 +0000 (17:24 -0800)
commit05d450aabd7386246c5aafc341fe9febe5855967
treea1634b1c6849df1e263bdf3fcceff904d9d14fbb
parentdded618c07fd786f781c3f3529d8253e31e2c7d6
riscv: Support RANDOMIZE_KSTACK_OFFSET

Inspired from arm64's implement -- commit 70918779aec9
("arm64: entry: Enable random_kstack_offset support")

Add support of kernel stack offset randomization while handling syscall,
the offset is defaultly limited by KSTACK_OFFSET_MAX() (i.e. 10 bits).

In order to avoid trigger stack canaries (due to __builtin_alloca) and
slowing down the entry path, use __no_stack_protector attribute to
disable stack protector for do_trap_ecall_u() at the function level.

Acked-by: Palmer Dabbelt <palmer@rivosinc.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Song Shuai <songshuaishuai@tinylab.org>
Link: https://lore.kernel.org/r/20231109133751.212079-1-songshuaishuai@tinylab.org
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
arch/riscv/Kconfig
arch/riscv/kernel/traps.c