7b4659
From 05516528f7ef69e84eb3edc8a00bc9fba44ea538 Mon Sep 17 00:00:00 2001
7b4659
Message-Id: <05516528f7ef69e84eb3edc8a00bc9fba44ea538@dist-git>
7b4659
From: Jiri Denemark <jdenemar@redhat.com>
7b4659
Date: Fri, 16 Aug 2019 14:52:31 +0200
7b4659
Subject: [PATCH] qemu: Pass correct qemuCaps to virDomainDefParseString
7b4659
MIME-Version: 1.0
7b4659
Content-Type: text/plain; charset=UTF-8
7b4659
Content-Transfer-Encoding: 8bit
7b4659
7b4659
Since qemuDomainDefPostParse callback requires qemuCaps, we need to make
7b4659
sure it gets the capabilities stored in the domain's private data if the
7b4659
domain is running. Passing NULL may cause QEMU capabilities probing to
7b4659
be triggered in case QEMU binary changed in the meantime. When this
7b4659
happens while a running domain object is locked, QMP event delivered to
7b4659
the domain before QEMU capabilities probing finishes will deadlock the
7b4659
event loop.
7b4659
7b4659
This patch fixes all paths leading to virDomainDefParseString.
7b4659
7b4659
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
7b4659
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
7b4659
(cherry picked from commit 6e7c33dad7f2f90182c452917f3a555e2c878d42)
7b4659
7b4659
Conflicts:
7b4659
	src/qemu/qemu_driver.c
7b4659
            - snapshots are not based on virDomainMomentDef
7b4659
            - no checkpoint APIs
7b4659
7b4659
https://bugzilla.redhat.com/show_bug.cgi?id=1731783
7b4659
https://bugzilla.redhat.com/show_bug.cgi?id=1742023
7b4659
7b4659
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
7b4659
Message-Id: <2728b24106e1e361cf9766ea8f9eeec782df6b20.1565959866.git.jdenemar@redhat.com>
7b4659
Reviewed-by: Ján Tomko <jtomko@redhat.com>
7b4659
---
7b4659
 src/qemu/qemu_driver.c | 6 ++++--
7b4659
 1 file changed, 4 insertions(+), 2 deletions(-)
7b4659
7b4659
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
7b4659
index 590596a421..3f8530eb0e 100644
7b4659
--- a/src/qemu/qemu_driver.c
7b4659
+++ b/src/qemu/qemu_driver.c
7b4659
@@ -3307,7 +3307,8 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver,
7b4659
     if (xmlin) {
7b4659
         virDomainDefPtr def = NULL;
7b4659
 
7b4659
-        if (!(def = virDomainDefParseString(xmlin, caps, driver->xmlopt, NULL,
7b4659
+        if (!(def = virDomainDefParseString(xmlin, caps, driver->xmlopt,
7b4659
+                                            priv->qemuCaps,
7b4659
                                             VIR_DOMAIN_DEF_PARSE_INACTIVE |
7b4659
                                             VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE))) {
7b4659
             goto endjob;
7b4659
@@ -15405,7 +15406,8 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain,
7b4659
         if (!(xml = qemuDomainDefFormatLive(driver, priv->qemuCaps,
7b4659
                                             vm->def, priv->origCPU,
7b4659
                                             true, true)) ||
7b4659
-            !(def->dom = virDomainDefParseString(xml, caps, driver->xmlopt, NULL,
7b4659
+            !(def->dom = virDomainDefParseString(xml, caps, driver->xmlopt,
7b4659
+                                                 priv->qemuCaps,
7b4659
                                                  VIR_DOMAIN_DEF_PARSE_INACTIVE |
7b4659
                                                  VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)))
7b4659
             goto endjob;
7b4659
-- 
7b4659
2.22.1
7b4659