From 07ddb4c6b30b053a8d281c338551acd00c815d8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Thu, 27 Jan 2022 19:41:24 +0100 Subject: [PATCH] qemu: qemuDomainSetLaunchSecurityState: check for params presence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Michal Privoznik --- 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 1141efef4b..cbd17c10ae 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 = ¶ms[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;