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(a)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 = ¶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;
--
2.31.1