]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: Clear 'qemuFDPass' helpers of char devices when no longer needed
authorPeter Krempa <pkrempa@redhat.com>
Fri, 6 May 2022 12:50:06 +0000 (14:50 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 16 May 2022 07:15:45 +0000 (09:15 +0200)
While the FDs are closed right after use to prevent leaks, at certain
point we don't need the whole helper any more. Clear them for char
devices after hotplug and on start.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jonathon Jongsma <jjongsma@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_command.c
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
src/qemu/qemu_hotplug.c

index 605086b2429b3ebb2d748d92b198e7932c1c45f0..5ee3874e53453879fff4d8bd3baf34b863566e29 100644 (file)
@@ -1547,6 +1547,8 @@ qemuBuildChardevCommand(virCommand *cmd,
 
     virCommandAddArgList(cmd, "-chardev", charstr, NULL);
 
+    qemuDomainChrSourcePrivateClearFDPass(chrSourcePriv);
+
     return 0;
 }
 
index 9d090204fed8d95ed32b413da2fa57150a191d0b..b960cd17309e67b6708207e18209de671f2741fa 100644 (file)
@@ -908,13 +908,23 @@ qemuDomainChrSourcePrivateNew(void)
 }
 
 
+void
+qemuDomainChrSourcePrivateClearFDPass(qemuDomainChrSourcePrivate *priv)
+{
+    if (!priv)
+        return;
+
+    g_clear_pointer(&priv->sourcefd, qemuFDPassFree);
+    g_clear_pointer(&priv->logfd, qemuFDPassFree);
+}
+
+
 static void
 qemuDomainChrSourcePrivateDispose(void *obj)
 {
     qemuDomainChrSourcePrivate *priv = obj;
 
-    qemuFDPassFree(priv->sourcefd);
-    qemuFDPassFree(priv->logfd);
+    qemuDomainChrSourcePrivateClearFDPass(priv);
 
     g_free(priv->tlsCertPath);
 
index 3d1447178cb7cece88469d5f86226b21ed96749f..edbcc1aed2a09918ad42d82fb7e5aecc37562789 100644 (file)
@@ -359,6 +359,9 @@ struct _qemuDomainChrSourcePrivate {
 };
 
 
+void
+qemuDomainChrSourcePrivateClearFDPass(qemuDomainChrSourcePrivate *priv);
+
 typedef struct _qemuDomainVsockPrivate qemuDomainVsockPrivate;
 struct _qemuDomainVsockPrivate {
     virObject parent;
index 62cfc29a16dbaebc7cac1fa8288055b4e7581282..e8e028706bd76198e4a0e412fc521d3c77e0f4bd 100644 (file)
@@ -2293,6 +2293,9 @@ qemuDomainAttachChrDevice(virQEMUDriver *driver,
         if (teardowndevice && qemuDomainNamespaceTeardownChardev(vm, chr) < 0)
             VIR_WARN("Unable to remove chr device from /dev");
     }
+
+    qemuDomainChrSourcePrivateClearFDPass(charpriv);
+
     return ret;
 
  exit_monitor: