qemu: Clear 'qemuFDPass' helpers of char devices when no longer needed

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>
This commit is contained in:
Peter Krempa 2022-05-06 14:50:06 +02:00
parent 6b3373ffa5
commit 686f83e66e
4 changed files with 20 additions and 2 deletions

View File

@ -1547,6 +1547,8 @@ qemuBuildChardevCommand(virCommand *cmd,
virCommandAddArgList(cmd, "-chardev", charstr, NULL); virCommandAddArgList(cmd, "-chardev", charstr, NULL);
qemuDomainChrSourcePrivateClearFDPass(chrSourcePriv);
return 0; return 0;
} }

View 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 static void
qemuDomainChrSourcePrivateDispose(void *obj) qemuDomainChrSourcePrivateDispose(void *obj)
{ {
qemuDomainChrSourcePrivate *priv = obj; qemuDomainChrSourcePrivate *priv = obj;
qemuFDPassFree(priv->sourcefd); qemuDomainChrSourcePrivateClearFDPass(priv);
qemuFDPassFree(priv->logfd);
g_free(priv->tlsCertPath); g_free(priv->tlsCertPath);

View File

@ -359,6 +359,9 @@ struct _qemuDomainChrSourcePrivate {
}; };
void
qemuDomainChrSourcePrivateClearFDPass(qemuDomainChrSourcePrivate *priv);
typedef struct _qemuDomainVsockPrivate qemuDomainVsockPrivate; typedef struct _qemuDomainVsockPrivate qemuDomainVsockPrivate;
struct _qemuDomainVsockPrivate { struct _qemuDomainVsockPrivate {
virObject parent; virObject parent;

View File

@ -2293,6 +2293,9 @@ qemuDomainAttachChrDevice(virQEMUDriver *driver,
if (teardowndevice && qemuDomainNamespaceTeardownChardev(vm, chr) < 0) if (teardowndevice && qemuDomainNamespaceTeardownChardev(vm, chr) < 0)
VIR_WARN("Unable to remove chr device from /dev"); VIR_WARN("Unable to remove chr device from /dev");
} }
qemuDomainChrSourcePrivateClearFDPass(charpriv);
return ret; return ret;
exit_monitor: exit_monitor: