Coverity fixes (VPP-1204)
[vpp.git] / src / vlib / linux / pci.c
index 910f8c2..11480ca 100644 (file)
@@ -263,6 +263,17 @@ vlib_pci_get_device_info (vlib_pci_addr_t * addr, clib_error_t ** error)
          di->iommu_group = atoi ((char *) tmpstr);
          vec_free (tmpstr);
        }
+      vec_reset_length (f);
+      f = format (f, "%v/iommu_group/name%c", dev_dir_name, 0);
+      err = clib_sysfs_read ((char *) f, "%s", &tmpstr);
+      if (err == 0)
+       {
+         if (strncmp ((char *) tmpstr, "vfio-noiommu", 12) == 0)
+           di->flags |= VLIB_PCI_DEVICE_INFO_F_NOIOMMU;
+         vec_free (tmpstr);
+       }
+      else
+       clib_error_free (err);
     }
 
   close (fd);
@@ -695,7 +706,7 @@ add_device_uio (linux_pci_device_t * p, vlib_pci_device_info_t * di,
     err = r->init_function (lpm->vlib_main, p->handle);
 
 error:
-  free (s);
+  vec_free (s);
   if (err)
     {
       if (p->config_fd != -1)
@@ -908,8 +919,9 @@ error:
     {
       if (p->fd != -1)
        close (p->fd);
-      if (p->config_fd != -1)
+      if (p->config_fd != -1 && p->config_fd != p->fd)
        close (p->config_fd);
+      p->config_fd = p->fd = -1;
     }
   return err;
 }