mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2026-02-27 18:01:45 +00:00
firmware: Initialize stack guard via Zkr
Try to initialize stack protection guard via the zkr extension. Signed-off-by: Xiang W <wxjstz@126.com> Reviewed-by: Anup Patel <anup@brainfault.org> Link: https://lore.kernel.org/r/20260104051812.128496-1-wxjstz@126.com Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
@@ -107,6 +107,30 @@ _bss_zero:
|
||||
add s4, s4, __SIZEOF_POINTER__
|
||||
blt s4, s5, _bss_zero
|
||||
|
||||
/* Trying to initialize the stack guard via the Zkr extension */
|
||||
lla t0, __stack_chk_guard_done
|
||||
csrw CSR_MTVEC, t0
|
||||
li t0, 0
|
||||
li t3, SEED_OPTS_ES16
|
||||
li t4, SEED_ENTROPY_MASK
|
||||
li t5, __SIZEOF_POINTER__
|
||||
__stack_chk_guard_loop:
|
||||
csrrw t1, CSR_SEED, x0
|
||||
li t2, SEED_OPTS_MASK
|
||||
and t2, t2, t1
|
||||
bgtu t2, t3, __stack_chk_guard_done
|
||||
bltu t2, t3, __stack_chk_guard_loop
|
||||
and t1, t1, t4
|
||||
slli t0, t0, 16
|
||||
or t0, t0, t1
|
||||
addi t5, t5, -2
|
||||
bgtz t5, __stack_chk_guard_loop
|
||||
lla t1, __stack_chk_guard
|
||||
REG_S t0, 0(t1)
|
||||
j __stack_chk_guard_done
|
||||
.align 3
|
||||
__stack_chk_guard_done:
|
||||
|
||||
/* Setup temporary trap handler */
|
||||
lla s4, _start_hang
|
||||
csrw CSR_MTVEC, s4
|
||||
|
||||
@@ -261,6 +261,16 @@
|
||||
#define CSR_FRM 0x002
|
||||
#define CSR_FCSR 0x003
|
||||
|
||||
/* User entropy source */
|
||||
#define CSR_SEED 0x015
|
||||
#define SEED_OPTS_SHIFT 30
|
||||
#define SEED_OPTS_MASK (_UL(3) << SEED_OPTS_SHIFT)
|
||||
#define SEED_OPTS_BIST (_UL(0) << SEED_OPTS_SHIFT)
|
||||
#define SEED_OPTS_WAIT (_UL(1) << SEED_OPTS_SHIFT)
|
||||
#define SEED_OPTS_ES16 (_UL(2) << SEED_OPTS_SHIFT)
|
||||
#define SEED_OPTS_DEAD (_UL(3) << SEED_OPTS_SHIFT)
|
||||
#define SEED_ENTROPY_MASK 0xffff
|
||||
|
||||
/* User Counters/Timers */
|
||||
#define CSR_CYCLE 0xc00
|
||||
#define CSR_TIME 0xc01
|
||||
|
||||
Reference in New Issue
Block a user