vlib: Fix pci io bar read/write fd leak 01/15501/2
authorMohsin Kazmi <sykazmi@cisco.com>
Wed, 24 Oct 2018 12:05:34 +0000 (14:05 +0200)
committerDamjan Marion <dmarion@me.com>
Wed, 24 Oct 2018 15:21:57 +0000 (15:21 +0000)
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 <sykazmi@cisco.com>
src/vlib/linux/pci.c

index 724bb9d..c6fa8a7 100644 (file)
@@ -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)
     {