Daniel P. Berrangé 0676a0
From 1dd55b2fcddecf22a046b1df069b55fdfe17af76 Mon Sep 17 00:00:00 2001
Daniel P. Berrangé 0676a0
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
Daniel P. Berrangé 0676a0
Date: Fri, 6 Jul 2018 11:00:11 +0100
Daniel P. Berrangé 0676a0
Subject: [PATCH 4/4] qemu: fix UNIX socket chardevs operating in client mode
Daniel P. Berrangé 0676a0
MIME-Version: 1.0
Daniel P. Berrangé 0676a0
Content-Type: text/plain; charset=UTF-8
Daniel P. Berrangé 0676a0
Content-Transfer-Encoding: 8bit
Daniel P. Berrangé 0676a0
Daniel P. Berrangé 0676a0
When support was adding for passing a pre-opened listener socket to UNIX
Daniel P. Berrangé 0676a0
chardevs, it accidentally passed the listener socket for client mode
Daniel P. Berrangé 0676a0
chardevs too with predictable amounts of fail resulting.
Daniel P. Berrangé 0676a0
Daniel P. Berrangé 0676a0
Expand the unit test coverage to validate that we are only doing FD
Daniel P. Berrangé 0676a0
passing when operating in server mode.
Daniel P. Berrangé 0676a0
Daniel P. Berrangé 0676a0
Reported-by: Richard W.M. Jones <rjones@redhat.com>
Daniel P. Berrangé 0676a0
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Daniel P. Berrangé 0676a0
---
Daniel P. Berrangé 0676a0
 src/qemu/qemu_command.c                       |  3 +-
Daniel P. Berrangé 0676a0
 .../qemuxml2argvdata/serial-unix-chardev.args |  2 ++
Daniel P. Berrangé 0676a0
 .../serial-unix-chardev.x86_64-latest.args    | 36 +++++++++++++++++++
Daniel P. Berrangé 0676a0
 .../qemuxml2argvdata/serial-unix-chardev.xml  |  4 +++
Daniel P. Berrangé 0676a0
 tests/qemuxml2argvtest.c                      |  1 +
Daniel P. Berrangé 0676a0
 5 files changed, 45 insertions(+), 1 deletion(-)
Daniel P. Berrangé 0676a0
 create mode 100644 tests/qemuxml2argvdata/serial-unix-chardev.x86_64-latest.args
Daniel P. Berrangé 0676a0
Daniel P. Berrangé 0676a0
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
Daniel P. Berrangé 0676a0
index 82d8030a33..32eb59b6ab 100644
Daniel P. Berrangé 0676a0
--- a/src/qemu/qemu_command.c
Daniel P. Berrangé 0676a0
+++ b/src/qemu/qemu_command.c
Daniel P. Berrangé 0676a0
@@ -5083,7 +5083,8 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
Daniel P. Berrangé 0676a0
         break;
Daniel P. Berrangé 0676a0
 
Daniel P. Berrangé 0676a0
     case VIR_DOMAIN_CHR_TYPE_UNIX:
Daniel P. Berrangé 0676a0
-        if ((flags & QEMU_BUILD_CHARDEV_UNIX_FD_PASS) &&
Daniel P. Berrangé 0676a0
+        if (dev->data.nix.listen &&
Daniel P. Berrangé 0676a0
+            (flags & QEMU_BUILD_CHARDEV_UNIX_FD_PASS) &&
Daniel P. Berrangé 0676a0
             virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS)) {
Daniel P. Berrangé 0676a0
             if (qemuSecuritySetSocketLabel(secManager, (virDomainDefPtr)def) < 0)
Daniel P. Berrangé 0676a0
                 goto cleanup;
Daniel P. Berrangé 0676a0
diff --git a/tests/qemuxml2argvdata/serial-unix-chardev.args b/tests/qemuxml2argvdata/serial-unix-chardev.args
Daniel P. Berrangé 0676a0
index 584f4a1dd1..873d3263c6 100644
Daniel P. Berrangé 0676a0
--- a/tests/qemuxml2argvdata/serial-unix-chardev.args
Daniel P. Berrangé 0676a0
+++ b/tests/qemuxml2argvdata/serial-unix-chardev.args
Daniel P. Berrangé 0676a0
@@ -26,4 +26,6 @@ server,nowait \
Daniel P. Berrangé 0676a0
 -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
Daniel P. Berrangé 0676a0
 -chardev socket,id=charserial0,path=/tmp/serial.sock \
Daniel P. Berrangé 0676a0
 -device isa-serial,chardev=charserial0,id=serial0 \
Daniel P. Berrangé 0676a0
+-chardev socket,id=charserial1,path=/tmp/serial-server.sock,server,nowait \
Daniel P. Berrangé 0676a0
+-device isa-serial,chardev=charserial1,id=serial1 \
Daniel P. Berrangé 0676a0
 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
Daniel P. Berrangé 0676a0
diff --git a/tests/qemuxml2argvdata/serial-unix-chardev.x86_64-latest.args b/tests/qemuxml2argvdata/serial-unix-chardev.x86_64-latest.args
Daniel P. Berrangé 0676a0
new file mode 100644
Daniel P. Berrangé 0676a0
index 0000000000..ce7a7f80d7
Daniel P. Berrangé 0676a0
--- /dev/null
Daniel P. Berrangé 0676a0
+++ b/tests/qemuxml2argvdata/serial-unix-chardev.x86_64-latest.args
Daniel P. Berrangé 0676a0
@@ -0,0 +1,36 @@
Daniel P. Berrangé 0676a0
+LC_ALL=C \
Daniel P. Berrangé 0676a0
+PATH=/bin \
Daniel P. Berrangé 0676a0
+HOME=/home/test \
Daniel P. Berrangé 0676a0
+USER=test \
Daniel P. Berrangé 0676a0
+LOGNAME=test \
Daniel P. Berrangé 0676a0
+QEMU_AUDIO_DRV=none \
Daniel P. Berrangé 0676a0
+/usr/bin/qemu-system-i686 \
Daniel P. Berrangé 0676a0
+-name guest=QEMUGuest1,debug-threads=on \
Daniel P. Berrangé 0676a0
+-S \
Daniel P. Berrangé 0676a0
+-object secret,id=masterKey0,format=raw,\
Daniel P. Berrangé 0676a0
+file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
Daniel P. Berrangé 0676a0
+-machine pc,accel=tcg,usb=off,dump-guest-core=off \
Daniel P. Berrangé 0676a0
+-m 214 \
Daniel P. Berrangé 0676a0
+-realtime mlock=off \
Daniel P. Berrangé 0676a0
+-smp 1,sockets=1,cores=1,threads=1 \
Daniel P. Berrangé 0676a0
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
Daniel P. Berrangé 0676a0
+-display none \
Daniel P. Berrangé 0676a0
+-no-user-config \
Daniel P. Berrangé 0676a0
+-nodefaults \
Daniel P. Berrangé 0676a0
+-chardev socket,id=charmonitor,fd=1729,server,nowait \
Daniel P. Berrangé 0676a0
+-mon chardev=charmonitor,id=monitor,mode=control \
Daniel P. Berrangé 0676a0
+-rtc base=utc \
Daniel P. Berrangé 0676a0
+-no-shutdown \
Daniel P. Berrangé 0676a0
+-no-acpi \
Daniel P. Berrangé 0676a0
+-boot strict=on \
Daniel P. Berrangé 0676a0
+-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
Daniel P. Berrangé 0676a0
+-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
Daniel P. Berrangé 0676a0
+-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
Daniel P. Berrangé 0676a0
+-chardev socket,id=charserial0,path=/tmp/serial.sock \
Daniel P. Berrangé 0676a0
+-device isa-serial,chardev=charserial0,id=serial0 \
Daniel P. Berrangé 0676a0
+-chardev socket,id=charserial1,fd=1729,server,nowait \
Daniel P. Berrangé 0676a0
+-device isa-serial,chardev=charserial1,id=serial1 \
Daniel P. Berrangé 0676a0
+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \
Daniel P. Berrangé 0676a0
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
Daniel P. Berrangé 0676a0
+resourcecontrol=deny \
Daniel P. Berrangé 0676a0
+-msg timestamp=on
Daniel P. Berrangé 0676a0
diff --git a/tests/qemuxml2argvdata/serial-unix-chardev.xml b/tests/qemuxml2argvdata/serial-unix-chardev.xml
Daniel P. Berrangé 0676a0
index 04f83779ce..af513d6445 100644
Daniel P. Berrangé 0676a0
--- a/tests/qemuxml2argvdata/serial-unix-chardev.xml
Daniel P. Berrangé 0676a0
+++ b/tests/qemuxml2argvdata/serial-unix-chardev.xml
Daniel P. Berrangé 0676a0
@@ -25,6 +25,10 @@
Daniel P. Berrangé 0676a0
       <source mode='connect' path='/tmp/serial.sock'/>
Daniel P. Berrangé 0676a0
       <target port='0'/>
Daniel P. Berrangé 0676a0
     </serial>
Daniel P. Berrangé 0676a0
+    <serial type='unix'>
Daniel P. Berrangé 0676a0
+      <source mode='bind' path='/tmp/serial-server.sock'/>
Daniel P. Berrangé 0676a0
+      <target port='1'/>
Daniel P. Berrangé 0676a0
+    </serial>
Daniel P. Berrangé 0676a0
     <console type='unix'>
Daniel P. Berrangé 0676a0
       <source mode='connect' path='/tmp/serial.sock'/>
Daniel P. Berrangé 0676a0
       <target port='0'/>
Daniel P. Berrangé 0676a0
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
Daniel P. Berrangé 0676a0
index 2d52f352b0..3be5af03aa 100644
Daniel P. Berrangé 0676a0
--- a/tests/qemuxml2argvtest.c
Daniel P. Berrangé 0676a0
+++ b/tests/qemuxml2argvtest.c
Daniel P. Berrangé 0676a0
@@ -1335,6 +1335,7 @@ mymain(void)
Daniel P. Berrangé 0676a0
             QEMU_CAPS_CHARDEV_FILE_APPEND);
Daniel P. Berrangé 0676a0
     DO_TEST("serial-unix-chardev",
Daniel P. Berrangé 0676a0
             QEMU_CAPS_DEVICE_ISA_SERIAL);
Daniel P. Berrangé 0676a0
+    DO_TEST_CAPS_LATEST("serial-unix-chardev");
Daniel P. Berrangé 0676a0
     DO_TEST("serial-tcp-chardev",
Daniel P. Berrangé 0676a0
             QEMU_CAPS_DEVICE_ISA_SERIAL);
Daniel P. Berrangé 0676a0
     DO_TEST("serial-udp-chardev",
Daniel P. Berrangé 0676a0
-- 
Daniel P. Berrangé 0676a0
2.17.1
Daniel P. Berrangé 0676a0