]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c
Free the buffer allocated by GetSectionFromAnyFv() when exit, and add Error Status...
[mirror_edk2.git] / MdeModulePkg / Universal / Acpi / BootScriptExecutorDxe / ScriptExecute.c
index e671164a83e17bc16d7c44b57d27108a49778c00..d5698d4682646114047b3de0c19bb981927583fc 100644 (file)
@@ -235,7 +235,7 @@ BootScriptExecutorEntryPoint (
       // This is the first-time loaded by DXE core. reload itself to NVS mem\r
       //\r
       //\r
-      // A workarouond: Here we install a dummy handle\r
+      // A workaround: Here we install a dummy handle\r
       //\r
       NewImageHandle = NULL;\r
       Status = gBS->InstallProtocolInterface (\r
@@ -244,6 +244,7 @@ BootScriptExecutorEntryPoint (
                   EFI_NATIVE_INTERFACE,\r
                   NULL\r
                   );\r
+      ASSERT_EFI_ERROR (Status);\r
 \r
       Status = GetSectionFromAnyFv  (\r
                  &gEfiCallerIdGuid,\r
@@ -252,15 +253,14 @@ BootScriptExecutorEntryPoint (
                  (VOID **) &Buffer,\r
                  &BufferSize\r
                  );\r
+      ASSERT_EFI_ERROR (Status);\r
       ImageContext.Handle    = Buffer;\r
       ImageContext.ImageRead = PeCoffLoaderImageReadFromMemory;\r
       //\r
       // Get information about the image being loaded\r
       //\r
       Status = PeCoffLoaderGetImageInfo (&ImageContext);\r
-      if (EFI_ERROR (Status)) {\r
-        return Status;\r
-      }\r
+      ASSERT_EFI_ERROR (Status);\r
       Pages = EFI_SIZE_TO_PAGES(BufferSize + ImageContext.SectionAlignment);\r
       FfsBuffer = 0xFFFFFFFF;\r
       Status = gBS->AllocatePages (\r
@@ -269,9 +269,7 @@ BootScriptExecutorEntryPoint (
                     Pages,\r
                     &FfsBuffer\r
                     );\r
-      if (EFI_ERROR (Status)) {\r
-        return EFI_OUT_OF_RESOURCES;\r
-      }\r
+      ASSERT_EFI_ERROR (Status);\r
       ImageContext.ImageAddress = (PHYSICAL_ADDRESS)(UINTN)FfsBuffer;\r
       //\r
       // Align buffer on section boundry\r
@@ -282,30 +280,26 @@ BootScriptExecutorEntryPoint (
       // Load the image to our new buffer\r
       //\r
       Status = PeCoffLoaderLoadImage (&ImageContext);\r
-      if (EFI_ERROR (Status)) {\r
-        gBS->FreePages (FfsBuffer, Pages);\r
-        return Status;\r
-      }\r
+      ASSERT_EFI_ERROR (Status);\r
 \r
       //\r
       // Relocate the image in our new buffer\r
       //\r
       Status = PeCoffLoaderRelocateImage (&ImageContext);\r
+      ASSERT_EFI_ERROR (Status);\r
+\r
+      //\r
+      // Free the buffer allocated by ReadSection since the image has been relocated in the new buffer\r
+      //\r
+      gBS->FreePool (Buffer);\r
 \r
-      if (EFI_ERROR (Status)) {\r
-        PeCoffLoaderUnloadImage (&ImageContext);\r
-        gBS->FreePages (FfsBuffer, Pages);\r
-        return Status;\r
-      }\r
       //\r
       // Flush the instruction cache so the image data is written before we execute it\r
       //\r
       InvalidateInstructionCacheRange ((VOID *)(UINTN)ImageContext.ImageAddress, (UINTN)ImageContext.ImageSize);\r
       Status = ((EFI_IMAGE_ENTRY_POINT)(UINTN)(ImageContext.EntryPoint)) (NewImageHandle, SystemTable);\r
-      if (EFI_ERROR (Status)) {\r
-        gBS->FreePages (FfsBuffer, Pages);\r
-        return Status;\r
-      }\r
+      ASSERT_EFI_ERROR (Status);\r
+\r
       //\r
       // Additional step for BootScript integrity\r
       // Save BootScriptExecutor image\r
@@ -334,9 +328,7 @@ BootScriptExecutorEntryPoint (
                       Pages,\r
                       &BootScriptExecutorBuffer\r
                       );\r
-      if (EFI_ERROR (Status)) {\r
-        return EFI_OUT_OF_RESOURCES;\r
-      }\r
+      ASSERT_EFI_ERROR (Status);\r
 \r
       EfiBootScriptExecutorVariable = (BOOT_SCRIPT_EXECUTOR_VARIABLE *)(UINTN)BootScriptExecutorBuffer;\r
       EfiBootScriptExecutorVariable->BootScriptExecutorEntrypoint = (UINTN) S3BootScriptExecutorEntryFunction ;\r