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; }