mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-10 23:07:44 +00:00
qemu: fix missing error reports in capabilities probing
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>
This commit is contained in:
parent
d00227480c
commit
5331c4804f
@ -5634,6 +5634,11 @@ virQEMUCapsCacheLookup(virFileCachePtr cache,
|
|||||||
priv->microcodeVersion = virHostCPUGetMicrocodeVersion();
|
priv->microcodeVersion = virHostCPUGetMicrocodeVersion();
|
||||||
|
|
||||||
ret = virFileCacheLookup(cache, binary);
|
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);
|
VIR_DEBUG("Returning caps %p for %s", ret, binary);
|
||||||
return ret;
|
return ret;
|
||||||
@ -5780,6 +5785,12 @@ virQEMUCapsCacheLookupDefault(virFileCachePtr cache,
|
|||||||
probedbinary = virQEMUCapsGetDefaultEmulator(hostarch, arch);
|
probedbinary = virQEMUCapsGetDefaultEmulator(hostarch, arch);
|
||||||
binary = probedbinary;
|
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)))
|
if (!(qemuCaps = virQEMUCapsCacheLookup(cache, binary)))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -6131,8 +6131,10 @@ qemuDomainPostParseDataAlloc(const virDomainDef *def,
|
|||||||
virQEMUDriverPtr driver = opaque;
|
virQEMUDriverPtr driver = opaque;
|
||||||
|
|
||||||
if (!(*parseOpaque = virQEMUCapsCacheLookup(driver->qemuCapsCache,
|
if (!(*parseOpaque = virQEMUCapsCacheLookup(driver->qemuCapsCache,
|
||||||
def->emulator)))
|
def->emulator))) {
|
||||||
|
virResetLastError();
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user