]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: qemuDomainSetLaunchSecurityState: check for params presence
authorJán Tomko <jtomko@redhat.com>
Thu, 27 Jan 2022 18:41:24 +0000 (19:41 +0100)
committerJán Tomko <jtomko@redhat.com>
Mon, 31 Jan 2022 12:38:11 +0000 (13:38 +0100)
We require the header and the secret to be present.

Use a different approach to virParams to report an error if they
are not present, instead of trying to pass empty arguments to QEMU
via QMP.

Signed-off-by: Ján Tomko <jtomko@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_driver.c

index 1141efef4bfbbbe079ca92b2307f57892782a29b..cbd17c10aedd58c351a1be6c50cfde0ba271f95b 100644 (file)
@@ -19975,10 +19975,9 @@ qemuDomainSetLaunchSecurityState(virDomainPtr domain,
     virDomainObj *vm;
     int ret = -1;
     int rc;
-    size_t i;
     g_autoptr(virQEMUCaps) qemucaps = NULL;
-    g_autofree char *secrethdr = NULL;
-    g_autofree char *secret = NULL;
+    const char *secrethdr = NULL;
+    const char *secret = NULL;
     unsigned long long setaddr = 0;
     bool hasSetaddr = false;
     int state;
@@ -20019,19 +20018,25 @@ qemuDomainSetLaunchSecurityState(virDomainPtr domain,
         goto cleanup;
     }
 
-    for (i = 0; i < nparams; i++) {
-        virTypedParameterPtr param = &params[i];
-
-        if (STREQ(param->field, VIR_DOMAIN_LAUNCH_SECURITY_SEV_SECRET_HEADER)) {
-            secrethdr = g_strdup(param->value.s);
-        } else if (STREQ(param->field, VIR_DOMAIN_LAUNCH_SECURITY_SEV_SECRET)) {
-            secret = g_strdup(param->value.s);
-        } else if (STREQ(param->field, VIR_DOMAIN_LAUNCH_SECURITY_SEV_SECRET_SET_ADDRESS)) {
-            setaddr =  param->value.ul;
-            hasSetaddr = true;
-        }
+    if (virTypedParamsGetString(params, nparams,
+                                VIR_DOMAIN_LAUNCH_SECURITY_SEV_SECRET_HEADER,
+                                &secrethdr) < 0 ||
+        virTypedParamsGetString(params, nparams,
+                                VIR_DOMAIN_LAUNCH_SECURITY_SEV_SECRET,
+                                &secret) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       "%s",
+                       _("Both secret and the secret header are required"));
+        goto cleanup;
     }
 
+    if ((rc = virTypedParamsGetULLong(params, nparams,
+                                      VIR_DOMAIN_LAUNCH_SECURITY_SEV_SECRET_SET_ADDRESS,
+                                      &setaddr)) < 0)
+        goto cleanup;
+    else if (rc == 1)
+        hasSetaddr = true;
+
     if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
         goto cleanup;