With the current way the myInit() is written, it's fairly easy to
miss initialization of @subsys variable as the variable is
allocated firstly on the stack and then it's assigned to
hostdev[i] which was allocated using g_new0() (this it is
containing nothing but all zeroes).

Make the subsys point to the corresponding member in hostdev[i]
from the start. This way only the important bits are overwritten
and the rest stays initialized to zero.

Signed-off-by: Michal Privoznik <mpriv...@redhat.com>
---
 tests/virhostdevtest.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/tests/virhostdevtest.c b/tests/virhostdevtest.c
index 92bafcbb49..1aed0d2b6d 100644
--- a/tests/virhostdevtest.c
+++ b/tests/virhostdevtest.c
@@ -123,23 +123,23 @@ myInit(void)
     size_t i;
 
     for (i = 0; i < nhostdevs; i++) {
-        virDomainHostdevSubsys subsys = {0};
+        virDomainHostdevSubsys *subsys;
         hostdevs[i] = virDomainHostdevDefNew();
         if (!hostdevs[i])
             goto cleanup;
         hostdevs[i]->mode = VIR_DOMAIN_HOSTDEV_MODE_SUBSYS;
-        subsys.type = VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI;
-        subsys.u.pci.addr.domain = 0;
-        subsys.u.pci.addr.bus = 0;
-        subsys.u.pci.addr.slot = i + 1;
-        subsys.u.pci.addr.function = 0;
-        subsys.u.pci.backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO;
-        hostdevs[i]->source.subsys = subsys;
+        subsys = &hostdevs[i]->source.subsys;
+        subsys->type = VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI;
+        subsys->u.pci.addr.domain = 0;
+        subsys->u.pci.addr.bus = 0;
+        subsys->u.pci.addr.slot = i + 1;
+        subsys->u.pci.addr.function = 0;
+        subsys->u.pci.backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO;
     }
 
     for (i = 0; i < nhostdevs; i++) {
-        virDomainHostdevSubsys subsys = hostdevs[i]->source.subsys;
-        if (!(dev[i] = virPCIDeviceNew(&subsys.u.pci.addr)))
+        virDomainHostdevSubsys *subsys = &hostdevs[i]->source.subsys;
+        if (!(dev[i] = virPCIDeviceNew(&subsys->u.pci.addr)))
             goto cleanup;
 
         virPCIDeviceSetStubDriver(dev[i], VIR_PCI_STUB_DRIVER_VFIO);
-- 
2.39.1

Reply via email to