]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Dxe/Mem/Page.c
MdeModulePkg/Core: fix a logic hole in page free
[mirror_edk2.git] / MdeModulePkg / Core / Dxe / Mem / Page.c
index db32d0f940de983898fc5a7a2d22a2eff8c58ea8..8d5d03a6d90a8d13e5c520dfcd5f18e1a3ddd5e2 100644 (file)
@@ -900,42 +900,17 @@ CoreConvertPagesEx (
     //\r
     CoreAddRange (MemType, Start, RangeEnd, Attribute);\r
     if (ChangingType && (MemType == EfiConventionalMemory)) {\r
+      //\r
+      // Avoid calling DEBUG_CLEAR_MEMORY() for an address of 0 because this\r
+      // macro will ASSERT() if address is 0.  Instead, CoreAddRange() guarantees\r
+      // that the page starting at address 0 is always filled with zeros.\r
+      //\r
       if (Start == 0) {\r
-        //\r
-        // Avoid calling DEBUG_CLEAR_MEMORY() for an address of 0 because this\r
-        // macro will ASSERT() if address is 0.  Instead, CoreAddRange()\r
-        // guarantees that the page starting at address 0 is always filled\r
-        // with zeros.\r
-        //\r
         if (RangeEnd > EFI_PAGE_SIZE) {\r
           DEBUG_CLEAR_MEMORY ((VOID *)(UINTN) EFI_PAGE_SIZE, (UINTN) (RangeEnd - EFI_PAGE_SIZE + 1));\r
         }\r
       } else {\r
-        //\r
-        // If Heap Guard is enabled, the page at the top and/or bottom of\r
-        // this memory block to free might be inaccessible. Skipping them\r
-        // to avoid page fault exception.\r
-        //\r
-        UINT64  StartToClear;\r
-        UINT64  EndToClear;\r
-\r
-        StartToClear = Start;\r
-        EndToClear   = RangeEnd + 1;\r
-        if (PcdGet8 (PcdHeapGuardPropertyMask) & (BIT1|BIT0)) {\r
-          if (IsGuardPage(StartToClear)) {\r
-            StartToClear += EFI_PAGE_SIZE;\r
-          }\r
-          if (IsGuardPage (EndToClear - 1)) {\r
-            EndToClear -= EFI_PAGE_SIZE;\r
-          }\r
-        }\r
-\r
-        if (EndToClear > StartToClear) {\r
-          DEBUG_CLEAR_MEMORY(\r
-            (VOID *)(UINTN)StartToClear,\r
-            (UINTN)(EndToClear - StartToClear)\r
-            );\r
-        }\r
+        DEBUG_CLEAR_MEMORY ((VOID *)(UINTN) Start, (UINTN) (RangeEnd - Start + 1));\r
       }\r
     }\r
 \r
@@ -1513,9 +1488,6 @@ CoreInternalFreePages (
 \r
 Done:\r
   CoreReleaseMemoryLock ();\r
-  if (IsGuarded) {\r
-    UnsetGuardForMemory(Memory, NumberOfPages);\r
-  }\r
   return Status;\r
 }\r
 \r