mirror of https://github.com/acidanthera/audk.git
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…
Reference in New Issue