From 5331c4804f4f419b9e75741084f926e52413d3a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Mon, 15 Jun 2020 13:43:26 +0100 Subject: [PATCH] qemu: fix missing error reports in capabilities probing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The "virsh domcapabilities --arch ppc64" command will fail with no error message set if qemu-system-ppc64 is not currently installed. This is because virQEMUCapsCacheLookup() does not report any error message if not capabilities can be obtained from the cache. Almost all methods calling this expected an error to be set on failure. Once that's fixed though, we see a further bug which is that virQEMUCapsCacheLookupDefault() is passing a NULL binary path to virQEMUCapsCacheLookup(), so we need to catch that too. Reviewed-by: Daniel Henrique Barboza Signed-off-by: Daniel P. Berrangé --- src/qemu/qemu_capabilities.c | 11 +++++++++++ src/qemu/qemu_domain.c | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 268e32f801..fc502ff8e4 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -5634,6 +5634,11 @@ virQEMUCapsCacheLookup(virFileCachePtr cache, priv->microcodeVersion = virHostCPUGetMicrocodeVersion(); ret = virFileCacheLookup(cache, binary); + if (!ret) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("no capabilities available for %s"), binary); + return NULL; + } VIR_DEBUG("Returning caps %p for %s", ret, binary); return ret; @@ -5780,6 +5785,12 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache, probedbinary = virQEMUCapsGetDefaultEmulator(hostarch, arch); binary = probedbinary; } + if (!binary) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("unable to find any emulator to serve '%s' architecture"), + archStr); + return NULL; + } if (!(qemuCaps = virQEMUCapsCacheLookup(cache, binary))) return NULL; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 8b2447482d..4421d1f8b2 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -6131,8 +6131,10 @@ qemuDomainPostParseDataAlloc(const virDomainDef *def, virQEMUDriverPtr driver = opaque; if (!(*parseOpaque = virQEMUCapsCacheLookup(driver->qemuCapsCache, - def->emulator))) + def->emulator))) { + virResetLastError(); return 1; + } return 0; } -- GitLab