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