[libvirt PATCHv2 2/2] qemu: qemuDomainSetLaunchSecurityState: check for params presence

Ján Tomko jtomko at redhat.com
Thu Jan 27 18:44:56 UTC 2022


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 at redhat.com>
---
 src/qemu/qemu_driver.c | 33 +++++++++++++++++++--------------
 1 file changed, 19 insertions(+), 14 deletions(-)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 0a1ba74e65..9b346e5cf0 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -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;
 
-- 
2.31.1




More information about the libvir-list mailing list