Once the image is unloaded, the protection is removed automatically.\r
\r
Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
\r
#include <Guid/EventGroup.h>\r
#include <Guid/MemoryAttributesTable.h>\r
-#include <Guid/PropertiesTable.h>\r
\r
#include <Protocol/FirmwareVolume2.h>\r
#include <Protocol/SimpleFileSystem.h>\r
#include "DxeMain.h"\r
#include "Mem/HeapGuard.h"\r
\r
-#define CACHE_ATTRIBUTE_MASK (EFI_MEMORY_UC | EFI_MEMORY_WC | EFI_MEMORY_WT | EFI_MEMORY_WB | EFI_MEMORY_UCE | EFI_MEMORY_WP)\r
-#define MEMORY_ATTRIBUTE_MASK (EFI_MEMORY_RP | EFI_MEMORY_XP | EFI_MEMORY_RO)\r
-\r
//\r
// Image type definitions\r
//\r
-#define IMAGE_UNKNOWN 0x00000001\r
-#define IMAGE_FROM_FV 0x00000002\r
+#define IMAGE_UNKNOWN 0x00000001\r
+#define IMAGE_FROM_FV 0x00000002\r
\r
//\r
// Protection policy bit definition\r
//\r
-#define DO_NOT_PROTECT 0x00000000\r
-#define PROTECT_IF_ALIGNED_ELSE_ALLOW 0x00000001\r
+#define DO_NOT_PROTECT 0x00000000\r
+#define PROTECT_IF_ALIGNED_ELSE_ALLOW 0x00000001\r
\r
-#define MEMORY_TYPE_OS_RESERVED_MIN 0x80000000\r
-#define MEMORY_TYPE_OEM_RESERVED_MIN 0x70000000\r
+#define MEMORY_TYPE_OS_RESERVED_MIN 0x80000000\r
+#define MEMORY_TYPE_OEM_RESERVED_MIN 0x70000000\r
\r
#define PREVIOUS_MEMORY_DESCRIPTOR(MemoryDescriptor, Size) \\r
((EFI_MEMORY_DESCRIPTOR *)((UINT8 *)(MemoryDescriptor) - (Size)))\r
\r
-UINT32 mImageProtectionPolicy;\r
+UINT32 mImageProtectionPolicy;\r
\r
-extern LIST_ENTRY mGcdMemorySpaceMap;\r
+extern LIST_ENTRY mGcdMemorySpaceMap;\r
\r
-STATIC LIST_ENTRY mProtectedImageRecordList;\r
+STATIC LIST_ENTRY mProtectedImageRecordList;\r
\r
/**\r
Sort code section in image record, based upon CodeSegmentBase from low to high.\r
**/\r
VOID\r
SortImageRecordCodeSection (\r
- IN IMAGE_PROPERTIES_RECORD *ImageRecord\r
+ IN IMAGE_PROPERTIES_RECORD *ImageRecord\r
);\r
\r
/**\r
**/\r
BOOLEAN\r
IsImageRecordCodeSectionValid (\r
- IN IMAGE_PROPERTIES_RECORD *ImageRecord\r
+ IN IMAGE_PROPERTIES_RECORD *ImageRecord\r
);\r
\r
/**\r
**/\r
UINT32\r
GetImageType (\r
- IN CONST EFI_DEVICE_PATH_PROTOCOL *File\r
+ IN CONST EFI_DEVICE_PATH_PROTOCOL *File\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_HANDLE DeviceHandle;\r
- EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;\r
+ EFI_STATUS Status;\r
+ EFI_HANDLE DeviceHandle;\r
+ EFI_DEVICE_PATH_PROTOCOL *TempDevicePath;\r
\r
if (File == NULL) {\r
return IMAGE_UNKNOWN;\r
//\r
// First check to see if File is from a Firmware Volume\r
//\r
- DeviceHandle = NULL;\r
- TempDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) File;\r
- Status = gBS->LocateDevicePath (\r
- &gEfiFirmwareVolume2ProtocolGuid,\r
- &TempDevicePath,\r
- &DeviceHandle\r
- );\r
+ DeviceHandle = NULL;\r
+ TempDevicePath = (EFI_DEVICE_PATH_PROTOCOL *)File;\r
+ Status = gBS->LocateDevicePath (\r
+ &gEfiFirmwareVolume2ProtocolGuid,\r
+ &TempDevicePath,\r
+ &DeviceHandle\r
+ );\r
if (!EFI_ERROR (Status)) {\r
Status = gBS->OpenProtocol (\r
DeviceHandle,\r
return IMAGE_FROM_FV;\r
}\r
}\r
+\r
return IMAGE_UNKNOWN;\r
}\r
\r
**/\r
UINT32\r
GetUefiImageProtectionPolicy (\r
- IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage,\r
- IN EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath\r
+ IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath\r
)\r
{\r
- BOOLEAN InSmm;\r
- UINT32 ImageType;\r
- UINT32 ProtectionPolicy;\r
+ BOOLEAN InSmm;\r
+ UINT32 ImageType;\r
+ UINT32 ProtectionPolicy;\r
\r
//\r
// Check SMM\r
if (gSmmBase2 != NULL) {\r
gSmmBase2->InSmm (gSmmBase2, &InSmm);\r
}\r
+\r
if (InSmm) {\r
return FALSE;\r
}\r
} else {\r
ImageType = GetImageType (LoadedImageDevicePath);\r
}\r
+\r
ProtectionPolicy = GetProtectionPolicyFromImageType (ImageType);\r
return ProtectionPolicy;\r
}\r
\r
-\r
/**\r
Set UEFI image memory attributes.\r
\r
**/\r
VOID\r
SetUefiImageMemoryAttributes (\r
- IN UINT64 BaseAddress,\r
- IN UINT64 Length,\r
- IN UINT64 Attributes\r
+ IN UINT64 BaseAddress,\r
+ IN UINT64 Length,\r
+ IN UINT64 Attributes\r
)\r
{\r
EFI_STATUS Status;\r
EFI_GCD_MEMORY_SPACE_DESCRIPTOR Descriptor;\r
UINT64 FinalAttributes;\r
\r
- Status = CoreGetMemorySpaceDescriptor(BaseAddress, &Descriptor);\r
- ASSERT_EFI_ERROR(Status);\r
+ Status = CoreGetMemorySpaceDescriptor (BaseAddress, &Descriptor);\r
+ ASSERT_EFI_ERROR (Status);\r
\r
- FinalAttributes = (Descriptor.Attributes & CACHE_ATTRIBUTE_MASK) | (Attributes & MEMORY_ATTRIBUTE_MASK);\r
+ FinalAttributes = (Descriptor.Attributes & EFI_CACHE_ATTRIBUTE_MASK) | (Attributes & EFI_MEMORY_ATTRIBUTE_MASK);\r
\r
DEBUG ((DEBUG_INFO, "SetUefiImageMemoryAttributes - 0x%016lx - 0x%016lx (0x%016lx)\n", BaseAddress, Length, FinalAttributes));\r
\r
- ASSERT(gCpu != NULL);\r
+ ASSERT (gCpu != NULL);\r
gCpu->SetMemoryAttributes (gCpu, BaseAddress, Length, FinalAttributes);\r
}\r
\r
**/\r
VOID\r
SetUefiImageProtectionAttributes (\r
- IN IMAGE_PROPERTIES_RECORD *ImageRecord\r
+ IN IMAGE_PROPERTIES_RECORD *ImageRecord\r
)\r
{\r
- IMAGE_PROPERTIES_RECORD_CODE_SECTION *ImageRecordCodeSection;\r
- LIST_ENTRY *ImageRecordCodeSectionLink;\r
- LIST_ENTRY *ImageRecordCodeSectionEndLink;\r
- LIST_ENTRY *ImageRecordCodeSectionList;\r
- UINT64 CurrentBase;\r
- UINT64 ImageEnd;\r
+ IMAGE_PROPERTIES_RECORD_CODE_SECTION *ImageRecordCodeSection;\r
+ LIST_ENTRY *ImageRecordCodeSectionLink;\r
+ LIST_ENTRY *ImageRecordCodeSectionEndLink;\r
+ LIST_ENTRY *ImageRecordCodeSectionList;\r
+ UINT64 CurrentBase;\r
+ UINT64 ImageEnd;\r
\r
ImageRecordCodeSectionList = &ImageRecord->CodeSegmentList;\r
\r
CurrentBase = ImageRecord->ImageBase;\r
ImageEnd = ImageRecord->ImageBase + ImageRecord->ImageSize;\r
\r
- ImageRecordCodeSectionLink = ImageRecordCodeSectionList->ForwardLink;\r
+ ImageRecordCodeSectionLink = ImageRecordCodeSectionList->ForwardLink;\r
ImageRecordCodeSectionEndLink = ImageRecordCodeSectionList;\r
while (ImageRecordCodeSectionLink != ImageRecordCodeSectionEndLink) {\r
ImageRecordCodeSection = CR (\r
EFI_MEMORY_XP\r
);\r
}\r
+\r
//\r
// CODE\r
//\r
);\r
CurrentBase = ImageRecordCodeSection->CodeSegmentBase + ImageRecordCodeSection->CodeSegmentSize;\r
}\r
+\r
//\r
// Last DATA\r
//\r
EFI_MEMORY_XP\r
);\r
}\r
- return ;\r
+\r
+ return;\r
}\r
\r
/**\r
UINT32 PageAlignment;\r
\r
switch (MemoryType) {\r
- case EfiRuntimeServicesCode:\r
- case EfiACPIMemoryNVS:\r
- PageAlignment = RUNTIME_PAGE_ALLOCATION_GRANULARITY;\r
- break;\r
- case EfiRuntimeServicesData:\r
- case EfiACPIReclaimMemory:\r
- ASSERT (FALSE);\r
- PageAlignment = RUNTIME_PAGE_ALLOCATION_GRANULARITY;\r
- break;\r
- case EfiBootServicesCode:\r
- case EfiLoaderCode:\r
- case EfiReservedMemoryType:\r
- PageAlignment = EFI_PAGE_SIZE;\r
- break;\r
- default:\r
- ASSERT (FALSE);\r
- PageAlignment = EFI_PAGE_SIZE;\r
- break;\r
+ case EfiRuntimeServicesCode:\r
+ case EfiACPIMemoryNVS:\r
+ PageAlignment = RUNTIME_PAGE_ALLOCATION_GRANULARITY;\r
+ break;\r
+ case EfiRuntimeServicesData:\r
+ case EfiACPIReclaimMemory:\r
+ ASSERT (FALSE);\r
+ PageAlignment = RUNTIME_PAGE_ALLOCATION_GRANULARITY;\r
+ break;\r
+ case EfiBootServicesCode:\r
+ case EfiLoaderCode:\r
+ case EfiReservedMemoryType:\r
+ PageAlignment = EFI_PAGE_SIZE;\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
+ PageAlignment = EFI_PAGE_SIZE;\r
+ break;\r
}\r
\r
if ((SectionAlignment & (PageAlignment - 1)) != 0) {\r
**/\r
VOID\r
FreeImageRecord (\r
- IN IMAGE_PROPERTIES_RECORD *ImageRecord\r
+ IN IMAGE_PROPERTIES_RECORD *ImageRecord\r
)\r
{\r
- LIST_ENTRY *CodeSegmentListHead;\r
- IMAGE_PROPERTIES_RECORD_CODE_SECTION *ImageRecordCodeSection;\r
+ LIST_ENTRY *CodeSegmentListHead;\r
+ IMAGE_PROPERTIES_RECORD_CODE_SECTION *ImageRecordCodeSection;\r
\r
CodeSegmentListHead = &ImageRecord->CodeSegmentList;\r
while (!IsListEmpty (CodeSegmentListHead)) {\r
if (ImageRecord->Link.ForwardLink != NULL) {\r
RemoveEntryList (&ImageRecord->Link);\r
}\r
+\r
FreePool (ImageRecord);\r
}\r
\r
**/\r
VOID\r
ProtectUefiImage (\r
- IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage,\r
- IN EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath\r
+ IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath\r
)\r
{\r
- VOID *ImageAddress;\r
- EFI_IMAGE_DOS_HEADER *DosHdr;\r
- UINT32 PeCoffHeaderOffset;\r
- UINT32 SectionAlignment;\r
- EFI_IMAGE_SECTION_HEADER *Section;\r
- EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;\r
- UINT8 *Name;\r
- UINTN Index;\r
- IMAGE_PROPERTIES_RECORD *ImageRecord;\r
- CHAR8 *PdbPointer;\r
- IMAGE_PROPERTIES_RECORD_CODE_SECTION *ImageRecordCodeSection;\r
- BOOLEAN IsAligned;\r
- UINT32 ProtectionPolicy;\r
+ VOID *ImageAddress;\r
+ EFI_IMAGE_DOS_HEADER *DosHdr;\r
+ UINT32 PeCoffHeaderOffset;\r
+ UINT32 SectionAlignment;\r
+ EFI_IMAGE_SECTION_HEADER *Section;\r
+ EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr;\r
+ UINT8 *Name;\r
+ UINTN Index;\r
+ IMAGE_PROPERTIES_RECORD *ImageRecord;\r
+ CHAR8 *PdbPointer;\r
+ IMAGE_PROPERTIES_RECORD_CODE_SECTION *ImageRecordCodeSection;\r
+ BOOLEAN IsAligned;\r
+ UINT32 ProtectionPolicy;\r
\r
DEBUG ((DEBUG_INFO, "ProtectUefiImageCommon - 0x%x\n", LoadedImage));\r
DEBUG ((DEBUG_INFO, " - 0x%016lx - 0x%016lx\n", (EFI_PHYSICAL_ADDRESS)(UINTN)LoadedImage->ImageBase, LoadedImage->ImageSize));\r
\r
if (gCpu == NULL) {\r
- return ;\r
+ return;\r
}\r
\r
ProtectionPolicy = GetUefiImageProtectionPolicy (LoadedImage, LoadedImageDevicePath);\r
switch (ProtectionPolicy) {\r
- case DO_NOT_PROTECT:\r
- return ;\r
- case PROTECT_IF_ALIGNED_ELSE_ALLOW:\r
- break;\r
- default:\r
- ASSERT(FALSE);\r
- return ;\r
+ case DO_NOT_PROTECT:\r
+ return;\r
+ case PROTECT_IF_ALIGNED_ELSE_ALLOW:\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
+ return;\r
}\r
\r
- ImageRecord = AllocateZeroPool (sizeof(*ImageRecord));\r
+ ImageRecord = AllocateZeroPool (sizeof (*ImageRecord));\r
if (ImageRecord == NULL) {\r
- return ;\r
+ return;\r
}\r
+\r
ImageRecord->Signature = IMAGE_PROPERTIES_RECORD_SIGNATURE;\r
\r
//\r
\r
ImageAddress = LoadedImage->ImageBase;\r
\r
- PdbPointer = PeCoffLoaderGetPdbPointer ((VOID*) (UINTN) ImageAddress);\r
+ PdbPointer = PeCoffLoaderGetPdbPointer ((VOID *)(UINTN)ImageAddress);\r
if (PdbPointer != NULL) {\r
DEBUG ((DEBUG_VERBOSE, " Image - %a\n", PdbPointer));\r
}\r
//\r
// Check PE/COFF image\r
//\r
- DosHdr = (EFI_IMAGE_DOS_HEADER *) (UINTN) ImageAddress;\r
+ DosHdr = (EFI_IMAGE_DOS_HEADER *)(UINTN)ImageAddress;\r
PeCoffHeaderOffset = 0;\r
if (DosHdr->e_magic == EFI_IMAGE_DOS_SIGNATURE) {\r
PeCoffHeaderOffset = DosHdr->e_lfanew;\r
}\r
\r
- Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINT8 *) (UINTN) ImageAddress + PeCoffHeaderOffset);\r
+ Hdr.Pe32 = (EFI_IMAGE_NT_HEADERS32 *)((UINT8 *)(UINTN)ImageAddress + PeCoffHeaderOffset);\r
if (Hdr.Pe32->Signature != EFI_IMAGE_NT_SIGNATURE) {\r
DEBUG ((DEBUG_VERBOSE, "Hdr.Pe32->Signature invalid - 0x%x\n", Hdr.Pe32->Signature));\r
// It might be image in SMM.\r
// Get SectionAlignment\r
//\r
if (Hdr.Pe32->OptionalHeader.Magic == EFI_IMAGE_NT_OPTIONAL_HDR32_MAGIC) {\r
- SectionAlignment = Hdr.Pe32->OptionalHeader.SectionAlignment;\r
+ SectionAlignment = Hdr.Pe32->OptionalHeader.SectionAlignment;\r
} else {\r
- SectionAlignment = Hdr.Pe32Plus->OptionalHeader.SectionAlignment;\r
+ SectionAlignment = Hdr.Pe32Plus->OptionalHeader.SectionAlignment;\r
}\r
\r
IsAligned = IsMemoryProtectionSectionAligned (SectionAlignment, LoadedImage->ImageCodeType);\r
if (!IsAligned) {\r
- DEBUG ((DEBUG_VERBOSE, "!!!!!!!! ProtectUefiImageCommon - Section Alignment(0x%x) is incorrect !!!!!!!!\n",\r
- SectionAlignment));\r
- PdbPointer = PeCoffLoaderGetPdbPointer ((VOID*) (UINTN) ImageAddress);\r
+ DEBUG ((\r
+ DEBUG_VERBOSE,\r
+ "!!!!!!!! ProtectUefiImageCommon - Section Alignment(0x%x) is incorrect !!!!!!!!\n",\r
+ SectionAlignment\r
+ ));\r
+ PdbPointer = PeCoffLoaderGetPdbPointer ((VOID *)(UINTN)ImageAddress);\r
if (PdbPointer != NULL) {\r
DEBUG ((DEBUG_VERBOSE, "!!!!!!!! Image - %a !!!!!!!!\n", PdbPointer));\r
}\r
+\r
goto Finish;\r
}\r
\r
- Section = (EFI_IMAGE_SECTION_HEADER *) (\r
- (UINT8 *) (UINTN) ImageAddress +\r
- PeCoffHeaderOffset +\r
- sizeof(UINT32) +\r
- sizeof(EFI_IMAGE_FILE_HEADER) +\r
- Hdr.Pe32->FileHeader.SizeOfOptionalHeader\r
- );\r
+ Section = (EFI_IMAGE_SECTION_HEADER *)(\r
+ (UINT8 *)(UINTN)ImageAddress +\r
+ PeCoffHeaderOffset +\r
+ sizeof (UINT32) +\r
+ sizeof (EFI_IMAGE_FILE_HEADER) +\r
+ Hdr.Pe32->FileHeader.SizeOfOptionalHeader\r
+ );\r
ImageRecord->CodeSegmentCount = 0;\r
InitializeListHead (&ImageRecord->CodeSegmentList);\r
for (Index = 0; Index < Hdr.Pe32->FileHeader.NumberOfSections; Index++) {\r
//\r
// Step 2: record code section\r
//\r
- ImageRecordCodeSection = AllocatePool (sizeof(*ImageRecordCodeSection));\r
+ ImageRecordCodeSection = AllocatePool (sizeof (*ImageRecordCodeSection));\r
if (ImageRecordCodeSection == NULL) {\r
- return ;\r
+ return;\r
}\r
+\r
ImageRecordCodeSection->Signature = IMAGE_PROPERTIES_RECORD_CODE_SECTION_SIGNATURE;\r
\r
ImageRecordCodeSection->CodeSegmentBase = (UINTN)ImageAddress + Section[Index].VirtualAddress;\r
- ImageRecordCodeSection->CodeSegmentSize = ALIGN_VALUE(Section[Index].SizeOfRawData, SectionAlignment);\r
+ ImageRecordCodeSection->CodeSegmentSize = ALIGN_VALUE (Section[Index].SizeOfRawData, SectionAlignment);\r
\r
DEBUG ((DEBUG_VERBOSE, "ImageCode: 0x%016lx - 0x%016lx\n", ImageRecordCodeSection->CodeSegmentBase, ImageRecordCodeSection->CodeSegmentSize));\r
\r
// of course).\r
//\r
DEBUG ((DEBUG_WARN, "!!!!!!!! ProtectUefiImageCommon - CodeSegmentCount is 0 !!!!!!!!\n"));\r
- PdbPointer = PeCoffLoaderGetPdbPointer ((VOID*) (UINTN) ImageAddress);\r
+ PdbPointer = PeCoffLoaderGetPdbPointer ((VOID *)(UINTN)ImageAddress);\r
if (PdbPointer != NULL) {\r
DEBUG ((DEBUG_WARN, "!!!!!!!! Image - %a !!!!!!!!\n", PdbPointer));\r
}\r
+\r
goto Finish;\r
}\r
\r
// Round up the ImageSize, some CPU arch may return EFI_UNSUPPORTED if ImageSize is not aligned.\r
// Given that the loader always allocates full pages, we know the space after the image is not used.\r
//\r
- ImageRecord->ImageSize = ALIGN_VALUE(LoadedImage->ImageSize, EFI_PAGE_SIZE);\r
+ ImageRecord->ImageSize = ALIGN_VALUE (LoadedImage->ImageSize, EFI_PAGE_SIZE);\r
\r
//\r
// CPU ARCH present. Update memory attribute directly.\r
InsertTailList (&mProtectedImageRecordList, &ImageRecord->Link);\r
\r
Finish:\r
- return ;\r
+ return;\r
}\r
\r
/**\r
**/\r
VOID\r
UnprotectUefiImage (\r
- IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage,\r
- IN EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath\r
+ IN EFI_LOADED_IMAGE_PROTOCOL *LoadedImage,\r
+ IN EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath\r
)\r
{\r
- IMAGE_PROPERTIES_RECORD *ImageRecord;\r
- LIST_ENTRY *ImageRecordLink;\r
+ IMAGE_PROPERTIES_RECORD *ImageRecord;\r
+ LIST_ENTRY *ImageRecordLink;\r
\r
- if (PcdGet32(PcdImageProtectionPolicy) != 0) {\r
+ if (PcdGet32 (PcdImageProtectionPolicy) != 0) {\r
for (ImageRecordLink = mProtectedImageRecordList.ForwardLink;\r
ImageRecordLink != &mProtectedImageRecordList;\r
- ImageRecordLink = ImageRecordLink->ForwardLink) {\r
+ ImageRecordLink = ImageRecordLink->ForwardLink)\r
+ {\r
ImageRecord = CR (\r
ImageRecordLink,\r
IMAGE_PROPERTIES_RECORD,\r
);\r
\r
if (ImageRecord->ImageBase == (EFI_PHYSICAL_ADDRESS)(UINTN)LoadedImage->ImageBase) {\r
- SetUefiImageMemoryAttributes (ImageRecord->ImageBase,\r
- ImageRecord->ImageSize,\r
- 0);\r
+ SetUefiImageMemoryAttributes (\r
+ ImageRecord->ImageBase,\r
+ ImageRecord->ImageSize,\r
+ 0\r
+ );\r
FreeImageRecord (ImageRecord);\r
return;\r
}\r
STATIC\r
UINT64\r
GetPermissionAttributeForMemoryType (\r
- IN EFI_MEMORY_TYPE MemoryType\r
+ IN EFI_MEMORY_TYPE MemoryType\r
)\r
{\r
- UINT64 TestBit;\r
+ UINT64 TestBit;\r
\r
if ((UINT32)MemoryType >= MEMORY_TYPE_OS_RESERVED_MIN) {\r
TestBit = BIT63;\r
IN UINTN DescriptorSize\r
)\r
{\r
- EFI_MEMORY_DESCRIPTOR *MemoryMapEntry;\r
- EFI_MEMORY_DESCRIPTOR *NextMemoryMapEntry;\r
- EFI_MEMORY_DESCRIPTOR *MemoryMapEnd;\r
- EFI_MEMORY_DESCRIPTOR TempMemoryMap;\r
+ EFI_MEMORY_DESCRIPTOR *MemoryMapEntry;\r
+ EFI_MEMORY_DESCRIPTOR *NextMemoryMapEntry;\r
+ EFI_MEMORY_DESCRIPTOR *MemoryMapEnd;\r
+ EFI_MEMORY_DESCRIPTOR TempMemoryMap;\r
\r
- MemoryMapEntry = MemoryMap;\r
+ MemoryMapEntry = MemoryMap;\r
NextMemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
- MemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *) ((UINT8 *) MemoryMap + MemoryMapSize);\r
+ MemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *)((UINT8 *)MemoryMap + MemoryMapSize);\r
while (MemoryMapEntry < MemoryMapEnd) {\r
while (NextMemoryMapEntry < MemoryMapEnd) {\r
if (MemoryMapEntry->PhysicalStart > NextMemoryMapEntry->PhysicalStart) {\r
- CopyMem (&TempMemoryMap, MemoryMapEntry, sizeof(EFI_MEMORY_DESCRIPTOR));\r
- CopyMem (MemoryMapEntry, NextMemoryMapEntry, sizeof(EFI_MEMORY_DESCRIPTOR));\r
- CopyMem (NextMemoryMapEntry, &TempMemoryMap, sizeof(EFI_MEMORY_DESCRIPTOR));\r
+ CopyMem (&TempMemoryMap, MemoryMapEntry, sizeof (EFI_MEMORY_DESCRIPTOR));\r
+ CopyMem (MemoryMapEntry, NextMemoryMapEntry, sizeof (EFI_MEMORY_DESCRIPTOR));\r
+ CopyMem (NextMemoryMapEntry, &TempMemoryMap, sizeof (EFI_MEMORY_DESCRIPTOR));\r
}\r
\r
NextMemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (NextMemoryMapEntry, DescriptorSize);\r
}\r
\r
- MemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
- NextMemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
+ MemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
+ NextMemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
}\r
}\r
\r
IN UINTN DescriptorSize\r
)\r
{\r
- EFI_MEMORY_DESCRIPTOR *MemoryMapEntry;\r
- EFI_MEMORY_DESCRIPTOR *MemoryMapEnd;\r
- UINT64 MemoryBlockLength;\r
- EFI_MEMORY_DESCRIPTOR *NewMemoryMapEntry;\r
- EFI_MEMORY_DESCRIPTOR *NextMemoryMapEntry;\r
- UINT64 Attributes;\r
+ EFI_MEMORY_DESCRIPTOR *MemoryMapEntry;\r
+ EFI_MEMORY_DESCRIPTOR *MemoryMapEnd;\r
+ UINT64 MemoryBlockLength;\r
+ EFI_MEMORY_DESCRIPTOR *NewMemoryMapEntry;\r
+ EFI_MEMORY_DESCRIPTOR *NextMemoryMapEntry;\r
+ UINT64 Attributes;\r
\r
SortMemoryMap (MemoryMap, *MemoryMapSize, DescriptorSize);\r
\r
- MemoryMapEntry = MemoryMap;\r
+ MemoryMapEntry = MemoryMap;\r
NewMemoryMapEntry = MemoryMap;\r
- MemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *) ((UINT8 *) MemoryMap + *MemoryMapSize);\r
+ MemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *)((UINT8 *)MemoryMap + *MemoryMapSize);\r
while ((UINTN)MemoryMapEntry < (UINTN)MemoryMapEnd) {\r
- CopyMem (NewMemoryMapEntry, MemoryMapEntry, sizeof(EFI_MEMORY_DESCRIPTOR));\r
+ CopyMem (NewMemoryMapEntry, MemoryMapEntry, sizeof (EFI_MEMORY_DESCRIPTOR));\r
NextMemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
\r
do {\r
- MemoryBlockLength = (UINT64) (EFI_PAGES_TO_SIZE((UINTN)MemoryMapEntry->NumberOfPages));\r
- Attributes = GetPermissionAttributeForMemoryType (MemoryMapEntry->Type);\r
+ MemoryBlockLength = (UINT64)(EFI_PAGES_TO_SIZE ((UINTN)MemoryMapEntry->NumberOfPages));\r
+ Attributes = GetPermissionAttributeForMemoryType (MemoryMapEntry->Type);\r
\r
if (((UINTN)NextMemoryMapEntry < (UINTN)MemoryMapEnd) &&\r
- Attributes == GetPermissionAttributeForMemoryType (NextMemoryMapEntry->Type) &&\r
- ((MemoryMapEntry->PhysicalStart + MemoryBlockLength) == NextMemoryMapEntry->PhysicalStart)) {\r
+ (Attributes == GetPermissionAttributeForMemoryType (NextMemoryMapEntry->Type)) &&\r
+ ((MemoryMapEntry->PhysicalStart + MemoryBlockLength) == NextMemoryMapEntry->PhysicalStart))\r
+ {\r
MemoryMapEntry->NumberOfPages += NextMemoryMapEntry->NumberOfPages;\r
if (NewMemoryMapEntry != MemoryMapEntry) {\r
NewMemoryMapEntry->NumberOfPages += NextMemoryMapEntry->NumberOfPages;\r
}\r
} while (TRUE);\r
\r
- MemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
+ MemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
NewMemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (NewMemoryMapEntry, DescriptorSize);\r
}\r
\r
*MemoryMapSize = (UINTN)NewMemoryMapEntry - (UINTN)MemoryMap;\r
\r
- return ;\r
+ return;\r
}\r
\r
-\r
/**\r
Remove exec permissions from all regions whose type is identified by\r
PcdDxeNxMemoryProtectionPolicy.\r
VOID\r
)\r
{\r
- UINTN MemoryMapSize;\r
- UINTN MapKey;\r
- UINTN DescriptorSize;\r
- UINT32 DescriptorVersion;\r
- EFI_MEMORY_DESCRIPTOR *MemoryMap;\r
- EFI_MEMORY_DESCRIPTOR *MemoryMapEntry;\r
- EFI_MEMORY_DESCRIPTOR *MemoryMapEnd;\r
- EFI_STATUS Status;\r
- UINT64 Attributes;\r
- LIST_ENTRY *Link;\r
- EFI_GCD_MAP_ENTRY *Entry;\r
- EFI_PEI_HOB_POINTERS Hob;\r
- EFI_HOB_MEMORY_ALLOCATION *MemoryHob;\r
- EFI_PHYSICAL_ADDRESS StackBase;\r
+ UINTN MemoryMapSize;\r
+ UINTN MapKey;\r
+ UINTN DescriptorSize;\r
+ UINT32 DescriptorVersion;\r
+ EFI_MEMORY_DESCRIPTOR *MemoryMap;\r
+ EFI_MEMORY_DESCRIPTOR *MemoryMapEntry;\r
+ EFI_MEMORY_DESCRIPTOR *MemoryMapEnd;\r
+ EFI_STATUS Status;\r
+ UINT64 Attributes;\r
+ LIST_ENTRY *Link;\r
+ EFI_GCD_MAP_ENTRY *Entry;\r
+ EFI_PEI_HOB_POINTERS Hob;\r
+ EFI_HOB_MEMORY_ALLOCATION *MemoryHob;\r
+ EFI_PHYSICAL_ADDRESS StackBase;\r
\r
//\r
// Get the EFI memory map.\r
);\r
ASSERT (Status == EFI_BUFFER_TOO_SMALL);\r
do {\r
- MemoryMap = (EFI_MEMORY_DESCRIPTOR *) AllocatePool (MemoryMapSize);\r
+ MemoryMap = (EFI_MEMORY_DESCRIPTOR *)AllocatePool (MemoryMapSize);\r
ASSERT (MemoryMap != NULL);\r
Status = gBS->GetMemoryMap (\r
&MemoryMapSize,\r
FreePool (MemoryMap);\r
}\r
} while (Status == EFI_BUFFER_TOO_SMALL);\r
+\r
ASSERT_EFI_ERROR (Status);\r
\r
StackBase = 0;\r
Hob.Raw = GetHobList ();\r
while ((Hob.Raw = GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, Hob.Raw)) != NULL) {\r
MemoryHob = Hob.MemoryAllocation;\r
- if (CompareGuid(&gEfiHobMemoryAllocStackGuid, &MemoryHob->AllocDescriptor.Name)) {\r
+ if (CompareGuid (&gEfiHobMemoryAllocStackGuid, &MemoryHob->AllocDescriptor.Name)) {\r
DEBUG ((\r
DEBUG_INFO,\r
"%a: StackBase = 0x%016lx StackSize = 0x%016lx\n",\r
ASSERT ((StackBase & EFI_PAGE_MASK) == 0);\r
break;\r
}\r
+\r
Hob.Raw = GET_NEXT_HOB (Hob);\r
}\r
\r
MergeMemoryMapForProtectionPolicy (MemoryMap, &MemoryMapSize, DescriptorSize);\r
\r
MemoryMapEntry = MemoryMap;\r
- MemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *) ((UINT8 *) MemoryMap + MemoryMapSize);\r
- while ((UINTN) MemoryMapEntry < (UINTN) MemoryMapEnd) {\r
-\r
+ MemoryMapEnd = (EFI_MEMORY_DESCRIPTOR *)((UINT8 *)MemoryMap + MemoryMapSize);\r
+ while ((UINTN)MemoryMapEntry < (UINTN)MemoryMapEnd) {\r
Attributes = GetPermissionAttributeForMemoryType (MemoryMapEntry->Type);\r
if (Attributes != 0) {\r
SetUefiImageMemoryAttributes (\r
MemoryMapEntry->PhysicalStart,\r
LShiftU64 (MemoryMapEntry->NumberOfPages, EFI_PAGE_SHIFT),\r
- Attributes);\r
+ Attributes\r
+ );\r
\r
//\r
// Add EFI_MEMORY_RP attribute for page 0 if NULL pointer detection is\r
// enabled.\r
//\r
- if (MemoryMapEntry->PhysicalStart == 0 &&\r
- PcdGet8 (PcdNullPointerDetectionPropertyMask) != 0) {\r
-\r
+ if ((MemoryMapEntry->PhysicalStart == 0) &&\r
+ (PcdGet8 (PcdNullPointerDetectionPropertyMask) != 0))\r
+ {\r
ASSERT (MemoryMapEntry->NumberOfPages > 0);\r
SetUefiImageMemoryAttributes (\r
0,\r
EFI_PAGES_TO_SIZE (1),\r
- EFI_MEMORY_RP | Attributes);\r
+ EFI_MEMORY_RP | Attributes\r
+ );\r
}\r
\r
//\r
// Add EFI_MEMORY_RP attribute for the first page of the stack if stack\r
// guard is enabled.\r
//\r
- if (StackBase != 0 &&\r
- (StackBase >= MemoryMapEntry->PhysicalStart &&\r
- StackBase < MemoryMapEntry->PhysicalStart +\r
- LShiftU64 (MemoryMapEntry->NumberOfPages, EFI_PAGE_SHIFT)) &&\r
- PcdGetBool (PcdCpuStackGuard)) {\r
-\r
+ if ((StackBase != 0) &&\r
+ ((StackBase >= MemoryMapEntry->PhysicalStart) &&\r
+ (StackBase < MemoryMapEntry->PhysicalStart +\r
+ LShiftU64 (MemoryMapEntry->NumberOfPages, EFI_PAGE_SHIFT))) &&\r
+ PcdGetBool (PcdCpuStackGuard))\r
+ {\r
SetUefiImageMemoryAttributes (\r
StackBase,\r
EFI_PAGES_TO_SIZE (1),\r
- EFI_MEMORY_RP | Attributes);\r
+ EFI_MEMORY_RP | Attributes\r
+ );\r
}\r
-\r
}\r
+\r
MemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
}\r
+\r
FreePool (MemoryMap);\r
\r
//\r
\r
Link = mGcdMemorySpaceMap.ForwardLink;\r
while (Link != &mGcdMemorySpaceMap) {\r
-\r
Entry = CR (Link, EFI_GCD_MAP_ENTRY, Link, EFI_GCD_MAP_SIGNATURE);\r
\r
- if (Entry->GcdMemoryType == EfiGcdMemoryTypeReserved &&\r
- Entry->EndAddress < MAX_ADDRESS &&\r
- (Entry->Capabilities & (EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED | EFI_MEMORY_TESTED)) ==\r
- (EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED)) {\r
-\r
+ if ((Entry->GcdMemoryType == EfiGcdMemoryTypeReserved) &&\r
+ (Entry->EndAddress < MAX_ADDRESS) &&\r
+ ((Entry->Capabilities & (EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED | EFI_MEMORY_TESTED)) ==\r
+ (EFI_MEMORY_PRESENT | EFI_MEMORY_INITIALIZED)))\r
+ {\r
Attributes = GetPermissionAttributeForMemoryType (EfiConventionalMemory) |\r
- (Entry->Attributes & CACHE_ATTRIBUTE_MASK);\r
+ (Entry->Attributes & EFI_CACHE_ATTRIBUTE_MASK);\r
\r
- DEBUG ((DEBUG_INFO,\r
+ DEBUG ((\r
+ DEBUG_INFO,\r
"Untested GCD memory space region: - 0x%016lx - 0x%016lx (0x%016lx)\n",\r
- Entry->BaseAddress, Entry->EndAddress - Entry->BaseAddress + 1,\r
- Attributes));\r
+ Entry->BaseAddress,\r
+ Entry->EndAddress - Entry->BaseAddress + 1,\r
+ Attributes\r
+ ));\r
\r
- ASSERT(gCpu != NULL);\r
- gCpu->SetMemoryAttributes (gCpu, Entry->BaseAddress,\r
- Entry->EndAddress - Entry->BaseAddress + 1, Attributes);\r
+ ASSERT (gCpu != NULL);\r
+ gCpu->SetMemoryAttributes (\r
+ gCpu,\r
+ Entry->BaseAddress,\r
+ Entry->EndAddress - Entry->BaseAddress + 1,\r
+ Attributes\r
+ );\r
}\r
\r
Link = Link->ForwardLink;\r
}\r
+\r
CoreReleaseGcdMemoryLock ();\r
}\r
}\r
\r
-\r
/**\r
A notification for CPU_ARCH protocol.\r
\r
VOID\r
EFIAPI\r
MemoryProtectionCpuArchProtocolNotify (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;\r
- EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath;\r
- UINTN NoHandles;\r
- EFI_HANDLE *HandleBuffer;\r
- UINTN Index;\r
+ EFI_STATUS Status;\r
+ EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;\r
+ EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath;\r
+ UINTN NoHandles;\r
+ EFI_HANDLE *HandleBuffer;\r
+ UINTN Index;\r
\r
DEBUG ((DEBUG_INFO, "MemoryProtectionCpuArchProtocolNotify:\n"));\r
Status = CoreLocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **)&gCpu);\r
if (EFI_ERROR (Status)) {\r
- return;\r
+ goto Done;\r
}\r
\r
//\r
HeapGuardCpuArchProtocolNotify ();\r
\r
if (mImageProtectionPolicy == 0) {\r
- return;\r
+ goto Done;\r
}\r
\r
Status = gBS->LocateHandleBuffer (\r
&HandleBuffer\r
);\r
if (EFI_ERROR (Status) && (NoHandles == 0)) {\r
- return ;\r
+ goto Done;\r
}\r
\r
for (Index = 0; Index < NoHandles; Index++) {\r
&gEfiLoadedImageProtocolGuid,\r
(VOID **)&LoadedImage\r
);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
continue;\r
}\r
+\r
Status = gBS->HandleProtocol (\r
HandleBuffer[Index],\r
&gEfiLoadedImageDevicePathProtocolGuid,\r
(VOID **)&LoadedImageDevicePath\r
);\r
- if (EFI_ERROR(Status)) {\r
+ if (EFI_ERROR (Status)) {\r
LoadedImageDevicePath = NULL;\r
}\r
\r
ProtectUefiImage (LoadedImage, LoadedImageDevicePath);\r
}\r
\r
+ FreePool (HandleBuffer);\r
+\r
+Done:\r
CoreCloseEvent (Event);\r
- return;\r
}\r
\r
/**\r
VOID\r
)\r
{\r
- EFI_RUNTIME_IMAGE_ENTRY *RuntimeImage;\r
- LIST_ENTRY *Link;\r
+ EFI_RUNTIME_IMAGE_ENTRY *RuntimeImage;\r
+ LIST_ENTRY *Link;\r
\r
//\r
// We need remove the RT protection, because RT relocation need write code segment\r
if (mImageProtectionPolicy != 0) {\r
for (Link = gRuntime->ImageHead.ForwardLink; Link != &gRuntime->ImageHead; Link = Link->ForwardLink) {\r
RuntimeImage = BASE_CR (Link, EFI_RUNTIME_IMAGE_ENTRY, Link);\r
- SetUefiImageMemoryAttributes ((UINT64)(UINTN)RuntimeImage->ImageBase, ALIGN_VALUE(RuntimeImage->ImageSize, EFI_PAGE_SIZE), 0);\r
+ SetUefiImageMemoryAttributes ((UINT64)(UINTN)RuntimeImage->ImageBase, ALIGN_VALUE (RuntimeImage->ImageSize, EFI_PAGE_SIZE), 0);\r
}\r
}\r
}\r
VOID\r
EFIAPI\r
DisableNullDetectionAtTheEndOfDxe (\r
- EFI_EVENT Event,\r
- VOID *Context\r
+ EFI_EVENT Event,\r
+ VOID *Context\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_GCD_MEMORY_SPACE_DESCRIPTOR Desc;\r
+ EFI_STATUS Status;\r
+ EFI_GCD_MEMORY_SPACE_DESCRIPTOR Desc;\r
\r
DEBUG ((DEBUG_INFO, "DisableNullDetectionAtTheEndOfDxe(): start\r\n"));\r
//\r
\r
if ((Desc.Capabilities & EFI_MEMORY_RP) == 0) {\r
Status = CoreSetMemorySpaceCapabilities (\r
- 0,\r
- EFI_PAGE_SIZE,\r
- Desc.Capabilities | EFI_MEMORY_RP\r
- );\r
+ 0,\r
+ EFI_PAGE_SIZE,\r
+ Desc.Capabilities | EFI_MEMORY_RP\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
}\r
\r
Status = CoreSetMemorySpaceAttributes (\r
- 0,\r
- EFI_PAGE_SIZE,\r
- Desc.Attributes & ~EFI_MEMORY_RP\r
- );\r
+ 0,\r
+ EFI_PAGE_SIZE,\r
+ Desc.Attributes & ~EFI_MEMORY_RP\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
\r
+ //\r
+ // Page 0 might have be allocated to avoid misuses. Free it here anyway.\r
+ //\r
+ CoreFreePages (0, 1);\r
+\r
CoreCloseEvent (Event);\r
DEBUG ((DEBUG_INFO, "DisableNullDetectionAtTheEndOfDxe(): end\r\n"));\r
\r
EFI_EVENT EndOfDxeEvent;\r
VOID *Registration;\r
\r
- mImageProtectionPolicy = PcdGet32(PcdImageProtectionPolicy);\r
+ mImageProtectionPolicy = PcdGet32 (PcdImageProtectionPolicy);\r
\r
InitializeListHead (&mProtectedImageRecordList);\r
\r
ASSERT ((GetPermissionAttributeForMemoryType (EfiBootServicesCode) & EFI_MEMORY_XP) == 0);\r
ASSERT ((GetPermissionAttributeForMemoryType (EfiRuntimeServicesCode) & EFI_MEMORY_XP) == 0);\r
ASSERT ((GetPermissionAttributeForMemoryType (EfiLoaderCode) & EFI_MEMORY_XP) == 0);\r
- ASSERT (GetPermissionAttributeForMemoryType (EfiBootServicesData) ==\r
- GetPermissionAttributeForMemoryType (EfiConventionalMemory));\r
-\r
- if (mImageProtectionPolicy != 0 || PcdGet64 (PcdDxeNxMemoryProtectionPolicy) != 0) {\r
- Status = CoreCreateEvent (\r
- EVT_NOTIFY_SIGNAL,\r
- TPL_CALLBACK,\r
- MemoryProtectionCpuArchProtocolNotify,\r
- NULL,\r
- &Event\r
- );\r
- ASSERT_EFI_ERROR(Status);\r
+ ASSERT (\r
+ GetPermissionAttributeForMemoryType (EfiBootServicesData) ==\r
+ GetPermissionAttributeForMemoryType (EfiConventionalMemory)\r
+ );\r
+\r
+ Status = CoreCreateEvent (\r
+ EVT_NOTIFY_SIGNAL,\r
+ TPL_CALLBACK,\r
+ MemoryProtectionCpuArchProtocolNotify,\r
+ NULL,\r
+ &Event\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
\r
- //\r
- // Register for protocol notifactions on this event\r
- //\r
- Status = CoreRegisterProtocolNotify (\r
- &gEfiCpuArchProtocolGuid,\r
- Event,\r
- &Registration\r
- );\r
- ASSERT_EFI_ERROR(Status);\r
- }\r
+ //\r
+ // Register for protocol notifactions on this event\r
+ //\r
+ Status = CoreRegisterProtocolNotify (\r
+ &gEfiCpuArchProtocolGuid,\r
+ Event,\r
+ &Registration\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
\r
//\r
// Register a callback to disable NULL pointer detection at EndOfDxe\r
//\r
if ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & (BIT0|BIT7))\r
- == (BIT0|BIT7)) {\r
+ == (BIT0|BIT7))\r
+ {\r
Status = CoreCreateEventEx (\r
- EVT_NOTIFY_SIGNAL,\r
- TPL_NOTIFY,\r
- DisableNullDetectionAtTheEndOfDxe,\r
- NULL,\r
- &gEfiEndOfDxeEventGroupGuid,\r
- &EndOfDxeEvent\r
- );\r
+ EVT_NOTIFY_SIGNAL,\r
+ TPL_NOTIFY,\r
+ DisableNullDetectionAtTheEndOfDxe,\r
+ NULL,\r
+ &gEfiEndOfDxeEventGroupGuid,\r
+ &EndOfDxeEvent\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
}\r
\r
- return ;\r
+ return;\r
}\r
\r
/**\r
VOID\r
)\r
{\r
- BOOLEAN InSmm;\r
+ BOOLEAN InSmm;\r
\r
InSmm = FALSE;\r
if (gSmmBase2 != NULL) {\r
gSmmBase2->InSmm (gSmmBase2, &InSmm);\r
}\r
+\r
return InSmm;\r
}\r
\r
// Don't overwrite Guard pages, which should be the first and/or last page,\r
// if any.\r
//\r
- if (IsHeapGuardEnabled ()) {\r
- if (IsGuardPage (Memory)) {\r
+ if (IsHeapGuardEnabled (GUARD_HEAP_TYPE_PAGE|GUARD_HEAP_TYPE_POOL)) {\r
+ if (IsGuardPage (Memory)) {\r
Memory += EFI_PAGE_SIZE;\r
Length -= EFI_PAGE_SIZE;\r
if (Length == 0) {\r
}\r
}\r
\r
- if (IsGuardPage (Memory + Length - EFI_PAGE_SIZE)) {\r
+ if (IsGuardPage (Memory + Length - EFI_PAGE_SIZE)) {\r
Length -= EFI_PAGE_SIZE;\r
if (Length == 0) {\r
return EFI_SUCCESS;\r