NVRAM files in JSON format can only be used together with the
uefi-vars QEMU device, and the firmware descriptor is required to
advertise the host-uefi-vars feature in that case.

Signed-off-by: Andrea Bolognani <[email protected]>
---
 src/qemu/qemu_firmware.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c
index f56a4977cf..ce90f95d0a 100644
--- a/src/qemu/qemu_firmware.c
+++ b/src/qemu/qemu_firmware.c
@@ -1217,6 +1217,7 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
     bool supportsTDX = false;
     bool supportsSecureBoot = false;
     bool hasEnrolledKeys = false;
+    bool usesUefiVarsDevice = false;
     int reqSecureBoot;
     int reqEnrolledKeys;
 
@@ -1305,6 +1306,9 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
             break;
 
         case QEMU_FIRMWARE_FEATURE_HOST_UEFI_VARS:
+            usesUefiVarsDevice = true;
+            break;
+
         case QEMU_FIRMWARE_FEATURE_VERBOSE_DYNAMIC:
         case QEMU_FIRMWARE_FEATURE_VERBOSE_STATIC:
         case QEMU_FIRMWARE_FEATURE_NONE:
@@ -1533,6 +1537,11 @@ qemuFirmwareMatchDomain(const virDomainDef *def,
                           
virStorageFileFormatTypeToString(loader->nvram->format));
                 return false;
             }
+
+            if (!usesUefiVarsDevice) {
+                VIR_DEBUG("Discarding loader with nvram template format 'json' 
and no 'host-uefi-vars' feature");
+                return false;
+            }
         } else {
             if (loader && loader->nvram &&
                 (loader->nvram->path || loader->nvram->format)) {
-- 
2.52.0

Reply via email to