c313de
From d50cf2d60114e7e33c2bd25fb67566a889057b77 Mon Sep 17 00:00:00 2001
c313de
Message-Id: <d50cf2d60114e7e33c2bd25fb67566a889057b77@dist-git>
c313de
From: Michal Privoznik <mprivozn@redhat.com>
c313de
Date: Mon, 8 Apr 2019 10:57:30 +0200
c313de
Subject: [PATCH] qemuDomainRemoveRNGDevice: Remove associated chardev too
c313de
MIME-Version: 1.0
c313de
Content-Type: text/plain; charset=UTF-8
c313de
Content-Transfer-Encoding: 8bit
c313de
c313de
https://bugzilla.redhat.com/show_bug.cgi?id=1656014
c313de
c313de
An RNG device can consists of more devices than RND device
c313de
itself. For instance, in case of EGD there is a chardev that
c313de
connects to EGD daemon and feeds the qemu with random data. When
c313de
doing RNG device removal we have to remove the associated chardev
c313de
as well.
c313de
c313de
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
c313de
Reviewed-by: Ján Tomko <jtomko@redhat.com>
c313de
c313de
(cherry picked from commit 7730a2ead4279e3a11771e1069096747988410cf)
c313de
c313de
https://bugzilla.redhat.com/show_bug.cgi?id=1508149
c313de
c313de
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
c313de
Message-Id: <20190408085732.28684-14-abologna@redhat.com>
c313de
Reviewed-by: Laine Stump <laine@redhat.com>
c313de
Reviewed-by: Ján Tomko <jtomko@redhat.com>
c313de
---
c313de
 src/qemu/qemu_hotplug.c | 16 +++++++++++++---
c313de
 1 file changed, 13 insertions(+), 3 deletions(-)
c313de
c313de
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
c313de
index abe2632556..8394efa739 100644
c313de
--- a/src/qemu/qemu_hotplug.c
c313de
+++ b/src/qemu/qemu_hotplug.c
c313de
@@ -4408,7 +4408,7 @@ qemuDomainRemoveRNGDevice(virQEMUDriverPtr driver,
c313de
     qemuDomainObjPrivatePtr priv = vm->privateData;
c313de
     ssize_t idx;
c313de
     int ret = -1;
c313de
-    int rc;
c313de
+    int rc = 0;
c313de
 
c313de
     VIR_DEBUG("Removing RNG device %s from domain %p %s",
c313de
               rng->info.alias, vm, vm->def->name);
c313de
@@ -4422,7 +4422,17 @@ qemuDomainRemoveRNGDevice(virQEMUDriverPtr driver,
c313de
 
c313de
     qemuDomainObjEnterMonitor(driver, vm);
c313de
 
c313de
-    rc = qemuMonitorDelObject(priv->mon, objAlias);
c313de
+    if (qemuDomainDetachExtensionDevice(priv->mon, &rng->info) < 0)
c313de
+        rc = -1;
c313de
+
c313de
+    if (rc == 0 &&
c313de
+        qemuMonitorDelObject(priv->mon, objAlias) < 0)
c313de
+        rc = -1;
c313de
+
c313de
+    if (rng->backend == VIR_DOMAIN_RNG_BACKEND_EGD &&
c313de
+        rc == 0 &&
c313de
+        qemuMonitorDetachCharDev(priv->mon, charAlias) < 0)
c313de
+        rc = -1;
c313de
 
c313de
     if (qemuDomainObjExitMonitor(driver, vm) < 0)
c313de
         goto cleanup;
c313de
@@ -4431,7 +4441,7 @@ qemuDomainRemoveRNGDevice(virQEMUDriverPtr driver,
c313de
         rc == 0 &&
c313de
         qemuDomainDelChardevTLSObjects(driver, vm, rng->source.chardev,
c313de
                                        charAlias) < 0)
c313de
-        goto cleanup;
c313de
+        rc = -1;
c313de
 
c313de
     virDomainAuditRNG(vm, rng, NULL, "detach", rc == 0);
c313de
 
c313de
-- 
c313de
2.22.0
c313de