[PATCH 2/2] qemu: Reject unsupported chardev backend protocols

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



QEMU supports only 'raw' and 'telnet' in the

 <protocol type='telnets'/>

element. Reject 'telnets' and 'tls'. TLS transport for qemu chardevs is
configured via "tls='yes'" attribute added to the "<source>" element
instead, so this prevents potential misconfig as the value would be
silently accepted.

Closes: https://gitlab.com/libvirt/libvirt/-/issues/412
Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 src/qemu/qemu_validate.c                      | 19 +++++++++++++++
 ...rial-tcp-chardev-telnets.x86_64-latest.err |  1 +
 .../serial-tcp-chardev-telnets.xml            | 23 +++++++++++++++++++
 tests/qemuxmlconftest.c                       |  1 +
 4 files changed, 44 insertions(+)
 create mode 100644 tests/qemuxmlconfdata/serial-tcp-chardev-telnets.x86_64-latest.err
 create mode 100644 tests/qemuxmlconfdata/serial-tcp-chardev-telnets.xml

diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 1954daea52..fa23c5f973 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -2044,6 +2044,25 @@ qemuValidateDomainChrSourceDef(const virDomainChrSourceDef *def,
 {
     switch ((virDomainChrType)def->type) {
     case VIR_DOMAIN_CHR_TYPE_TCP:
+        switch (def->data.tcp.protocol) {
+        case VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW:
+        case VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNET:
+            break;
+
+        case VIR_DOMAIN_CHR_TCP_PROTOCOL_TELNETS:
+        case VIR_DOMAIN_CHR_TCP_PROTOCOL_TLS:
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("tcp chardev protocol '%1$s' not supported"),
+                           virDomainChrTcpProtocolTypeToString(def->data.tcp.protocol));
+            return -1;
+
+        case VIR_DOMAIN_CHR_TCP_PROTOCOL_LAST:
+        default:
+            virReportEnumRangeError(virDomainChrTcpProtocol, def->data.tcp.protocol);
+            return -1;
+
+        }
+
         if (qemuValidateDomainChrSourceReconnectDef(&def->data.tcp.reconnect) < 0)
             return -1;
         break;
diff --git a/tests/qemuxmlconfdata/serial-tcp-chardev-telnets.x86_64-latest.err b/tests/qemuxmlconfdata/serial-tcp-chardev-telnets.x86_64-latest.err
new file mode 100644
index 0000000000..6447c96cd9
--- /dev/null
+++ b/tests/qemuxmlconfdata/serial-tcp-chardev-telnets.x86_64-latest.err
@@ -0,0 +1 @@
+unsupported configuration: tcp chardev protocol 'tls' not supported
diff --git a/tests/qemuxmlconfdata/serial-tcp-chardev-telnets.xml b/tests/qemuxmlconfdata/serial-tcp-chardev-telnets.xml
new file mode 100644
index 0000000000..07c36e0fa0
--- /dev/null
+++ b/tests/qemuxmlconfdata/serial-tcp-chardev-telnets.xml
@@ -0,0 +1,23 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>219136</memory>
+  <vcpu placement='static'>1</vcpu>
+  <os>
+    <type arch='x86_64' machine='pc'>hvm</type>
+  </os>
+  <devices>
+    <emulator>/usr/bin/qemu-system-x86_64</emulator>
+    <serial type='tcp'>
+      <source mode='connect' host='127.0.0.1' service='9999'/>
+      <protocol type='tls'/>
+      <target port='0'/>
+    </serial>
+    <console type='tcp'>
+      <source mode='connect' host='127.0.0.1' service='9999'/>
+      <protocol type='telnets'/>
+      <target port='0'/>
+    </console>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c
index 323fd9d721..821b8da25a 100644
--- a/tests/qemuxmlconftest.c
+++ b/tests/qemuxmlconftest.c
@@ -1838,6 +1838,7 @@ mymain(void)
     DO_TEST_CAPS_LATEST("serial-unix-chardev");
     DO_TEST_CAPS_LATEST_PARSE_ERROR("serial-unix-missing-source");
     DO_TEST_CAPS_LATEST("serial-tcp-chardev");
+    DO_TEST_CAPS_LATEST_PARSE_ERROR("serial-tcp-chardev-telnets");
     DO_TEST_CAPS_LATEST("serial-udp-chardev");
     DO_TEST_CAPS_LATEST("serial-tcp-telnet-chardev");
     driver.config->chardevTLS = 1;
-- 
2.46.0




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux