From 070abc4e90c5b589a8904372dabc91e797b6839d Mon Sep 17 00:00:00 2001 From: Sureshkumar Ponnusamy Date: Thu, 7 May 2026 15:54:17 -0700 Subject: [PATCH 1/8] AdvancedLoggerPkg:AdvancedLoggerLib/MmCoreArm: Initialize the ADVANCED_LOGGER_INFO header in AdvancedLoggerGetLoggerInfo when no earlier firmware phase has done so Signed-off-by: Sureshkumar Ponnusamy --- .../MmCoreArm/AdvancedLoggerLib.c | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c index dee083f294..f3d016ab20 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c @@ -23,6 +23,43 @@ // cannot presume globals will be available. // +/** + Initialize the AdvancedLogger header at PcdAdvancedLoggerBase if a previous + firmware phase has not already done so. + + On boot flows where StandaloneMM runs before any phase that would normally + lay down the ADVANCED_LOGGER_INFO header (e.g. BL31 -> StMM -> BL33/UEFI), + the buffer signature will be invalid on first entry. This routine performs + a one-time initialization of the header so that subsequent logging calls + have a valid buffer to write into. + + @param LoggerInfo Caller-supplied non-NULL pointer to the fixed buffer. +**/ +STATIC +VOID +InitializeLoggerHeaderIfNeeded ( + IN ADVANCED_LOGGER_INFO *LoggerInfo + ) +{ + UINTN LogBufferSize; + + if (LoggerInfo->Signature == ADVANCED_LOGGER_SIGNATURE) { + return; + } + + LogBufferSize = EFI_PAGES_TO_SIZE (FixedPcdGet32 (PcdAdvancedLoggerPages)); + + ZeroMem ((VOID *)LoggerInfo, sizeof (ADVANCED_LOGGER_INFO)); + LoggerInfo->Signature = ADVANCED_LOGGER_SIGNATURE; + LoggerInfo->Version = ADVANCED_LOGGER_INFO_VER; + LoggerInfo->LogBufferSize = (UINT32)(LogBufferSize - sizeof (ADVANCED_LOGGER_INFO)); + LoggerInfo->LogBufferOffset = EXPECTED_LOG_BUFFER_OFFSET (LoggerInfo); + LoggerInfo->LogCurrentOffset = LoggerInfo->LogBufferOffset; + LoggerInfo->HwPrintLevel = FixedPcdGet32 (PcdAdvancedLoggerHdwPortDebugPrintErrorLevel); + LoggerInfo->HdwPortInitialized = TRUE; + LoggerInfo->InPermanentRAM = TRUE; +} + /** The logger Information Block is carved from the Trust Zone at a specific fixed address. @@ -64,6 +101,12 @@ AdvancedLoggerGetLoggerInfo ( return NULL; } + // + // First StMM caller in a boot lays down the header; subsequent callers + // (re-entries, DxeCore, etc.) find a valid signature and skip init. + // + InitializeLoggerHeaderIfNeeded (LoggerInfo); + // // LogBuffer and LogCurrent, and LogBufferSize, could be written // to by untrusted code. Here, we check that the offsets are within the From 250f2b402515e3061f0ff21e0a032f620954b99d Mon Sep 17 00:00:00 2001 From: Sureshkumar Ponnusamy <168844251+sureshkumarpMSFT@users.noreply.github.com> Date: Fri, 8 May 2026 15:04:24 -0700 Subject: [PATCH 2/8] Update AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c Co-authored-by: Oliver Smith-Denny --- .../Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c index f3d016ab20..f7f650a416 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c @@ -56,7 +56,8 @@ InitializeLoggerHeaderIfNeeded ( LoggerInfo->LogBufferOffset = EXPECTED_LOG_BUFFER_OFFSET (LoggerInfo); LoggerInfo->LogCurrentOffset = LoggerInfo->LogBufferOffset; LoggerInfo->HwPrintLevel = FixedPcdGet32 (PcdAdvancedLoggerHdwPortDebugPrintErrorLevel); - LoggerInfo->HdwPortInitialized = TRUE; + AdvancedLoggerHdwPortInitialize (); + LoggerInfo->HdwPortInitialized = TRUE; LoggerInfo->InPermanentRAM = TRUE; } From 0a4b69a64589fbea5414daaca567f4a1b001ccf6 Mon Sep 17 00:00:00 2001 From: Sureshkumar Ponnusamy <168844251+sureshkumarpMSFT@users.noreply.github.com> Date: Fri, 8 May 2026 15:04:41 -0700 Subject: [PATCH 3/8] Update AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c Co-authored-by: Oliver Smith-Denny --- .../Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c index f7f650a416..4b2fec2679 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c @@ -103,8 +103,8 @@ AdvancedLoggerGetLoggerInfo ( } // - // First StMM caller in a boot lays down the header; subsequent callers - // (re-entries, DxeCore, etc.) find a valid signature and skip init. + // Check if the log has been initialized by a previous entity (e.g. TF-A) + // or a previous log in StMM. If not, initialize. // InitializeLoggerHeaderIfNeeded (LoggerInfo); From ecf037da075668a2e346a69aceedb0d676b387d0 Mon Sep 17 00:00:00 2001 From: Sureshkumar Ponnusamy <168844251+sureshkumarpMSFT@users.noreply.github.com> Date: Fri, 8 May 2026 15:04:57 -0700 Subject: [PATCH 4/8] Update AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c Co-authored-by: Michael Kubacki --- .../Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c index 4b2fec2679..ee8f635a0c 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c @@ -33,7 +33,7 @@ a one-time initialization of the header so that subsequent logging calls have a valid buffer to write into. - @param LoggerInfo Caller-supplied non-NULL pointer to the fixed buffer. + @param[in] LoggerInfo Caller-supplied non-NULL pointer to the fixed buffer. **/ STATIC VOID From 4a5fb63390dc3c4f74c936b909c4e58739ae32fa Mon Sep 17 00:00:00 2001 From: Sureshkumar Ponnusamy Date: Fri, 8 May 2026 15:23:42 -0700 Subject: [PATCH 5/8] Verify the incoming buffer address is not NULL Signed-off-by: Sureshkumar Ponnusamy --- .../AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c index ee8f635a0c..7cc4ed71fa 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c @@ -43,6 +43,10 @@ InitializeLoggerHeaderIfNeeded ( { UINTN LogBufferSize; + if (LoggerInfo == NULL) { + return; + } + if (LoggerInfo->Signature == ADVANCED_LOGGER_SIGNATURE) { return; } @@ -56,8 +60,8 @@ InitializeLoggerHeaderIfNeeded ( LoggerInfo->LogBufferOffset = EXPECTED_LOG_BUFFER_OFFSET (LoggerInfo); LoggerInfo->LogCurrentOffset = LoggerInfo->LogBufferOffset; LoggerInfo->HwPrintLevel = FixedPcdGet32 (PcdAdvancedLoggerHdwPortDebugPrintErrorLevel); - AdvancedLoggerHdwPortInitialize (); - LoggerInfo->HdwPortInitialized = TRUE; + AdvancedLoggerHdwPortInitialize (); + LoggerInfo->HdwPortInitialized = TRUE; LoggerInfo->InPermanentRAM = TRUE; } From fe4a2f04ced90e239181a133d457d87f99ce342a Mon Sep 17 00:00:00 2001 From: Sureshkumar Ponnusamy Date: Fri, 8 May 2026 15:31:51 -0700 Subject: [PATCH 6/8] Make sure logger buffer is large enough to hold some logs Signed-off-by: Sureshkumar Ponnusamy --- .../AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c | 7 +++++++ .../AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c | 5 ++++- .../Library/DebugAgent/Sec/AdvancedLoggerSecDebugAgent.c | 5 ++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c index 7cc4ed71fa..7899d1f8b6 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c @@ -53,6 +53,13 @@ InitializeLoggerHeaderIfNeeded ( LogBufferSize = EFI_PAGES_TO_SIZE (FixedPcdGet32 (PcdAdvancedLoggerPages)); + // + // Buffer must be large enough to hold the header plus some payload + // + if (LogBufferSize <= sizeof (ADVANCED_LOGGER_INFO)) { + return; + } + ZeroMem ((VOID *)LoggerInfo, sizeof (ADVANCED_LOGGER_INFO)); LoggerInfo->Signature = ADVANCED_LOGGER_SIGNATURE; LoggerInfo->Version = ADVANCED_LOGGER_INFO_VER; diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c b/AdvLoggerPkg/Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c index fc8b827789..676fb67908 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c @@ -36,7 +36,10 @@ AdvancedLoggerLibConstructor ( LogBufferSize = EFI_PAGES_TO_SIZE (FixedPcdGet64 (PcdAdvancedLoggerPages)); LoggerInfo = ALI_FROM_PA (FixedPcdGet64 (PcdAdvancedLoggerBase)); - if (LoggerInfo != NULL) { + // + // Buffer must be large enough to hold the header plus some payload.INFO). + // + if ((LoggerInfo != NULL) && (LogBufferSize > sizeof (ADVANCED_LOGGER_INFO))) { ZeroMem ((VOID *)LoggerInfo, sizeof (ADVANCED_LOGGER_INFO)); LoggerInfo->Signature = ADVANCED_LOGGER_SIGNATURE; LoggerInfo->Version = ADVANCED_LOGGER_INFO_VER; diff --git a/AdvLoggerPkg/Library/DebugAgent/Sec/AdvancedLoggerSecDebugAgent.c b/AdvLoggerPkg/Library/DebugAgent/Sec/AdvancedLoggerSecDebugAgent.c index 9caf5b81d4..5b95ac7211 100644 --- a/AdvLoggerPkg/Library/DebugAgent/Sec/AdvancedLoggerSecDebugAgent.c +++ b/AdvLoggerPkg/Library/DebugAgent/Sec/AdvancedLoggerSecDebugAgent.c @@ -122,7 +122,10 @@ InitializeDebugAgent ( CarBase = (EFI_PHYSICAL_ADDRESS)FixedPcdGet64 (PcdAdvancedLoggerCarBase); NewLogBuffer = AllocateRamForSEC (CarBase, LogBufferSize); - if (NewLogBuffer != 0ULL) { + // + // Buffer must be large enough to hold the header plus some payload.INFO). + // + if ((NewLogBuffer != 0ULL) && (LogBufferSize > sizeof (ADVANCED_LOGGER_INFO))) { LoggerInfo = ALI_FROM_PA (NewLogBuffer); ZeroMem ((VOID *)LoggerInfo, sizeof (ADVANCED_LOGGER_INFO)); LoggerInfo->Signature = ADVANCED_LOGGER_SIGNATURE; From 5684303380d5b5bc8bc64fa486aa25d645045a9c Mon Sep 17 00:00:00 2001 From: Sureshkumar Ponnusamy Date: Fri, 8 May 2026 21:33:14 -0700 Subject: [PATCH 7/8] Fix uncrustify issues Signed-off-by: Sureshkumar Ponnusamy --- .../AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c index 7899d1f8b6..0dd806eb7c 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/MmCoreArm/AdvancedLoggerLib.c @@ -61,12 +61,12 @@ InitializeLoggerHeaderIfNeeded ( } ZeroMem ((VOID *)LoggerInfo, sizeof (ADVANCED_LOGGER_INFO)); - LoggerInfo->Signature = ADVANCED_LOGGER_SIGNATURE; - LoggerInfo->Version = ADVANCED_LOGGER_INFO_VER; - LoggerInfo->LogBufferSize = (UINT32)(LogBufferSize - sizeof (ADVANCED_LOGGER_INFO)); - LoggerInfo->LogBufferOffset = EXPECTED_LOG_BUFFER_OFFSET (LoggerInfo); - LoggerInfo->LogCurrentOffset = LoggerInfo->LogBufferOffset; - LoggerInfo->HwPrintLevel = FixedPcdGet32 (PcdAdvancedLoggerHdwPortDebugPrintErrorLevel); + LoggerInfo->Signature = ADVANCED_LOGGER_SIGNATURE; + LoggerInfo->Version = ADVANCED_LOGGER_INFO_VER; + LoggerInfo->LogBufferSize = (UINT32)(LogBufferSize - sizeof (ADVANCED_LOGGER_INFO)); + LoggerInfo->LogBufferOffset = EXPECTED_LOG_BUFFER_OFFSET (LoggerInfo); + LoggerInfo->LogCurrentOffset = LoggerInfo->LogBufferOffset; + LoggerInfo->HwPrintLevel = FixedPcdGet32 (PcdAdvancedLoggerHdwPortDebugPrintErrorLevel); AdvancedLoggerHdwPortInitialize (); LoggerInfo->HdwPortInitialized = TRUE; LoggerInfo->InPermanentRAM = TRUE; From fce8ea153e76b1c9d10f9182e5606e0ecce37623 Mon Sep 17 00:00:00 2001 From: Sureshkumar Ponnusamy Date: Fri, 8 May 2026 22:04:11 -0700 Subject: [PATCH 8/8] Fixed typos Signed-off-by: Sureshkumar Ponnusamy --- .../Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c | 2 +- .../Library/DebugAgent/Sec/AdvancedLoggerSecDebugAgent.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c b/AdvLoggerPkg/Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c index 676fb67908..48f2fcff7b 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c @@ -37,7 +37,7 @@ AdvancedLoggerLibConstructor ( LoggerInfo = ALI_FROM_PA (FixedPcdGet64 (PcdAdvancedLoggerBase)); // - // Buffer must be large enough to hold the header plus some payload.INFO). + // Buffer must be large enough to hold the header plus some payload. // if ((LoggerInfo != NULL) && (LogBufferSize > sizeof (ADVANCED_LOGGER_INFO))) { ZeroMem ((VOID *)LoggerInfo, sizeof (ADVANCED_LOGGER_INFO)); diff --git a/AdvLoggerPkg/Library/DebugAgent/Sec/AdvancedLoggerSecDebugAgent.c b/AdvLoggerPkg/Library/DebugAgent/Sec/AdvancedLoggerSecDebugAgent.c index 5b95ac7211..011e7fb1e2 100644 --- a/AdvLoggerPkg/Library/DebugAgent/Sec/AdvancedLoggerSecDebugAgent.c +++ b/AdvLoggerPkg/Library/DebugAgent/Sec/AdvancedLoggerSecDebugAgent.c @@ -123,7 +123,7 @@ InitializeDebugAgent ( NewLogBuffer = AllocateRamForSEC (CarBase, LogBufferSize); // - // Buffer must be large enough to hold the header plus some payload.INFO). + // Buffer must be large enough to hold the header plus some payload. // if ((NewLogBuffer != 0ULL) && (LogBufferSize > sizeof (ADVANCED_LOGGER_INFO))) { LoggerInfo = ALI_FROM_PA (NewLogBuffer);