From dd18a2f0b27614841f258c567407093c3d4fd6c5 Mon Sep 17 00:00:00 2001 From: Jianfeng Tan Date: Thu, 16 Mar 2017 16:28:44 +0000 Subject: [PATCH] vfio: fix secondary process start When binding with vfio-pci, secondary process cannot be started with an error message: cannot find TAILQ entry for PCI device. It's due to: struct rte_pci_addr is padded with 1 byte for alignment by compiler. Then below comparison in commit 2f4adfad0a69 ("vfio: add multiprocess support") will fail if the last byte is not initialized. memcmp(&vfio_res->pci_addr, &dev->addr, sizeof(dev->addr) And commit cdc242f260e7 ("eal/linux: support running as unprivileged user") just triggers this bug by using a stack un-initialized variable. The fix is to use rte_eal_compare_pci_addr() for pci addr comparison. Fixes: 2f4adfad0a69 ("vfio: add multiprocess support") Fixes: cdc242f260e7 ("eal/linux: support running as unprivileged user") Cc: stable@dpdk.org Reported-by: Pawel Rutkowski Signed-off-by: Jianfeng Tan Acked-by: Sergio Gonzalez Monroy --- lib/librte_eal/linuxapp/eal/eal_pci_vfio.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c index ecb1a2078a..2be131959b 100644 --- a/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c +++ b/lib/librte_eal/linuxapp/eal/eal_pci_vfio.c @@ -359,7 +359,8 @@ pci_vfio_map_resource(struct rte_pci_device *dev) } else { /* if we're in a secondary process, just find our tailq entry */ TAILQ_FOREACH(vfio_res, vfio_res_list, next) { - if (memcmp(&vfio_res->pci_addr, &dev->addr, sizeof(dev->addr))) + if (rte_eal_compare_pci_addr(&vfio_res->pci_addr, + &dev->addr)) continue; break; } -- 2.20.1