]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg PCI Bus Driver: Add more checks before dispatching an EFI PCI Option...
authorrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 28 Sep 2011 07:50:58 +0000 (07:50 +0000)
committerrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Wed, 28 Sep 2011 07:50:58 +0000 (07:50 +0000)
* Check if the machine type of the image is supported by the current UEFI system.
* Ignore the image if it is an EFI application as required by the UEFI spec.

Signed-off-by: rsun3
Reviewed-by: li-elvin
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12465 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Bus/Pci/PciBusDxe/PciOptionRomSupport.c

index 0fd5a3298d5b5957667480d388c88338256e1e72..8fd0b3dbc6f9d3831288bdd21afcb3f935797efc 100644 (file)
@@ -669,6 +669,27 @@ ProcessOpRomImage (
     ImageSize   = (UINT32) (Pcir->ImageLength * 512);\r
     Indicator   = Pcir->Indicator;\r
 \r
+    //\r
+    // Skip the image if it is not an EFI PCI Option ROM image\r
+    //\r
+    if (Pcir->CodeType != PCI_CODE_TYPE_EFI_IMAGE) {\r
+      goto NextImage;\r
+    }\r
+\r
+    //\r
+    // Skip the EFI PCI Option ROM image if its machine type is not supported\r
+    //\r
+    if (!EFI_IMAGE_MACHINE_TYPE_SUPPORTED (EfiRomHeader->EfiMachineType)) {\r
+      goto NextImage;\r
+    }\r
+\r
+    //\r
+    // Ignore the EFI PCI Option ROM image if it is an EFI application\r
+    //\r
+    if (EfiRomHeader->EfiSubsystem == EFI_IMAGE_SUBSYSTEM_EFI_APPLICATION) {\r
+      goto NextImage;\r
+    }\r
+\r
     //\r
     // Create Pci Option Rom Image device path header\r
     //\r
@@ -686,19 +707,16 @@ ProcessOpRomImage (
     //\r
     BufferSize  = 0;\r
     Buffer      = NULL;\r
-    Status      = EFI_SUCCESS;\r
     ImageHandle = NULL;\r
 \r
-     if (!EFI_ERROR (Status)) {\r
-      Status = gBS->LoadImage (\r
-                      FALSE,\r
-                      gPciBusDriverBinding.DriverBindingHandle,\r
-                      PciOptionRomImageDevicePath,\r
-                      Buffer,\r
-                      BufferSize,\r
-                      &ImageHandle\r
-                      );\r
-    }\r
+    Status = gBS->LoadImage (\r
+                    FALSE,\r
+                    gPciBusDriverBinding.DriverBindingHandle,\r
+                    PciOptionRomImageDevicePath,\r
+                    Buffer,\r
+                    BufferSize,\r
+                    &ImageHandle\r
+                    );\r
 \r
     FreePool (PciOptionRomImageDevicePath);\r
 \r
@@ -719,6 +737,7 @@ ProcessOpRomImage (
       }\r
     }\r
 \r
+NextImage:\r
     RomBarOffset += ImageSize;\r
 \r
   } while (((Indicator & 0x80) == 0x00) && ((UINTN) (RomBarOffset - (UINT8 *) RomBar) < PciDevice->RomSize));\r