On 11/1/25 07:24, Roman Bogorodskiy wrote:
> From: Alexander Shursha <[email protected]>
>
> Signed-off-by: Alexander Shursha <[email protected]>
> ---
> 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