arm64_checkstack.c: Fix traversing of user stack when ARCH_ADDRENV=Y
Need to instantiate the correct address environment when reading from user stack, otherwise the result is very likely a crash
This commit is contained in:
parent
51c4a5c2d6
commit
12ba2eeb23
1 changed files with 21 additions and 1 deletions
|
@ -198,7 +198,27 @@ void arm64_stack_color(void *stackbase, size_t nbytes)
|
|||
|
||||
size_t up_check_tcbstack(struct tcb_s *tcb)
|
||||
{
|
||||
return arm64_stack_check(tcb->stack_base_ptr, tcb->adj_stack_size);
|
||||
size_t size;
|
||||
|
||||
#ifdef CONFIG_ARCH_ADDRENV
|
||||
struct addrenv_s *oldenv;
|
||||
|
||||
if (tcb->addrenv_own != NULL)
|
||||
{
|
||||
addrenv_select(tcb->addrenv_own, &oldenv);
|
||||
}
|
||||
#endif
|
||||
|
||||
size = arm64_stack_check(tcb->stack_base_ptr, tcb->adj_stack_size);
|
||||
|
||||
#ifdef CONFIG_ARCH_ADDRENV
|
||||
if (tcb->addrenv_own != NULL)
|
||||
{
|
||||
addrenv_restore(oldenv);
|
||||
}
|
||||
#endif
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
#if CONFIG_ARCH_INTERRUPTSTACK > 7
|
||||
|
|
Loading…
Reference in a new issue