]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Dxe/Mem/Pool.c
MdeModulePkg/Core: fix a logic hole in page free
[mirror_edk2.git] / MdeModulePkg / Core / Dxe / Mem / Pool.c
index 7464d8773a2787b904d142dce9fa031cee566ef3..df9a1d28dff50006bb4128238e09ffdb92d2f9de 100644 (file)
@@ -643,10 +643,16 @@ CoreFreePoolPagesWithGuard (
 \r
   AdjustMemoryF (&Memory, &NoPages);\r
   if (NoPages > 0) {\r
+    //\r
+    // It's safe to unset Guard page inside memory lock because there should\r
+    // be no memory allocation occurred in updating memory page attribute at\r
+    // this point. And unsetting Guard page before free will prevent Guard\r
+    // page just freed back to pool from being allocated right away before\r
+    // marking it usable (from non-present to present).\r
+    //\r
+    UnsetGuardForMemory (MemoryGuarded, NoPagesGuarded);\r
     CoreFreePoolPagesI (PoolType, Memory, NoPages);\r
   }\r
-\r
-  UnsetGuardForMemory (MemoryGuarded, NoPagesGuarded);\r
 }\r
 \r
 /**\r