summaryrefslogtreecommitdiffstats
path: root/StandaloneMmPkg
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2019-01-16 21:22:34 +0100
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2019-01-21 14:42:37 +0100
commit877013d0a58f6baada8eb29665bdf36a61a946fa (patch)
tree622f9282a0ec3a0f77a6efcbc841572acdec1ed5 /StandaloneMmPkg
parent77746e70807d77db057595f718a5c7aabe611e03 (diff)
downloadedk2-877013d0a58f6baada8eb29665bdf36a61a946fa.tar.gz
edk2-877013d0a58f6baada8eb29665bdf36a61a946fa.tar.bz2
edk2-877013d0a58f6baada8eb29665bdf36a61a946fa.zip
StandaloneMmPkg/Core/Dispatcher: don't copy dispatched image twice
The dispatcher uses the PE/COFF loader to load images into the heap, but only does so after copying the entire image first, leading to two copies being made for no good reason. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Achin Gupta <achin.gupta@arm.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
Diffstat (limited to 'StandaloneMmPkg')
-rw-r--r--StandaloneMmPkg/Core/Dispatcher.c30
1 files changed, 1 insertions, 29 deletions
diff --git a/StandaloneMmPkg/Core/Dispatcher.c b/StandaloneMmPkg/Core/Dispatcher.c
index 8d009b4f80..8a2ad5118d 100644
--- a/StandaloneMmPkg/Core/Dispatcher.c
+++ b/StandaloneMmPkg/Core/Dispatcher.c
@@ -294,7 +294,6 @@ MmLoadImage (
IN OUT EFI_MM_DRIVER_ENTRY *DriverEntry
)
{
- VOID *Buffer;
UINTN PageCount;
EFI_STATUS Status;
EFI_PHYSICAL_ADDRESS DstBuffer;
@@ -302,17 +301,12 @@ MmLoadImage (
DEBUG ((DEBUG_INFO, "MmLoadImage - %g\n", &DriverEntry->FileName));
- Buffer = AllocateCopyPool (DriverEntry->Pe32DataSize, DriverEntry->Pe32Data);
- if (Buffer == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
Status = EFI_SUCCESS;
//
// Initialize ImageContext
//
- ImageContext.Handle = Buffer;
+ ImageContext.Handle = DriverEntry->Pe32Data;
ImageContext.ImageRead = PeCoffLoaderImageReadFromMemory;
//
@@ -320,9 +314,6 @@ MmLoadImage (
//
Status = PeCoffLoaderGetImageInfo (&ImageContext);
if (EFI_ERROR (Status)) {
- if (Buffer != NULL) {
- MmFreePool (Buffer);
- }
return Status;
}
@@ -336,9 +327,6 @@ MmLoadImage (
&DstBuffer
);
if (EFI_ERROR (Status)) {
- if (Buffer != NULL) {
- MmFreePool (Buffer);
- }
return Status;
}
@@ -355,9 +343,6 @@ MmLoadImage (
//
Status = PeCoffLoaderLoadImage (&ImageContext);
if (EFI_ERROR (Status)) {
- if (Buffer != NULL) {
- MmFreePool (Buffer);
- }
MmFreePages (DstBuffer, PageCount);
return Status;
}
@@ -367,9 +352,6 @@ MmLoadImage (
//
Status = PeCoffLoaderRelocateImage (&ImageContext);
if (EFI_ERROR (Status)) {
- if (Buffer != NULL) {
- MmFreePool (Buffer);
- }
MmFreePages (DstBuffer, PageCount);
return Status;
}
@@ -393,9 +375,6 @@ MmLoadImage (
(VOID **)&DriverEntry->LoadedImage
);
if (EFI_ERROR (Status)) {
- if (Buffer != NULL) {
- MmFreePool (Buffer);
- }
MmFreePages (DstBuffer, PageCount);
return Status;
}
@@ -482,13 +461,6 @@ MmLoadImage (
DEBUG_CODE_END ();
- //
- // Free buffer allocated by Fv->ReadSection.
- //
- // The UEFI Boot Services FreePool() function must be used because Fv->ReadSection
- // used the UEFI Boot Services AllocatePool() function
- //
- MmFreePool (Buffer);
return Status;
}