From 01d755306ffc5c52803847f73d691f6eaf9b1626 Mon Sep 17 00:00:00 2001 From: Andrey Gusakov Date: Wed, 22 Jan 2025 19:01:47 +0300 Subject: [PATCH] error_handling: save stack bytes for firmwareError() too --- firmware/controllers/core/error_handling.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/firmware/controllers/core/error_handling.cpp b/firmware/controllers/core/error_handling.cpp index 6cf792b3a1..7944c70178 100644 --- a/firmware/controllers/core/error_handling.cpp +++ b/firmware/controllers/core/error_handling.cpp @@ -503,6 +503,9 @@ const char* getConfigErrorMessage() { } void firmwareError(ObdCode code, const char *fmt, ...) { + // following is allocated on stack + // add some marker + uint32_t tmp = 0xfaaaaa11; #if EFI_PROD_CODE if (hasCriticalFirmwareErrorFlag) return; @@ -543,6 +546,9 @@ void firmwareError(ObdCode code, const char *fmt, ...) { err->msg[sizeof(err->msg) - 1] = '\0'; strlncpy(err->msg, criticalErrorMessageBuffer, sizeof(err->msg)); err->Cookie = ErrorCookie::FirmwareError; + // copy stack last as it can be corrupted and cause another exeption + uint32_t *sp = &tmp; + errorHandlerSaveStack(err, sp); } #endif // EFI_BACKUP_SRAM #else // EFI_PROD_CODE