Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MdePkg: DebugLib: Check Signature in CR in Release Builds #6242

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Commits on Sep 30, 2024

  1. EmulatorPkg: Add Signature to Graphics Structure

    When updating MdePkg's CR macro to enforce signature checking in
    all usages, it was discovered that EmulatorPkg was initializing
    a structure without setting the signature for it, causing an error
    to be returned when CR now checked the signature.
    
    This commit updates the graphics stack in EmulatorPkg to set the
    signature of the data structure and check the return value of
    the wrapper for the CR macro.
    
    Signed-off-by: Oliver Smith-Denny <[email protected]>
    os-d committed Sep 30, 2024
    Configuration menu
    Copy the full SHA
    fc2b622 View commit details
    Browse the repository at this point in the history
  2. MdePkg: DebugLib: Check Signature in CR in Release Builds

    The CR macro is used to access an enclosing structure from a
    pointer within the structure. In DEBUG builds (i.e. when
    MDEPKG_NDEBUG is not set and debug asserts are enabled), this
    macro does signature validation checking to ensure that the
    structure that has been found is the correct structure, based
    on a signature passed in by the caller.
    
    However, if MDEPKG_NDEBUG is set or debug asserts are disabled,
    no signature validation is performed, meaning that CR may return
    an invalid structure that the caller believes is valid and has had
    signature validation on, causing undefined behavior (memory
    corruption). We should where at all possible have defined behavior,
    particularly in RELEASE builds, which are what typical platforms
    will ship to consumers.
    
    This patch updates CR to do the signature validation in all scenarios
    to provide defined behavior from the macro. In the event of a
    signature failure, CR will either 1) assert if !MDEPKG_NDEBUG and
    debug asserts are enabled (existing behavior) or 2) return NULL to
    indicate to the caller that signature validation failed.
    
    There exist consumers today who already, erroneously, rely on this
    behavior.
    
    Another macro, BASE_CR, exists for callers who do not wish to perform
    signature validation. Any code that wishes to avoid the signature
    validation should move to this macro.
    
    Signed-off-by: Oliver Smith-Denny <[email protected]>
    os-d committed Sep 30, 2024
    Configuration menu
    Copy the full SHA
    023a683 View commit details
    Browse the repository at this point in the history