Skip to content

Commit

Permalink
Fixed logic related to DxeCore only advanced logger (#359)
Browse files Browse the repository at this point in the history
## Description

When using advanced logger starting from DxeCore, the library
constructor will allocate space for the advanced logger buffer.
When this allocation takes place, the associated global variable
`mMaxAddress` will be created to specify the last address for the log
buffer.

In the DxeCore case, the calculation for `mMaxAddress` did not take into
account the size of the `ADVANCED_LOGGER_INFO` structure that is at the
start of the buffer, resulting in an inconsistent address between
`mMaxAddress` and `LoggerInfo->LogBuffer + LoggerInfo->LogBufferSize`

All other instances of this code use `LoggerInfo->LogBuffer +
LoggerInfo->LogBufferSize`, so change DxeCore library instance to use
the same logic as other library instances.


For each item, place an "x" in between `[` and `]` if true. Example:
`[x]`.
_(you can also check items in the GitHub UI)_

- [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
Found by setting debug messages to such a high level that the end of the
buffer was reached, resulting in incorrect checks of `mMaxAddress`
overwriting the end of the buffer.

Incorrect logic was tripped up in `ValidateInfoBlock()` where
`mMaxAddress` would cause a return of `false`, which in turn would
result in NULL being returned from an arbitrary call to
`AdvancedLoggerGetLoggerInfo`.

## Integration Instructions
n/a
  • Loading branch information
apop5 authored and kenlautner committed Dec 14, 2023
1 parent 68027d6 commit 0d14805
Showing 1 changed file with 1 addition and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ DxeCoreAdvancedLoggerLibConstructor (
LoggerInfo->LogBufferSize = EFI_PAGES_TO_SIZE (FixedPcdGet32 (PcdAdvancedLoggerPages)) - sizeof (ADVANCED_LOGGER_INFO);
LoggerInfo->LogCurrent = LoggerInfo->LogBuffer;
LoggerInfo->HwPrintLevel = FixedPcdGet32 (PcdAdvancedLoggerHdwPortDebugPrintErrorLevel);
mMaxAddress = PA_FROM_PTR (LoggerInfo) + LoggerInfo->LogBufferSize;
mMaxAddress = LoggerInfo->LogBuffer + LoggerInfo->LogBufferSize;
mBufferSize = LoggerInfo->LogBufferSize;
} else {
DEBUG ((DEBUG_ERROR, "%a: Error allocating Advanced Logger Buffer\n", __FUNCTION__));
Expand Down

0 comments on commit 0d14805

Please sign in to comment.