From 79456b79f3ed88c6e1b8f02b612948036ed620fd Mon Sep 17 00:00:00 2001 From: Roman Bogorodskiy Date: Tue, 15 Jul 2025 20:20:12 +0200 Subject: [PATCH] bhyve: extend serial devices validation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Extend bhyveDomainDeviceDefValidate() to check that: - only 'nmdm' or 'tcp' serial devices are used, - serial device count is not more than supported, - only listening raw TCP sockets are used. Signed-off-by: Roman Bogorodskiy Reviewed-by: Daniel P. Berrangé --- src/bhyve/bhyve_domain.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index c9bbf27d83..9dec300a99 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -263,6 +263,33 @@ bhyveDomainDeviceDefValidate(const virDomainDeviceDef *dev, _("Only 'virio' RNG device model is supported")); return -1; } + } else if (dev->type == VIR_DOMAIN_DEVICE_CHR && + dev->data.chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL) { + virDomainChrDef *chr = dev->data.chr; + if (chr->source->type != VIR_DOMAIN_CHR_TYPE_NMDM && + chr->source->type != VIR_DOMAIN_CHR_TYPE_TCP) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Only 'nmdm' and 'tcp' console types are supported")); + return -1; + } + if (chr->target.port > 3) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Only four serial ports are supported")); + return -1; + } + if (chr->source->type == VIR_DOMAIN_CHR_TYPE_TCP) { + if (chr->source->data.tcp.listen == false) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Only listening TCP sockets are supported")); + return -1; + } + + if (chr->source->data.tcp.protocol != VIR_DOMAIN_CHR_TCP_PROTOCOL_RAW) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Only 'raw' protocol is supported for TCP sockets")); + return -1; + } + } } return 0; -- 2.47.2