]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EmbeddedPkg/Library/AndroidBootImgLib/AndroidBootImgLib.c
EmbeddedPkg: fix gcc build errors in AndroidBootImgLib
[mirror_edk2.git] / EmbeddedPkg / Library / AndroidBootImgLib / AndroidBootImgLib.c
index 2e50cedf6a445bd9cb8dee837e1c82908e6a4714..bbc240c3632ab21195d449f0f524519970a55de4 100644 (file)
@@ -3,13 +3,7 @@
   Copyright (c) 2013-2014, ARM Ltd. All rights reserved.<BR>\r
   Copyright (c) 2017, Linaro. All rights reserved.\r
 \r
-  This program and the accompanying materials\r
-  are licensed and made available under the terms and conditions of the BSD License\r
-  which accompanies this distribution.  The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -103,7 +97,7 @@ AndroidBootImgGetKernelInfo (
   ASSERT (IS_VALID_ANDROID_PAGE_SIZE (Header->PageSize));\r
 \r
   *KernelSize = Header->KernelSize;\r
-  *Kernel = BootImg + Header->PageSize;\r
+  *Kernel = (VOID *)((UINTN)BootImg + Header->PageSize);\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -347,7 +341,7 @@ AndroidBootImgUpdateFdt (
 \r
   Status = AndroidBootImgSetProperty64 (UpdatedFdtBase, ChosenNode,\r
                                         "linux,initrd-end",\r
-                                        (UINTN)(RamdiskData + RamdiskSize));\r
+                                        (UINTN)RamdiskData + RamdiskSize);\r
   if (EFI_ERROR (Status)) {\r
     goto Fdt_Exit;\r
   }\r
@@ -447,6 +441,18 @@ AndroidBootImgBoot (
   Status = gBS->LoadImage (TRUE, gImageHandle,\r
                            (EFI_DEVICE_PATH *)&KernelDevicePath,\r
                            (VOID*)(UINTN)Kernel, KernelSize, &ImageHandle);\r
+  if (EFI_ERROR (Status)) {\r
+    //\r
+    // With EFI_SECURITY_VIOLATION retval, the Image was loaded and an ImageHandle was created\r
+    // with a valid EFI_LOADED_IMAGE_PROTOCOL, but the image can not be started right now.\r
+    // If the caller doesn't have the option to defer the execution of an image, we should\r
+    // unload image for the EFI_SECURITY_VIOLATION to avoid resource leak.\r
+    //\r
+    if (Status == EFI_SECURITY_VIOLATION) {\r
+      gBS->UnloadImage (ImageHandle);\r
+    }\r
+    return Status;\r
+  }\r
 \r
   // Set kernel arguments\r
   Status = gBS->HandleProtocol (ImageHandle, &gEfiLoadedImageProtocolGuid,\r