84 lines
2.7 KiB
Diff
84 lines
2.7 KiB
Diff
From c52ee15b701c207d205b296e535202272ad6a525 Mon Sep 17 00:00:00 2001
|
|
Message-Id: <c52ee15b701c207d205b296e535202272ad6a525@dist-git>
|
|
From: Peter Krempa <pkrempa@redhat.com>
|
|
Date: Fri, 3 Jun 2022 15:49:01 +0200
|
|
Subject: [PATCH] qemu: fd: Fix monitor usage of qemuFDPassDirectGetPath
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
We need to use the 'name' variable and just overwrite it with the FD
|
|
number when FDs are passed on the monitor. Otherwise we will read NULL
|
|
path if the FD is accessed before being passed on the monitor. The idea
|
|
of this helper is to simplify the monitor code so it would be
|
|
counterproductive to have other behaviour.
|
|
|
|
Fixes the following symptom:
|
|
|
|
$ virsh attach-interface cd network default --model virtio
|
|
error: Failed to attach interface
|
|
error: internal error: unable to execute QEMU command 'netdev_add': File descriptor named '(null)' has not been found
|
|
|
|
Fixes: bca9047906fd73fd30f275dd45b64998fbbcf6de
|
|
Resolves: https://gitlab.com/libvirt/libvirt/-/issues/318
|
|
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2092856
|
|
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
|
|
Reviewed-by: Ján Tomko <jtomko@redhat.com>
|
|
(cherry picked from commit 8d3a807a4acce72a9bce50dd6496c7e320cace39)
|
|
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=2092856
|
|
|
|
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
---
|
|
src/qemu/qemu_fd.c | 8 +++-----
|
|
1 file changed, 3 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/qemu/qemu_fd.c b/src/qemu/qemu_fd.c
|
|
index bc6a37663c..40c8234320 100644
|
|
--- a/src/qemu/qemu_fd.c
|
|
+++ b/src/qemu/qemu_fd.c
|
|
@@ -235,7 +235,6 @@ qemuFDPassGetPath(qemuFDPass *fdpass)
|
|
|
|
struct _qemuFDPassDirect {
|
|
int fd;
|
|
- char *path;
|
|
char *name;
|
|
|
|
bool passed; /* passed to qemu via monitor */
|
|
@@ -251,7 +250,6 @@ qemuFDPassDirectFree(qemuFDPassDirect *fdpass)
|
|
|
|
VIR_FORCE_CLOSE(fdpass->fd);
|
|
g_free(fdpass->name);
|
|
- g_free(fdpass->path);
|
|
g_free(fdpass);
|
|
}
|
|
|
|
@@ -295,7 +293,8 @@ qemuFDPassDirectTransferCommand(qemuFDPassDirect *fdpass,
|
|
return;
|
|
|
|
virCommandPassFD(cmd, fdpass->fd, VIR_COMMAND_PASS_FD_CLOSE_PARENT);
|
|
- fdpass->path = g_strdup_printf("%d", fdpass->fd);
|
|
+ g_free(fdpass->name);
|
|
+ fdpass->name = g_strdup_printf("%d", fdpass->fd);
|
|
fdpass->fd = -1;
|
|
}
|
|
|
|
@@ -318,7 +317,6 @@ qemuFDPassDirectTransferMonitor(qemuFDPassDirect *fdpass,
|
|
if (qemuMonitorSendFileHandle(mon, fdpass->name, fdpass->fd) < 0)
|
|
return -1;
|
|
|
|
- fdpass->path = g_strdup(fdpass->name);
|
|
VIR_FORCE_CLOSE(fdpass->fd);
|
|
fdpass->passed = true;
|
|
|
|
@@ -358,5 +356,5 @@ qemuFDPassDirectGetPath(qemuFDPassDirect *fdpass)
|
|
if (!fdpass)
|
|
return NULL;
|
|
|
|
- return fdpass->path;
|
|
+ return fdpass->name;
|
|
}
|
|
--
|
|
2.35.1
|
|
|