/** @file Locate, get and update PE/COFF permissions during Standalone MM Foundation Entry point on ARM platforms. Copyright (c) 2017 - 2021, Arm Ltd. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include #include #include #include #include #include #include #include #include /** Privileged firmware assigns RO & Executable attributes to all memory occupied by the Boot Firmware Volume. This function locates the Standalone MM Core module PE/COFF image in the BFV and returns this information. @param [in] BfvAddress Base Address of Boot Firmware Volume @param [in, out] UefiImage Pointer to address for allocating memory for PE/COFF image data @param [in, out] UefiImageSize Pointer to size of PE/COFF image data **/ EFI_STATUS EFIAPI LocateStandaloneMmCoreUefiImage ( IN EFI_FIRMWARE_VOLUME_HEADER *BfvAddress, IN OUT VOID **UefiImage, IN OUT UINT32 *UefiImageSize ) { EFI_FFS_FILE_HEADER *FileHeader; EFI_STATUS Status; FileHeader = NULL; Status = FfsFindNextFile ( EFI_FV_FILETYPE_SECURITY_CORE, BfvAddress, &FileHeader ); if (EFI_ERROR (Status)) { DEBUG (( DEBUG_ERROR, "Unable to locate Standalone MM FFS file - 0x%x\n", Status )); return Status; } Status = FfsFindSectionData (EFI_SECTION_PE32, FileHeader, UefiImage, UefiImageSize); if (EFI_ERROR (Status)) { DEBUG (( DEBUG_ERROR, "Unable to locate Standalone MM Section data - %r\n", Status )); return Status; } DEBUG ((DEBUG_INFO, "Found Standalone MM PE data - 0x%x\n", *UefiImage)); return Status; }