File 07ddb4c6-qemuDomainSetLaunchSecurityState-check-params.patch of Package libvirt.29155

commit 07ddb4c6b30b053a8d281c338551acd00c815d8e
Author: Ján Tomko <jtomko@redhat.com>
Date:   Thu Jan 27 19:41:24 2022 +0100

    qemu: qemuDomainSetLaunchSecurityState: check for params presence
    
    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>

Index: libvirt-8.0.0/src/qemu/qemu_driver.c
===================================================================
--- libvirt-8.0.0.orig/src/qemu/qemu_driver.c
+++ libvirt-8.0.0/src/qemu/qemu_driver.c
@@ -19988,10 +19988,9 @@ qemuDomainSetLaunchSecurityState(virDoma
     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;
@@ -20032,19 +20031,25 @@ qemuDomainSetLaunchSecurityState(virDoma
         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;
 
openSUSE Build Service is sponsored by