Stack Overflow Check
Overview
- Currently NuttX supports three types of stack overflow detection:
Stack Overflow Software Check
Stack Overflow Hardware Check
Stack Canary Check
- The software stack detection includes two implementation ideas:
Implemented by coloring the stack memory
Implemented by comparing the sp and sl registers
Support
Software and hardware stack overflow detection implementation, currently only implemented on ARM Cortex-M (32-bit) series chips Stack Canary Check is available on all platforms
Stack Overflow Software Check
- Memory Coloring Implementation Principle
Before using the stack, Thread will refresh the stack area to 0xdeadbeef
When Thread is running, it will overwrite 0xdeadbeef
up_check_tcbstack() detects 0xdeadbeef to get the stack peak value
- Usage:
Enable CONFIG_STACK_COLORATION
- Compare sp and sl
When compiling the program, keep r10 and use r10 as stackbase:: ‘’’ ARCHOPTIMIZATION += -finstrument-functions -ffixed-r10
Each function will automatically add the following when entering and exiting: __cyg_profile_func_enter __cyg_profile_func_exit
- Usage:
Enable CONFIG_ARMV8M_STACKCHECK or CONFIG_ARMV7M_STACKCHECK
Stack Overflow Hardware Check
Set MSPLIM PSPLIM when context switching
Each time sp is operated, the hardware automatically compares sp and PSPLIM. If sp is lower than PSPLIM, crash
- Usage:
Enable CONFIG_ARMV8M_STACKCHECK_HARDWARE
Stack Canary Check
Add a canary value to the stack
When the thread is running, the canary value is overwritten
When the thread is running, the canary value is compared with the original value
If the value is different, it means that the stack is overflowed
- Usage:
Enable CONFIG_STACK_CANARIES