]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/SmbiosPlatformDxe/Qemu.c
OvmfPkg/QemuVideoDxe: handle invalid BltOperation gracefully
[mirror_edk2.git] / OvmfPkg / SmbiosPlatformDxe / Qemu.c
index f7ace4f1deb203f846830283fa3cc97d89ebfd6e..9466b950fc74eedebdf856e7c6cbc63cd6ac7d05 100644 (file)
@@ -15,6 +15,7 @@
 #include "SmbiosPlatformDxe.h"\r
 #include <Library/QemuFwCfgLib.h>\r
 #include <Library/MemoryAllocationLib.h>\r
+#include <Library/PcdLib.h>\r
 \r
 /**\r
   Locates and extracts the QEMU SMBIOS data if present in fw_cfg\r
@@ -27,32 +28,19 @@ GetQemuSmbiosTables (
   VOID\r
   )\r
 {\r
-  SMBIOS_TABLE_ENTRY_POINT QemuAnchor;\r
-  FIRMWARE_CONFIG_ITEM     Anchor, Tables;\r
-  UINTN                    AnchorSize, TablesSize;\r
+  EFI_STATUS               Status;\r
+  FIRMWARE_CONFIG_ITEM     Tables;\r
+  UINTN                    TablesSize;\r
   UINT8                    *QemuTables;\r
 \r
-  if (EFI_ERROR (QemuFwCfgFindFile (\r
-                   "etc/smbios/smbios-anchor", &Anchor, &AnchorSize)) ||\r
-      EFI_ERROR (QemuFwCfgFindFile (\r
-                   "etc/smbios/smbios-tables", &Tables, &TablesSize)) ||\r
-      AnchorSize != sizeof (QemuAnchor) ||\r
-      TablesSize == 0) {\r
+  if (!PcdGetBool (PcdQemuSmbiosValidated)) {\r
     return NULL;\r
   }\r
 \r
-  //\r
-  // We copy the entry point structure to perform some additional checks,\r
-  // but discard it upon return.\r
-  //\r
-  QemuFwCfgSelectItem (Anchor);\r
-  QemuFwCfgReadBytes (AnchorSize, &QemuAnchor);\r
-\r
-  if (AsciiStrnCmp ((CHAR8 *)QemuAnchor.AnchorString, "_SM_", 4) ||\r
-      AsciiStrnCmp ((CHAR8 *)QemuAnchor.IntermediateAnchorString, "_DMI_", 5) ||\r
-      TablesSize != QemuAnchor.TableLength) {\r
-    return NULL;\r
-  }\r
+  Status = QemuFwCfgFindFile ("etc/smbios/smbios-tables", &Tables,\r
+             &TablesSize);\r
+  ASSERT_EFI_ERROR (Status);\r
+  ASSERT (TablesSize > 0);\r
 \r
   QemuTables = AllocatePool (TablesSize);\r
   if (QemuTables == NULL) {\r