On Mon, Nov 07, 2022 at 12:41:14PM +0000, Matthieu Herrb wrote:

[...]

> Fix a small leak in pci_system_openbsd_destroy() while there.

Similar leaks exist in pci_system_openbsd_create() which I think should
call pci_system_openbsd_destroy() in both early returns instead of
duplicating it in the second one.

pci_system_init() returning non-zero will hit an err(), so these leaks
don't really matter.

compile-tested only since I don't know how to exercise this code.

Index: src/openbsd_pci.c
===================================================================
RCS file: /cvs/xenocara/lib/libpciaccess/src/openbsd_pci.c,v
retrieving revision 1.28
diff -u -p -r1.28 openbsd_pci.c
--- src/openbsd_pci.c   3 Sep 2021 07:19:13 -0000       1.28
+++ src/openbsd_pci.c   7 Nov 2022 13:25:09 -0000
@@ -338,6 +338,8 @@ pci_system_openbsd_destroy(void)
        for (domain = 0; domain < ndomains; domain++)
                close(pcifd[domain]);
        ndomains = 0;
+       free(pci_sys);
+       pci_sys = NULL;
 }
 
 static int
@@ -651,8 +653,10 @@ pci_system_openbsd_create(void)
                ndomains++;
        }
 
-       if (ndomains == 0)
+       if (ndomains == 0) {
+               pci_system_openbsd_destroy();
                return ENXIO;
+       }
 
        ndevs = 0;
        for (domain = 0; domain < ndomains; domain++) {
@@ -676,11 +680,7 @@ pci_system_openbsd_create(void)
        pci_sys->num_devices = ndevs;
        pci_sys->devices = calloc(ndevs, sizeof(struct pci_device_private));
        if (pci_sys->devices == NULL) {
-               free(pci_sys);
-               pci_sys = NULL;
-               for (domain = 0; domain < ndomains; domain++)
-                       close(pcifd[domain]);
-               ndomains = 0;
+               pci_system_openbsd_destroy();
                return ENOMEM;
        }
 

Reply via email to