From: Michal Privoznik Date: Wed, 8 Apr 2015 14:59:36 +0000 (+0200) Subject: domcaps: Check for architecture more wisely X-Git-Tag: v1.2.13.1~83 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6d79e8b3ace762c6a75e7eea537f8439e2c7def8;p=thirdparty%2Flibvirt.git domcaps: Check for architecture more wisely https://bugzilla.redhat.com/show_bug.cgi?id=1209948 So we have this bug. The virConnectGetDomainCapabilities() API performs a couple of checks before it produces any result. One of the checks is if the architecture requested by user can be run by the binary (again user provided). However, the check is pretty dumb. It merely compares if the default binary architecture matches the one provided by user. However, a qemu binary can run multiple architectures. For instance: qemu-system-ppc64 can run: ppc, ppcle, ppc64, ppc64le and ppcemb. The default is ppc64, so if user requested something else, like ppc64le, the check would have failed without obvious reason. Signed-off-by: Michal Privoznik (cherry picked from commit 0af9325e6a06fd4478d4eebfcd92dfe7e2ec570c) --- diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 4c2ac96b59..21036a4f0e 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -18322,7 +18322,10 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn, arch_from_caps = virQEMUCapsGetArch(qemuCaps); if (arch_from_caps != arch && - (arch_from_caps != VIR_ARCH_X86_64 || arch != VIR_ARCH_I686)) { + !((ARCH_IS_X86(arch) && ARCH_IS_X86(arch_from_caps)) || + (ARCH_IS_PPC(arch) && ARCH_IS_PPC(arch_from_caps)) || + (ARCH_IS_ARM(arch) && ARCH_IS_ARM(arch_from_caps)) || + (ARCH_IS_S390(arch) && ARCH_IS_S390(arch_from_caps)))) { virReportError(VIR_ERR_INVALID_ARG, _("architecture from emulator '%s' doesn't " "match given architecture '%s'"),