75 lines
2.2 KiB
ReStructuredText
75 lines
2.2 KiB
ReStructuredText
.. _mpu_stack_guard_test:
|
|
|
|
MPU Stack Guard Test
|
|
####################
|
|
|
|
Overview
|
|
********
|
|
|
|
This is a simple application that demonstrates basic thread stack guarding on
|
|
the supported platforms.
|
|
A thread spawned by the main task recursively calls a function that fills the
|
|
thread stack up to where it overwrites a preposed canary.
|
|
If the MPU is enabled and the Stack Guard feature is present the test succeeds
|
|
because an MEM Faults exception prevents the canary from being overwritten.
|
|
If the MPU is disabled the test fails because the canary is overwritten.
|
|
|
|
Building and Running
|
|
********************
|
|
|
|
This project outputs to the console.
|
|
To build the test with the MPU disabled:
|
|
|
|
.. code-block:: console
|
|
|
|
$ cd samples/mpu_stack_guard_test
|
|
$ make
|
|
|
|
To build the test with the MPU enabled and the stack guard feature present:
|
|
|
|
.. code-block:: console
|
|
|
|
$ cd samples/mpu_stack_guard_test
|
|
$ make CONF_FILE=prj_stack_guard.conf
|
|
|
|
Sample Output
|
|
=============
|
|
|
|
With the MPU enabled but the stack guard feature disabled:
|
|
|
|
.. code-block:: console
|
|
|
|
***** BOOTING ZEPHYR OS v1.8.99 - BUILD: Jun 15 2017 23:12:13 *****
|
|
STACK_ALIGN 4
|
|
MPU STACK GUARD Test
|
|
Canary Initial Value = 0xf0cacc1a threads 0x20000b9c
|
|
Canary = 0xfffffff5 Test not passed.
|
|
***** MPU FAULT *****
|
|
Executing thread ID (thread): 0x20000b9c
|
|
Faulting instruction address: 0x80025b0
|
|
Data Access Violation
|
|
Address: 0x8000edb
|
|
Fatal fault in thread 0x20000b9c! Aborting.
|
|
***** HARD FAULT *****
|
|
Fault escalation (see below)
|
|
***** MPU FAULT *****
|
|
Executing thread ID (thread): 0x20000b9c
|
|
Faulting instruction address: 0x8001db6
|
|
Data Access Violation
|
|
Address: 0x8000edb
|
|
Fatal fault in ISR! Spinning...
|
|
|
|
With the MPU enabled and the stack guard feature enabled:
|
|
|
|
.. code-block:: console
|
|
|
|
***** BOOTING ZEPHYR OS v1.8.99 - BUILD: Jun 15 2017 23:05:56 *****
|
|
STACK_ALIGN 20
|
|
MPU STACK GUARD Test
|
|
Canary Initial Value = 0xf0cacc1a threads 0x20000be0
|
|
***** MPU FAULT *****
|
|
Executing thread ID (thread): 0x20000be0
|
|
Faulting instruction address: 0x8001dc2
|
|
Stacking error
|
|
Fatal fault in thread 0x20000be0! Aborting.
|