\r
Attributes = GetPermissionAttributeForMemoryType (MemoryMapEntry->Type);\r
if (Attributes != 0) {\r
- SetUefiImageMemoryAttributes (\r
- MemoryMapEntry->PhysicalStart,\r
- LShiftU64 (MemoryMapEntry->NumberOfPages, EFI_PAGE_SHIFT),\r
- Attributes);\r
+ if (MemoryMapEntry->PhysicalStart == 0 &&\r
+ PcdGet8 (PcdNullPointerDetectionPropertyMask) != 0) {\r
+\r
+ ASSERT (MemoryMapEntry->NumberOfPages > 0);\r
+ //\r
+ // Skip page 0 if NULL pointer detection is enabled to avoid attributes\r
+ // overwritten.\r
+ //\r
+ SetUefiImageMemoryAttributes (\r
+ MemoryMapEntry->PhysicalStart + EFI_PAGE_SIZE,\r
+ LShiftU64 (MemoryMapEntry->NumberOfPages - 1, EFI_PAGE_SHIFT),\r
+ Attributes);\r
+ } else {\r
+ SetUefiImageMemoryAttributes (\r
+ MemoryMapEntry->PhysicalStart,\r
+ LShiftU64 (MemoryMapEntry->NumberOfPages, EFI_PAGE_SHIFT),\r
+ Attributes);\r
+ }\r
}\r
MemoryMapEntry = NEXT_MEMORY_DESCRIPTOR (MemoryMapEntry, DescriptorSize);\r
}\r