]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuAppendKeyWrapMachineParms: Format "keywrap" arguments based on architecture
authorPeter Krempa <pkrempa@redhat.com>
Mon, 6 Mar 2023 19:55:25 +0000 (20:55 +0100)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 7 Mar 2023 11:26:32 +0000 (12:26 +0100)
Use the guest architecture to decide whether to format
'aes-key-wrap'/'dea-key-wrap' rather than
QEMU_CAPS_AES_KEY_WRAP/QEMU_CAPS_DEA_KEY_WRAP which were set based on
architecture.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_command.c

index 41abecdb058d6aa5d6069d21945623f9c0f689ee..34ce27bb79b0da62cd4e262e202c95cac859d5bd 100644 (file)
@@ -6534,38 +6534,33 @@ qemuBuildCpuCommandLine(virCommand *cmd,
 }
 
 
-static bool
-qemuAppendKeyWrapMachineParm(virBuffer *buf, virQEMUCaps *qemuCaps,
-                             virQEMUCapsFlags flag, const char *pname,
-                             virTristateSwitch pstate)
+static int
+qemuAppendKeyWrapMachineParms(virBuffer *buf,
+                              const virDomainDef *def)
 {
-    if (pstate != VIR_TRISTATE_SWITCH_ABSENT) {
-        if (!virQEMUCapsGet(qemuCaps, flag)) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("%s is not available with this QEMU binary"), pname);
-            return false;
-        }
+    if (!def->keywrap)
+        return 0;
 
-        virBufferAsprintf(buf, ",%s=%s", pname,
-                          virTristateSwitchTypeToString(pstate));
-    }
+    if (def->keywrap->aes == VIR_TRISTATE_SWITCH_ABSENT &&
+        def->keywrap->dea == VIR_TRISTATE_SWITCH_ABSENT)
+        return 0;
 
-    return true;
-}
+    if (def->os.arch != VIR_ARCH_S390 &&
+        def->os.arch != VIR_ARCH_S390X) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("'aes-key-wrap'/'dea-key-wrap' is not available on this architecture"));
+        return -1;
+    }
 
-static bool
-qemuAppendKeyWrapMachineParms(virBuffer *buf, virQEMUCaps *qemuCaps,
-                              const virDomainKeyWrapDef *keywrap)
-{
-    if (!qemuAppendKeyWrapMachineParm(buf, qemuCaps, QEMU_CAPS_AES_KEY_WRAP,
-                                      "aes-key-wrap", keywrap->aes))
-        return false;
+    if (def->keywrap->aes != VIR_TRISTATE_SWITCH_ABSENT)
+        virBufferAsprintf(buf, ",aes-key-wrap=%s",
+                          virTristateSwitchTypeToString(def->keywrap->aes));
 
-    if (!qemuAppendKeyWrapMachineParm(buf, qemuCaps, QEMU_CAPS_DEA_KEY_WRAP,
-                                      "dea-key-wrap", keywrap->dea))
-        return false;
+    if (def->keywrap->dea != VIR_TRISTATE_SWITCH_ABSENT)
+        virBufferAsprintf(buf, ",dea-key-wrap=%s",
+                          virTristateSwitchTypeToString(def->keywrap->dea));
 
-    return true;
+    return 0;
 }
 
 
@@ -6865,8 +6860,7 @@ qemuBuildMachineCommandLine(virCommand *cmd,
      */
     virBufferAddLit(&buf, ",usb=off");
 
-    if (def->keywrap &&
-        !qemuAppendKeyWrapMachineParms(&buf, qemuCaps, def->keywrap))
+    if (qemuAppendKeyWrapMachineParms(&buf, def) < 0)
         return -1;
 
     if (qemuAppendDomainFeaturesMachineParam(&buf, def, qemuCaps) < 0)