mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
core: Treat stack overflows as an unrecoverable error
Presently, RIOT just emits a warning when a stack overflow is encountered but still resumes execution. In my view, execution should be aborted as the detection of a stack overflows via the heuristic provided by the scheduler is an unrecoverable error. I ran into this while performing automated tests of a RIOT application where a stack overflow occurred but I only noticed this after inspecting the application output more closely. Similar to SSP failures, I added crash_code for stack overflows.
This commit is contained in:
parent
3876f38b93
commit
80116651c2
@ -51,6 +51,7 @@ typedef enum {
|
|||||||
PANIC_DUMMY_HANDLER, /**< unhandled interrupt */
|
PANIC_DUMMY_HANDLER, /**< unhandled interrupt */
|
||||||
#endif
|
#endif
|
||||||
PANIC_SSP, /**< stack smashing protector failure */
|
PANIC_SSP, /**< stack smashing protector failure */
|
||||||
|
PANIC_STACK_OVERFLOW, /**< stack overflow detected */
|
||||||
PANIC_UNDEFINED
|
PANIC_UNDEFINED
|
||||||
} core_panic_t;
|
} core_panic_t;
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "sched.h"
|
#include "sched.h"
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
|
#include "panic.h"
|
||||||
|
|
||||||
#ifdef MODULE_MPU_STACK_GUARD
|
#ifdef MODULE_MPU_STACK_GUARD
|
||||||
#include "mpu.h"
|
#include "mpu.h"
|
||||||
@ -130,9 +131,10 @@ static void _unschedule(thread_t *active_thread)
|
|||||||
*/
|
*/
|
||||||
if (*((uintptr_t *)(uintptr_t)active_thread->stack_start) !=
|
if (*((uintptr_t *)(uintptr_t)active_thread->stack_start) !=
|
||||||
(uintptr_t)active_thread->stack_start) {
|
(uintptr_t)active_thread->stack_start) {
|
||||||
LOG_WARNING(
|
LOG_ERROR(
|
||||||
"scheduler(): stack overflow detected, pid=%" PRIkernel_pid "\n",
|
"scheduler(): stack overflow detected, pid=%" PRIkernel_pid "\n",
|
||||||
active_thread->pid);
|
active_thread->pid);
|
||||||
|
core_panic(PANIC_STACK_OVERFLOW, "STACK OVERFLOW");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef MODULE_SCHED_CB
|
#ifdef MODULE_SCHED_CB
|
||||||
|
Loading…
Reference in New Issue
Block a user