Skip to content

Commit

Permalink
bus/pci: fix Intel IOMMU sysfs access check
Browse files Browse the repository at this point in the history
Just open the sysfs file and handle failure, rather than using access().
This eliminates Coverity warnings about TOCTOU
"time of check versus time of use"; although for this sysfs file that is
not really an issue anyway.

Coverity issue: 347276
Fixes: 54a328f ("bus/pci: forbid IOVA mode if IOMMU address width too small")
Cc: stable@dpdk.org

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Reviewed-by: David Marchand <david.marchand@redhat.com>
  • Loading branch information
shemminger authored and david-marchand committed Oct 9, 2019
1 parent 3586084 commit 2e8d5cf
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions drivers/bus/pci/linux/pci.c
Expand Up @@ -511,18 +511,19 @@ pci_device_iommu_support_va(const struct rte_pci_device *dev)
"%s/" PCI_PRI_FMT "/iommu/intel-iommu/cap",
rte_pci_get_sysfs_path(), addr->domain, addr->bus, addr->devid,
addr->function);
if (access(filename, F_OK) == -1) {
/* We don't have an Intel IOMMU, assume VA supported*/
return true;
}

/* We have an intel IOMMU */
fp = fopen(filename, "r");
if (fp == NULL) {
RTE_LOG(ERR, EAL, "%s(): can't open %s\n", __func__, filename);
/* We don't have an Intel IOMMU, assume VA supported */
if (errno == ENOENT)
return true;

RTE_LOG(ERR, EAL, "%s(): can't open %s: %s\n",
__func__, filename, strerror(errno));
return false;
}

/* We have an Intel IOMMU */
if (fscanf(fp, "%" PRIx64, &vtd_cap_reg) != 1) {
RTE_LOG(ERR, EAL, "%s(): can't read %s\n", __func__, filename);
fclose(fp);
Expand Down

0 comments on commit 2e8d5cf

Please sign in to comment.