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

Reply via email to