From 5b537103bd20c3cd3d111fa67e28f6a01d9938d5 Mon Sep 17 00:00:00 2001 From: cepetr Date: Mon, 12 May 2025 08:06:45 +0200 Subject: [PATCH] feat(core): improve post mortem info for secure fault [no changelog] --- core/embed/sys/task/inc/sys/systask.h | 6 ++++++ core/embed/sys/task/stm32/systask.c | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core/embed/sys/task/inc/sys/systask.h b/core/embed/sys/task/inc/sys/systask.h index 85b9f2a7aa..61be22c958 100644 --- a/core/embed/sys/task/inc/sys/systask.h +++ b/core/embed/sys/task/inc/sys/systask.h @@ -44,6 +44,12 @@ typedef struct { uint32_t mmfar; // Address associated with the BusFault uint32_t bfar; +#if defined(__ARM_FEATURE_CMSE) + // Secure Fault Status Register + uint32_t sfsr; + // Address associated with the SecureFault + uint32_t sfar; +#endif // Stack pointer at the time of the fault // (MSP or PSP depending on the privilege level) uint32_t sp; diff --git a/core/embed/sys/task/stm32/systask.c b/core/embed/sys/task/stm32/systask.c index 666d07e1c8..4f97a26572 100644 --- a/core/embed/sys/task/stm32/systask.c +++ b/core/embed/sys/task/stm32/systask.c @@ -93,7 +93,7 @@ void systask_scheduler_init(systask_error_handler_t error_handler) { #if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) // Enable SecureFault handler SCB->SHCSR |= SCB_SHCSR_SECUREFAULTENA_Msk; -#endif +#endif } systask_t* systask_active(void) { @@ -380,6 +380,10 @@ __attribute((used)) static void systask_exit_fault(bool privileged, pminfo->fault.mmfar = SCB->MMFAR; pminfo->fault.bfar = SCB->BFAR; pminfo->fault.hfsr = SCB->HFSR; +#if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + pminfo->fault.sfsr = SAU->SFSR; + pminfo->fault.sfar = SAU->SFAR; +#endif } systask_kill(task);