On 11/1/25 07:24, Roman Bogorodskiy wrote:
From: Alexander Shursha <kekek2@ya.ru>
Signed-off-by: Alexander Shursha <kekek2@ya.ru> --- src/bhyve/bhyve_parse_command.c | 60 +++++++++++++++++++ .../bhyveargv2xml-passthru.args | 7 +++ .../bhyveargv2xml-passthru.xml | 22 +++++++ tests/bhyveargv2xmltest.c | 1 + 4 files changed, 90 insertions(+) create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-passthru.args create mode 100644 tests/bhyveargv2xmldata/bhyveargv2xml-passthru.xml
Please squash this in: diff --git a/src/bhyve/bhyve_parse_command.c b/src/bhyve/bhyve_parse_command.c index 9ca5e1aab9..5c1527e9c5 100644 --- a/src/bhyve/bhyve_parse_command.c +++ b/src/bhyve/bhyve_parse_command.c @@ -681,6 +681,12 @@ bhyveParsePassthru(virDomainDef *def G_GNUC_UNUSED, GStrv param; char *p = NULL; + if (!addr) { + virReportError(VIR_ERR_OPERATION_FAILED, "%s", + _("No PCI address provided")); + return -1; + } + hostdev = virDomainHostdevDefNew(); hostdev->mode = VIR_DOMAIN_HOSTDEV_MODE_SUBSYS; hostdev->source.subsys.type = VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI; @@ -690,9 +696,6 @@ bhyveParsePassthru(virDomainDef *def G_GNUC_UNUSED, hostdev->info->addr.pci.slot = pcislot; hostdev->info->addr.pci.function = pcifunction; - if (!addr) - goto error; - if (!(params = g_strsplit(addr, ":", -1))) { virReportError(VIR_ERR_OPERATION_FAILED, _("Failed to parse PCI address %1$s"), addr); goto error; @@ -709,9 +712,12 @@ bhyveParsePassthru(virDomainDef *def G_GNUC_UNUSED, goto error; } param = params; - hostdev->source.subsys.u.pci.addr.bus = g_ascii_strtoull(*param++, &p, 10); - hostdev->source.subsys.u.pci.addr.slot = g_ascii_strtoull(*param++, &p, 10); - hostdev->source.subsys.u.pci.addr.function = g_ascii_strtoull(*param, &p, 10); + if (virStrToLong_uip(*param++, &p, 10, hostdev->source.subsys.u.pci.addr.bus) < 0 || + virStrToLong_uip(*param++, &p, 10, hostdev->source.subsys.u.pci.addr.slot) < 0 || + virStrToLong_uip(*param++, &p, 10, hostdev->source.subsys.u.pci.addr.function) < 0) { + virReportError(VIR_ERR_OPERATION_FAILED, _("Failed to parse PCI address %1$s"), addr); + goto error; + } hostdev->source.subsys.u.pci.addr.domain = 0; hostdev->managed = false; @@ -719,9 +725,9 @@ bhyveParsePassthru(virDomainDef *def G_GNUC_UNUSED, VIR_APPEND_ELEMENT(def->hostdevs, def->nhostdevs, hostdev); return 0; - error: - virDomainHostdevDefFree(hostdev); - return -1; + error: + virDomainHostdevDefFree(hostdev); + return -1; } Michal