From: Michal Privoznik <[email protected]>

Inside of qemuDBusWriteConfig() the config file for dbus-daemon
is written. In it is path to the socket where the daemon should
listen to. But the path is derived from guest name and as such
may contain characters that DBus requires escaped (e.g. a space).
Use virStringEscapeDBus() to escape the path before writing it
into the config file.

Closes: https://gitlab.com/libvirt/libvirt/-/issues/834
Signed-off-by: Michal Privoznik <[email protected]>
---
 src/qemu/qemu_dbus.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/qemu/qemu_dbus.c b/src/qemu/qemu_dbus.c
index 625884ad46..777facbcf4 100644
--- a/src/qemu/qemu_dbus.c
+++ b/src/qemu/qemu_dbus.c
@@ -25,6 +25,7 @@
 #include "virtime.h"
 #include "virpidfile.h"
 #include "virutil.h"
+#include "virstring.h"
 
 #define VIR_FROM_THIS VIR_FROM_NONE
 
@@ -119,6 +120,7 @@ static int
 qemuDBusWriteConfig(const char *filename, const char *path, bool privileged)
 {
     g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
+    g_autofree char *escapedPath = virStringEscapeDBus(path);
     g_autofree char *config = NULL;
 
     virBufferAddLit(&buf, "<!DOCTYPE busconfig PUBLIC \"-//freedesktop//DTD 
D-Bus Bus Configuration 1.0//EN\"\n");
@@ -127,7 +129,7 @@ qemuDBusWriteConfig(const char *filename, const char *path, 
bool privileged)
     virBufferAdjustIndent(&buf, 2);
 
     virBufferAddLit(&buf, "<type>org.libvirt.qemu</type>\n");
-    virBufferAsprintf(&buf, "<listen>unix:path=%s</listen>\n", path);
+    virBufferAsprintf(&buf, "<listen>unix:path=%s</listen>\n", escapedPath);
     virBufferAddLit(&buf, "<auth>EXTERNAL</auth>\n");
 
     virBufferAddLit(&buf, "<policy context='default'>\n");
-- 
2.51.2

Reply via email to