]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Uninstall LoadedImage protocol if SMM driver returns error and is unloaded.
authorYao, Jiewen <jiewen.yao@intel.com>
Wed, 25 Nov 2015 04:05:49 +0000 (04:05 +0000)
committerjyao1 <jyao1@Edk2>
Wed, 25 Nov 2015 04:05:49 +0000 (04:05 +0000)
Original code does not uninstall LoadedImage protocol if SMM driver returns error and is unloaded.
It causes a wrong LoadedImage protocol existing in system.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: "Yao, Jiewen" <jiewen.yao@intel.com>
Reviewed-by: "Zeng, Star" <star.zeng@intel.com>
Reviewed-by: "Kinney, Michael D" <michael.d.kinney@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18936 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Core/PiSmmCore/Dispatcher.c

index 81e8a0dc827aa884656fe6fa512f9be46908bfb4..cbaf549066e33d51f9bcf59f4f1cebb04a7b4673 100644 (file)
@@ -881,6 +881,20 @@ SmmDispatcher (
       if (EFI_ERROR(Status)){\r
         UnregisterSmramProfileImage (DriverEntry, TRUE);\r
         SmmFreePages(DriverEntry->ImageBuffer, DriverEntry->NumberOfPage);\r
+        //\r
+        // Uninstall LoadedImage\r
+        //\r
+        Status = gBS->UninstallProtocolInterface (\r
+                        DriverEntry->ImageHandle,\r
+                        &gEfiLoadedImageProtocolGuid,\r
+                        DriverEntry->LoadedImage\r
+                        );\r
+        if (!EFI_ERROR (Status)) {\r
+          if (DriverEntry->LoadedImage->FilePath != NULL) {\r
+            gBS->FreePool (DriverEntry->LoadedImage->FilePath);\r
+          }\r
+          gBS->FreePool (DriverEntry->LoadedImage);\r
+        }\r
       }\r
 \r
       REPORT_STATUS_CODE_WITH_EXTENDED_DATA (\r