mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-31 19:23:54 +01:00 
			
		
		
		
	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
This commit is contained in:
		
							parent
							
								
									969eba7b0d
								
							
						
					
					
						commit
						38c7df9848
					
				| @ -1,7 +1,7 @@ | |||||||
| /** @file
 | /** @file
 | ||||||
|   UEFI Memory page management functions. |   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 | All rights reserved. This program and the accompanying materials | ||||||
| are licensed and made available under the terms and conditions of the BSD License | 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 | which accompanies this distribution.  The full text of the license may be found at | ||||||
| @ -829,6 +829,9 @@ CoreConvertPages ( | |||||||
|     // Add our new range in
 |     // Add our new range in
 | ||||||
|     //
 |     //
 | ||||||
|     CoreAddRange (NewType, Start, RangeEnd, Attribute); |     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
 |     // Move any map descriptor stack to general pool
 | ||||||
| @ -1198,13 +1201,6 @@ CoreFreePages ( | |||||||
|     goto Done; |     goto Done; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   //
 |  | ||||||
|   // Destroy the contents
 |  | ||||||
|   //
 |  | ||||||
|   if (Memory < MAX_ADDRESS) { |  | ||||||
|     DEBUG_CLEAR_MEMORY ((VOID *)(UINTN)Memory, NumberOfPages << EFI_PAGE_SHIFT); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
| Done: | Done: | ||||||
|   CoreReleaseMemoryLock (); |   CoreReleaseMemoryLock (); | ||||||
|   return Status; |   return Status; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user