diff options
| author | Dan Halbert <halbert@halwitz.org> | 2018-12-13 16:33:15 -0500 |
|---|---|---|
| committer | Dan Halbert <halbert@halwitz.org> | 2018-12-13 16:33:15 -0500 |
| commit | bfa66861effb6bb1d9da1906b4b760cbdbe3f030 (patch) | |
| tree | 0ac366ad480291511055898deb9fa52caeccf402 /supervisor/shared/stack.c | |
| parent | a7a24096f469b1ee95242d4e7f58929cad3699ed (diff) | |
| parent | 5e4b3a8fb68265d89fe7d8d5d35d16bc28917f3a (diff) | |
Merge remote-tracking branch 'adafruit/master' into bleio-rev
Diffstat (limited to 'supervisor/shared/stack.c')
| -rwxr-xr-x | supervisor/shared/stack.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/supervisor/shared/stack.c b/supervisor/shared/stack.c index 6b74742eb..71e239c0a 100755 --- a/supervisor/shared/stack.c +++ b/supervisor/shared/stack.c @@ -27,7 +27,9 @@ #include "stack.h" #include "py/mpconfig.h" +#include "py/runtime.h" #include "supervisor/cpu.h" +#include "supervisor/shared/safe_mode.h" extern uint32_t _estack; @@ -50,6 +52,17 @@ void allocate_stack(void) { } else { current_stack_size = next_stack_size; } + *stack_alloc->ptr = STACK_CANARY_VALUE; +} + +inline bool stack_ok(void) { + return *stack_alloc->ptr == STACK_CANARY_VALUE; +} + +inline void assert_heap_ok(void) { + if (!stack_ok()) { + reset_into_safe_mode(HEAP_OVERWRITTEN); + } } void stack_init(void) { @@ -58,6 +71,7 @@ void stack_init(void) { void stack_resize(void) { if (next_stack_size == current_stack_size) { + *stack_alloc->ptr = STACK_CANARY_VALUE; return; } free_memory(stack_alloc); |
