The use of JSON format for NVRAM requires the uefi-vars device to
be present.

The firmware-auto-efi-format-nvram-json test case starts failing
in a different way after this change. The new error message is
the correct one.

The variant of the firmware-auto-efi-enrolled-keys-aarch64 test
case that is run against QEMU 8.2.0 does not see the same change,
for now. That is because libvirt does not yet recognize that
enabling Secure Boot on aarch64 requires using the uefi-vars
device. After some upcoming changes, this test case will start
behaving the same as the one mentioned above too.

Signed-off-by: Andrea Bolognani <[email protected]>
---
 src/qemu/qemu_validate.c                      |  8 +++++
 ...uto-efi-format-nvram-json.x86_64-8.2.0.err |  2 +-
 ...uto-efi-format-nvram-json.x86_64-8.2.0.xml | 35 -------------------
 tests/qemuxmlconftest.c                       |  2 +-
 4 files changed, 10 insertions(+), 37 deletions(-)
 delete mode 100644 
tests/qemuxmlconfdata/firmware-auto-efi-format-nvram-json.x86_64-8.2.0.xml

diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index da08fd17cd..40676bef39 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -728,6 +728,14 @@ qemuValidateDomainDefNvram(const virDomainDef *def,
         return -1;
     }
 
+    if (src->format == VIR_STORAGE_FILE_JSON) {
+        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_UEFI_VARS)) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                           _("The uefi-vars device is not supported by this 
QEMU binary"));
+            return -1;
+        }
+    }
+
     if (src->sliceStorage) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                         _("slices are not supported with NVRAM"));
diff --git 
a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvram-json.x86_64-8.2.0.err 
b/tests/qemuxmlconfdata/firmware-auto-efi-format-nvram-json.x86_64-8.2.0.err
index e5f67f8d09..e64c2b21aa 100644
--- a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvram-json.x86_64-8.2.0.err
+++ b/tests/qemuxmlconfdata/firmware-auto-efi-format-nvram-json.x86_64-8.2.0.err
@@ -1 +1 @@
-unsupported configuration: Unsupported nvram format 'json'
+unsupported configuration: The uefi-vars device is not supported by this QEMU 
binary
diff --git 
a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvram-json.x86_64-8.2.0.xml 
b/tests/qemuxmlconfdata/firmware-auto-efi-format-nvram-json.x86_64-8.2.0.xml
deleted file mode 100644
index cc7fdfad79..0000000000
--- a/tests/qemuxmlconfdata/firmware-auto-efi-format-nvram-json.x86_64-8.2.0.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<domain type='kvm'>
-  <name>guest</name>
-  <uuid>63840878-0deb-4095-97e6-fc444d9bc9fa</uuid>
-  <memory unit='KiB'>1048576</memory>
-  <currentMemory unit='KiB'>1048576</currentMemory>
-  <vcpu placement='static'>1</vcpu>
-  <os firmware='efi'>
-    <type arch='x86_64' machine='pc-q35-8.2'>hvm</type>
-    <nvram format='json'/>
-    <boot dev='hd'/>
-  </os>
-  <features>
-    <acpi/>
-  </features>
-  <cpu mode='custom' match='exact' check='none'>
-    <model fallback='forbid'>qemu64</model>
-  </cpu>
-  <clock offset='utc'/>
-  <on_poweroff>destroy</on_poweroff>
-  <on_reboot>restart</on_reboot>
-  <on_crash>destroy</on_crash>
-  <devices>
-    <emulator>/usr/bin/qemu-system-x86_64</emulator>
-    <controller type='usb' index='0' model='none'/>
-    <controller type='sata' index='0'>
-      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' 
function='0x2'/>
-    </controller>
-    <controller type='pci' index='0' model='pcie-root'/>
-    <input type='mouse' bus='ps2'/>
-    <input type='keyboard' bus='ps2'/>
-    <audio id='1' type='none'/>
-    <watchdog model='itco' action='reset'/>
-    <memballoon model='none'/>
-  </devices>
-</domain>
diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c
index a109ae99d6..500cbbd45b 100644
--- a/tests/qemuxmlconftest.c
+++ b/tests/qemuxmlconftest.c
@@ -1631,7 +1631,7 @@ mymain(void)
     DO_TEST_CAPS_LATEST("firmware-auto-efi-format-mismatch");
     
DO_TEST_CAPS_LATEST_FAILURE("firmware-auto-efi-format-mismatch-nvramtemplate");
     DO_TEST_CAPS_LATEST_FAILURE("firmware-auto-efi-format-nvram-json");
-    DO_TEST_CAPS_VER_FAILURE("firmware-auto-efi-format-nvram-json", "8.2.0");
+    DO_TEST_CAPS_VER_PARSE_ERROR("firmware-auto-efi-format-nvram-json", 
"8.2.0");
 
     /* This test passes, but the outcome is not the desired one: the
      * generic edk2 build gets selected instead of the AMD SEV one */
-- 
2.52.0

Reply via email to