libvirt/qemuDomainDefPostParse-Fail-if-unable-to-fill-machin.patch
AlexChen 811898dff8 cherry-pick some bugfix patches from open source community
cherry-pick patchs list:
2ab8dba5    qemuDomainGetUnplugTimeout: Add G_GNUC_NO_INLINE 
423664a6    virNetDevSwitchdevFeature: Make failure to get 'family_id' non-fatal 
ca616274    virNetDevGetFamilyId: Change signature 
67b973b5    qemuDomainDefPostParse: Fail if unable to fill machine type 
67e19fc9    qemu: Revoke access to mirror on failed blockcopy 
93b15ba0    qemu: fix hang in p2p + xbzrle compression + parallel migration 
a13ac587    util: fix iteration in virSocketAddrResolveService 
88011ed2    libxl: fix crash when initializing driver

Signed-off-by: AlexChen <alex.chen@huawei.com>
2020-09-29 16:59:08 +08:00

47 lines
1.7 KiB
Diff

From d9190851ed9a28e86d5baa3a9872eb6246270cd1 Mon Sep 17 00:00:00 2001
From: Michal Privoznik <mprivozn@redhat.com>
Date: Thu, 16 Apr 2020 14:18:28 +0200
Subject: [PATCH 5/8] qemuDomainDefPostParse: Fail if unable to fill machine
type
Previously, we used virCapabilitiesDomainDataLookup() to fill
machine type in post parse callback if none was provided in the
domain XML. If machine type couldn't be filled in an error was
reported. After 4a4132b4625 we've changed it to
virQEMUCapsGetPreferredMachine() which returns NULL, but we no
longer report an error and proceed with the post parse callbacks
processing. This may lead to a crash because the code later on
assumes def->os.machine is not NULL.
Fixes: 4a4132b4625
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Pavel Mores <pmores@redhat.com>
Signed-off-by: AlexChen <alex.chen@huawei.com>
---
src/qemu/qemu_domain.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index b1a46478ed..36e6343995 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -4971,6 +4971,14 @@ qemuDomainDefPostParse(virDomainDefPtr def,
if (!def->os.machine) {
const char *machine = virQEMUCapsGetPreferredMachine(qemuCaps,
def->virtType);
+ if (!machine) {
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("could not get preferred machine for %s type=%s"),
+ def->emulator,
+ virDomainVirtTypeToString(def->virtType));
+ return -1;
+ }
+
def->os.machine = g_strdup(machine);
}
--
2.23.0