mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-31 03:03:46 +01:00 
			
		
		
		
	Make sure gBS FreePool() is used to free the buffer always allocated by gBS AllocatePool() service.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10695 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
		
							parent
							
								
									082be7a58a
								
							
						
					
					
						commit
						0433d8f018
					
				| @ -122,6 +122,7 @@ InternalGetSectionFromFv ( | |||||||
|   EFI_STATUS                    Status; |   EFI_STATUS                    Status; | ||||||
|   EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv; |   EFI_FIRMWARE_VOLUME2_PROTOCOL *Fv; | ||||||
|   UINT32                        AuthenticationStatus; |   UINT32                        AuthenticationStatus; | ||||||
|  |   VOID*                         TempBuffer; | ||||||
| 
 | 
 | ||||||
|   ASSERT (NameGuid != NULL); |   ASSERT (NameGuid != NULL); | ||||||
|   ASSERT (Buffer != NULL); |   ASSERT (Buffer != NULL); | ||||||
| @ -170,6 +171,17 @@ InternalGetSectionFromFv ( | |||||||
|                     ); |                     ); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   if (!EFI_ERROR (Status)) { | ||||||
|  |     //
 | ||||||
|  |     // The found buffer by FV protocol is allocated by gBS AllocatePool() service. 
 | ||||||
|  |     // Copy the found buffer to the allocated buffer by AllocatePool().
 | ||||||
|  |     // So, the returned buffer can be freed by FreePool().
 | ||||||
|  |     //
 | ||||||
|  |     TempBuffer = AllocateCopyPool (*Size, *Buffer); | ||||||
|  |     gBS->FreePool (*Buffer); | ||||||
|  |     *Buffer = TempBuffer; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   return Status; |   return Status; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -312,7 +324,11 @@ GetSectionFromAnyFvByFileType  ( | |||||||
| 
 | 
 | ||||||
| Done: | Done: | ||||||
|   if (HandleBuffer != NULL) {   |   if (HandleBuffer != NULL) {   | ||||||
|     FreePool(HandleBuffer); |     //
 | ||||||
|  |     // HandleBuffer is allocated by gBS AllocatePool() service. 
 | ||||||
|  |     // So, gBS FreePool() service is used to free HandleBuffer.
 | ||||||
|  |     //
 | ||||||
|  |     gBS->FreePool (HandleBuffer); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   return Status; |   return Status; | ||||||
| @ -436,7 +452,11 @@ GetSectionFromAnyFv  ( | |||||||
| Done: | Done: | ||||||
|    |    | ||||||
|   if (HandleBuffer != NULL) { |   if (HandleBuffer != NULL) { | ||||||
|     FreePool(HandleBuffer); |     //
 | ||||||
|  |     // HandleBuffer is allocated by gBS AllocatePool() service. 
 | ||||||
|  |     // So, gBS FreePool() service is used to free HandleBuffer.
 | ||||||
|  |     //
 | ||||||
|  |     gBS->FreePool (HandleBuffer); | ||||||
|   } |   } | ||||||
|   return Status; |   return Status; | ||||||
|    |    | ||||||
| @ -615,6 +635,7 @@ GetFileBufferByFilePath ( | |||||||
|   EFI_FIRMWARE_VOLUME2_PROTOCOL     *FwVol; |   EFI_FIRMWARE_VOLUME2_PROTOCOL     *FwVol; | ||||||
|   EFI_SECTION_TYPE                  SectionType; |   EFI_SECTION_TYPE                  SectionType; | ||||||
|   UINT8                             *ImageBuffer; |   UINT8                             *ImageBuffer; | ||||||
|  |   UINT8                             *TempBuffer; | ||||||
|   UINTN                             ImageBufferSize; |   UINTN                             ImageBufferSize; | ||||||
|   EFI_FV_FILETYPE                   Type; |   EFI_FV_FILETYPE                   Type; | ||||||
|   EFI_FV_FILE_ATTRIBUTES            Attrib; |   EFI_FV_FILE_ATTRIBUTES            Attrib; | ||||||
| @ -642,6 +663,7 @@ GetFileBufferByFilePath ( | |||||||
|   FileInfo            = NULL; |   FileInfo            = NULL; | ||||||
|   FileHandle          = NULL; |   FileHandle          = NULL; | ||||||
|   ImageBuffer         = NULL; |   ImageBuffer         = NULL; | ||||||
|  |   TempBuffer          = NULL; | ||||||
|   ImageBufferSize     = 0; |   ImageBufferSize     = 0; | ||||||
|   *AuthenticationStatus = 0; |   *AuthenticationStatus = 0; | ||||||
|    |    | ||||||
| @ -702,6 +724,16 @@ GetFileBufferByFilePath ( | |||||||
|                             AuthenticationStatus |                             AuthenticationStatus | ||||||
|                             ); |                             ); | ||||||
|         } |         } | ||||||
|  |         if (!EFI_ERROR (Status)) { | ||||||
|  |           //
 | ||||||
|  |           // The found buffer by FV protocol is allocated by gBS AllocatePool() service. 
 | ||||||
|  |           // Copy the found buffer to the allocated buffer by AllocatePool().
 | ||||||
|  |           // Then, this returned buffer can be freed by FreePool().
 | ||||||
|  |           //
 | ||||||
|  |           TempBuffer = AllocateCopyPool (ImageBufferSize, ImageBuffer); | ||||||
|  |           gBS->FreePool (ImageBuffer); | ||||||
|  |           ImageBuffer = TempBuffer; | ||||||
|  |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     goto Finish; |     goto Finish; | ||||||
|  | |||||||
| @ -96,7 +96,11 @@ PciSegmentLibConstructor ( | |||||||
|     ASSERT (Descriptors->Desc != ACPI_END_TAG_DESCRIPTOR); |     ASSERT (Descriptors->Desc != ACPI_END_TAG_DESCRIPTOR); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   FreePool(HandleBuffer); |   //
 | ||||||
|  |   // HandleBuffer is allocated by gBS AllocatePool() service. 
 | ||||||
|  |   // So, gBS FreePool() service is used to free HandleBuffer.
 | ||||||
|  |   //
 | ||||||
|  |   gBS->FreePool (HandleBuffer); | ||||||
| 
 | 
 | ||||||
|   return EFI_SUCCESS; |   return EFI_SUCCESS; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user