From mboxrd@z Thu Jan 1 00:00:00 1970 From: Neil Horman Subject: [PATCH] vfio: correct system call error checking Date: Tue, 17 Jun 2014 15:03:52 -0400 Message-ID: <1403031832-28540-1-git-send-email-nhorman@tuxdriver.com> To: dev-VfR2kkLFssw@public.gmane.org Return-path: List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-VfR2kkLFssw@public.gmane.org Sender: "dev" Noticed today that ioctl error code return checking was incorrect in some of the vfio code. ioctl can return a negative value if the system detects an error before the target device/driver can produce a return code. The dpdk vfio code only checks specfically for the values that it expects, which leaves it open to accepting unexpected error codes as success. For instance, if the vfio layer noted that the iommu driver hadn't finished registering yet, it would return an -EINVAL error code, but the dpdk would accept that as success, becuase it wasn't 0. Fix this to specifically check for < 0 error codes Signed-off-by: Neil Horman CC: Thomas Monjalon --- lib/librte_eal/linuxapp/eal/eal_pci_vfio.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c index 4de6061..65aa8ad 100644 --- a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c +++ b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c @@ -319,16 +319,16 @@ pci_vfio_get_container_fd(void) /* check VFIO API version */ ret = ioctl(vfio_container_fd, VFIO_GET_API_VERSION); - if (ret != VFIO_API_VERSION) { - RTE_LOG(ERR, EAL, " unknown VFIO API version!\n"); + if ((ret < 0) || (ret != VFIO_API_VERSION)) { + RTE_LOG(ERR, EAL, " unknown VFIO API version! errno = %d\n", errno); close(vfio_container_fd); return -1; } /* check if we support IOMMU type 1 */ ret = ioctl(vfio_container_fd, VFIO_CHECK_EXTENSION, VFIO_TYPE1_IOMMU); - if (!ret) { - RTE_LOG(ERR, EAL, " unknown IOMMU driver!\n"); + if (ret <= 0) { + RTE_LOG(ERR, EAL, " unknown IOMMU driver! errno = %d\n", errno); close(vfio_container_fd); return -1; } -- 1.8.3.1