Skip to content

Commit

Permalink
bus/pci: fix Intel IOMMU sysfs access check
Browse files Browse the repository at this point in the history
[ upstream commit 2e8d5cf ]

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")

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Reviewed-by: David Marchand <david.marchand@redhat.com>
  • Loading branch information
shemminger authored and kevintraynor committed Nov 22, 2019
1 parent a9a4cf7 commit a87111e
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions drivers/bus/pci/linux/pci.c
Expand Up @@ -592,18 +592,19 @@ pci_one_device_iommu_support_va(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 a87111e

Please sign in to comment.