summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjgong5 <jgong5@6f19259b-4bc3-4df7-8a09-765794883524>2010-04-03 05:34:16 +0000
committerjgong5 <jgong5@6f19259b-4bc3-4df7-8a09-765794883524>2010-04-03 05:34:16 +0000
commit38c7df9848811c2a6e6ed11fd78ba0e19215e77c (patch)
tree34ca11409ada76da89f8634c56b1e5e79d81b1fe
parent969eba7b0df70c9aa261eaf005085568b88de87c (diff)
downloadedk2-platforms-38c7df9848811c2a6e6ed11fd78ba0e19215e77c.tar.xz
Avoid DEBUG_CLEAR_MEMORY clearing MemoryMap internal structure.
In CoreFreePages(), the following sequence might break the MemoryMap internal structure: CoreConvertPages() -> CoreFreeMemoryMapStack() -> AllocateMemoryMapEntry() -> CoreAllocatePoolPages() -> DEBUG_CLEAR_MEMORY() CoreConvertPages() will call CoreFreeMemoryMapStack() after it adds the freed memory range, so the latter might use the just freed memory range when calling AllocateMemoryMapEntry(). But CoreFreePages() will call DEBUG_CLEAR_MEMORY() after CoreConvertPages(). This might clear up the memory map entry structure. The fix calls DEBUG_CLEAR_MEMORY() just after freed memory range is added in CoreConvertPages(), which is safe. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10335 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r--MdeModulePkg/Core/Dxe/Mem/Page.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/MdeModulePkg/Core/Dxe/Mem/Page.c b/MdeModulePkg/Core/Dxe/Mem/Page.c
index b0cf1ece1e..9a78698df9 100644
--- a/MdeModulePkg/Core/Dxe/Mem/Page.c
+++ b/MdeModulePkg/Core/Dxe/Mem/Page.c
@@ -1,7 +1,7 @@
/** @file
UEFI Memory page management functions.
-Copyright (c) 2007 - 2008, Intel Corporation. <BR>
+Copyright (c) 2007 - 2010, Intel Corporation. <BR>
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@@ -829,6 +829,9 @@ CoreConvertPages (
// Add our new range in
//
CoreAddRange (NewType, Start, RangeEnd, Attribute);
+ if (NewType == EfiConventionalMemory) {
+ DEBUG_CLEAR_MEMORY ((VOID *)(UINTN)Start, RangeEnd - Start + 1);
+ }
//
// Move any map descriptor stack to general pool
@@ -1198,13 +1201,6 @@ CoreFreePages (
goto Done;
}
- //
- // Destroy the contents
- //
- if (Memory < MAX_ADDRESS) {
- DEBUG_CLEAR_MEMORY ((VOID *)(UINTN)Memory, NumberOfPages << EFI_PAGE_SHIFT);
- }
-
Done:
CoreReleaseMemoryLock ();
return Status;