From: Mohsin Kazmi Date: Wed, 24 Oct 2018 12:05:34 +0000 (+0200) Subject: vlib: Fix pci io bar read/write fd leak X-Git-Tag: v19.04-rc0~542 X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=commitdiff_plain;h=3d3b9550dbee81d3cca85c593015edf2ac3191c2 vlib: Fix pci io bar read/write fd leak Few devices provide PCI bar region(s) through I/O. If any such device driver opens I/O "fd" to read and write, needs to close it, when pci device is going to be deleted. Change-Id: Iba104e56f76c6bf9ccd27bf2223bad39b1301763 Signed-off-by: Mohsin Kazmi --- diff --git a/src/vlib/linux/pci.c b/src/vlib/linux/pci.c index 724bb9d3a4a..c6fa8a7da34 100644 --- a/src/vlib/linux/pci.c +++ b/src/vlib/linux/pci.c @@ -1210,6 +1210,10 @@ vlib_pci_device_open (vlib_main_t * vm, vlib_pci_addr_t * addr, p->handle = p - lpm->linux_pci_devices; p->addr.as_u32 = di->addr.as_u32; p->intx_irq.fd = -1; + /* + * pci io bar read/write fd + */ + p->io_fd = -1; pci_log_debug (vm, p, "open vid:0x%04x did:0x%04x driver:%s iommu_group:%d", di->vendor_id, di->device_id, di->driver_name, @@ -1253,6 +1257,8 @@ vlib_pci_device_close (vlib_main_t * vm, vlib_pci_dev_handle_t h) irq = &p->intx_irq; clib_file_del_by_index (&file_main, irq->clib_file_index); close (p->config_fd); + if (p->io_fd != -1) + close (p->io_fd); } else if (p->type == LINUX_PCI_DEVICE_TYPE_VFIO) {