]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c
MdeModulePkg/DxeCapsuleLibFmp: Unload image on EFI_SECURITY_VIOLATION
[mirror_edk2.git] / MdeModulePkg / Library / DxeCapsuleLibFmp / DxeCapsuleLib.c
index 95aa9de0878b8f7abcd72f74fced4e2ebbc3d0ff..5dda561a0482cd2671517caae78c56ccd37a9e46 100644 (file)
@@ -1030,6 +1030,15 @@ StartFmpImage (
                   );\r
   DEBUG((DEBUG_INFO, "FmpCapsule: LoadImage - %r\n", Status));\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
     FreePool(DriverDevicePath);\r
     return Status;\r
   }\r