From 6b02b9582996a3397941ff44601f226511155c88 Mon Sep 17 00:00:00 2001 From: kuqin12 <42554914+kuqin12@users.noreply.github.com> Date: Tue, 14 Nov 2023 21:43:30 -0800 Subject: [PATCH] Inspect `mLoggerInfo` before accessing in the event callback (#345) ## Description This change adds an inspection of `mLoggerInfo` variable before reading from GetTime() runtime service. As the advanced logger design expects the `mLoggerInfo` to be set to NULL, we should always check the pointer before usage, otherwise page fault could occur under certain edge cases. - [x] Impacts functionality? - **Functionality** - Does the change ultimately impact how firmware functions? - Examples: Add a new library, publish a new PPI, update an algorithm, ... - [ ] Impacts security? - **Security** - Does the change have a direct security impact on an application, flow, or firmware? - Examples: Crypto algorithm change, buffer overflow fix, parameter validation improvement, ... - [ ] Breaking change? - **Breaking change** - Will anyone consuming this change experience a break in build or boot behavior? - Examples: Add a new library class, move a module to a different repo, call a function in a new library class in a pre-existing module, ... - [ ] Includes tests? - **Tests** - Does the change include any explicit test code? - Examples: Unit tests, integration tests, robot tests, ... - [ ] Includes documentation? - **Documentation** - Does the change contain explicit documentation additions outside direct code modifications (and comments)? - Examples: Update readme file, add feature readme file, link to documentation on an a separate Web page, ... ## How This Was Tested This was tested on QEMU Q35 platform. ## Integration Instructions N/A --------- Co-authored-by: Michael Kubacki --- .../AdvancedLoggerLib/DxeCore/AdvancedLoggerLib.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/AdvancedLoggerLib.c b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/AdvancedLoggerLib.c index f4fd4c762c..bbfcf98bda 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/AdvancedLoggerLib.c +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/DxeCore/AdvancedLoggerLib.c @@ -189,11 +189,13 @@ OnRealTimeClockArchNotification ( SystemTable->BootServices->CloseEvent (Event); - Status = SystemTable->RuntimeServices->GetTime ((EFI_TIME *)&mLoggerInfo->Time, NULL); - if (EFI_ERROR (Status)) { - DEBUG ((DEBUG_INFO, "%a: error getting real time. Code=%r\n", __FUNCTION__, Status)); - } else { - mLoggerInfo->TicksAtTime = GetPerformanceCounter (); + if (mLoggerInfo != NULL) { + Status = SystemTable->RuntimeServices->GetTime ((EFI_TIME *)&mLoggerInfo->Time, NULL); + if (EFI_ERROR (Status)) { + DEBUG ((DEBUG_ERROR, "%a: error getting real time. Code=%r\n", __func__, Status)); + } else { + mLoggerInfo->TicksAtTime = GetPerformanceCounter (); + } } return;