]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: fix missing error reports in capabilities probing
authorDaniel P. Berrangé <berrange@redhat.com>
Mon, 15 Jun 2020 12:43:26 +0000 (13:43 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Wed, 24 Jun 2020 11:28:27 +0000 (12:28 +0100)
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 <danielhb413@gmail.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
src/qemu/qemu_capabilities.c
src/qemu/qemu_domain.c

index 268e32f801fcd7b4d7a84013a417caa821231932..fc502ff8e4cba1e761ab0de1aae98c8e1466a654 100644 (file)
@@ -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;
index 8b2447482dd65bb86db589b02e0fc3dd90e33bee..4421d1f8b2af733b5e5ee8da3fb73fe0d50cfc22 100644 (file)
@@ -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;
 }