arch: arm: support built-in stack protection in user mode for ARMv8m
This commit extends the support of built-in thread stack protection (i.e. based on the stack pointer limit registers) in ARMv8-M, so that it works with user mode. The commit does the following: - enables and disables the stack limit checking on the privileged stack, inside thread system calls, and upon entering user mode, - does not enable stack limit checking in context switch, if the thread is in user mode. Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
This commit is contained in:
parent
b3ea738a84
commit
d04cec97d5
3 changed files with 67 additions and 8 deletions
|
@ -190,14 +190,6 @@ _thread_irq_disabled:
|
|||
pop {r2, lr}
|
||||
#endif /* CONFIG_MPU_STACK_GUARD */
|
||||
|
||||
#ifdef CONFIG_BUILTIN_STACK_GUARD
|
||||
/* r2 contains k_thread */
|
||||
add r0, r2, #0
|
||||
push {r2, lr}
|
||||
blx configure_builtin_stack_guard
|
||||
pop {r2, lr}
|
||||
#endif /* CONFIG_BUILTIN_STACK_GUARD */
|
||||
|
||||
#ifdef CONFIG_USERSPACE
|
||||
/* restore mode */
|
||||
ldr r0, [r2, #_thread_offset_to_mode]
|
||||
|
@ -231,8 +223,24 @@ _thread_irq_disabled:
|
|||
#error Unknown ARM architecture
|
||||
#endif /* CONFIG_ARMV6_M_ARMV8_M_BASELINE */
|
||||
|
||||
#ifdef CONFIG_BUILTIN_STACK_GUARD
|
||||
/* clear stack pointer limit before setting the PSP */
|
||||
push {r3}
|
||||
mov r3, #0
|
||||
msr PSPLIM, r3
|
||||
pop {r3}
|
||||
#endif
|
||||
|
||||
msr PSP, ip
|
||||
|
||||
#ifdef CONFIG_BUILTIN_STACK_GUARD
|
||||
/* r2 contains k_thread */
|
||||
add r0, r2, #0
|
||||
push {r2, lr}
|
||||
blx configure_builtin_stack_guard
|
||||
pop {r2, lr}
|
||||
#endif /* CONFIG_BUILTIN_STACK_GUARD */
|
||||
|
||||
#ifdef CONFIG_EXECUTION_BENCHMARKING
|
||||
stm sp!,{r0-r3} /* Save regs r0 to r4 on stack */
|
||||
push {lr}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue