Преглед изворни кода

OvmfPkg/QemuBootOrderLib: skip unsupported entries in StoreQemuBootOrder

When finding an unsupported entry just skip over and continue
with the next entry instead of stop processing altogether.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
Gerd Hoffmann пре 1 година
родитељ
комит
b7213bbd59
1 измењених фајлова са 30 додато и 26 уклоњено
  1. 30 26
      OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c

+ 30 - 26
OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.c

@@ -1775,34 +1775,38 @@ StoreQemuBootOrder (
                      Translated,
                      &TranslatedSize
                      );
-  while (!RETURN_ERROR (Status)) {
-    EFI_DEVICE_PATH_PROTOCOL  *DevicePath;
+  while (Status == EFI_SUCCESS ||
+         Status == EFI_UNSUPPORTED)
+  {
+    if (Status == EFI_SUCCESS) {
+      EFI_DEVICE_PATH_PROTOCOL  *DevicePath;
 
-    //
-    // Convert the UEFI devpath prefix to binary representation.
-    //
-    ASSERT (Translated[TranslatedSize] == L'\0');
-    DevicePath = ConvertTextToDevicePath (Translated);
-    if (DevicePath == NULL) {
-      Status = RETURN_OUT_OF_RESOURCES;
-      goto FreeExtraPciRoots;
-    }
+      //
+      // Convert the UEFI devpath prefix to binary representation.
+      //
+      ASSERT (Translated[TranslatedSize] == L'\0');
+      DevicePath = ConvertTextToDevicePath (Translated);
+      if (DevicePath == NULL) {
+        Status = RETURN_OUT_OF_RESOURCES;
+        goto FreeExtraPciRoots;
+      }
 
-    UnicodeSPrint (
-      VariableName,
-      sizeof (VariableName),
-      L"QemuBootOrder%04d",
-      VariableIndex++
-      );
-    DEBUG ((DEBUG_INFO, "%a: %s = %s\n", __FUNCTION__, VariableName, Translated));
-    gRT->SetVariable (
-           VariableName,
-           &gQemuBootOrderGuid,
-           EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
-           GetDevicePathSize (DevicePath),
-           DevicePath
-           );
-    FreePool (DevicePath);
+      UnicodeSPrint (
+        VariableName,
+        sizeof (VariableName),
+        L"QemuBootOrder%04d",
+        VariableIndex++
+        );
+      DEBUG ((DEBUG_INFO, "%a: %s = %s\n", __FUNCTION__, VariableName, Translated));
+      gRT->SetVariable (
+             VariableName,
+             &gQemuBootOrderGuid,
+             EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
+             GetDevicePathSize (DevicePath),
+             DevicePath
+             );
+      FreePool (DevicePath);
+    }
 
     //
     // Move to the next OFW devpath.