From: Jianfeng Tan Date: Thu, 16 Mar 2017 16:28:44 +0000 (+0000) Subject: vfio: fix secondary process start X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;ds=sidebyside;h=dd18a2f0b27614841f258c567407093c3d4fd6c5;p=dpdk.git 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 --- 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; }