dma/idxd: fix null dereference in PCI remove
authorKevin Laatz <kevin.laatz@intel.com>
Mon, 4 Jul 2022 15:27:51 +0000 (16:27 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 5 Jul 2022 19:37:25 +0000 (21:37 +0200)
The 'info' struct was being declared as a NULL pointer. If a NULL
pointer is passed to 'rte_dma_info_get', EINVAL is returned and the
struct is not populated. This subsequently causes a segfault when
dereferencing 'info'.

This patch fixes the issue by simply declaring 'info' on the stack and
passing its address to 'rte_dma_info_get'.

Fixes: 9449330a8458 ("dma/idxd: create dmadev instances on PCI probe")
Cc: stable@dpdk.org
Signed-off-by: Kevin Laatz <kevin.laatz@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
drivers/dma/idxd/idxd_pci.c

index 2c3b01c..2f8ec06 100644 (file)
@@ -380,10 +380,10 @@ idxd_dmadev_remove_pci(struct rte_pci_device *dev)
        IDXD_PMD_INFO("Closing %s on NUMA node %d", name, dev->device.numa_node);
 
        RTE_DMA_FOREACH_DEV(i) {
-               struct rte_dma_info *info = {0};
-               rte_dma_info_get(i, info);
-               if (strncmp(name, info->dev_name, strlen(name)) == 0)
-                       idxd_dmadev_destroy(info->dev_name);
+               struct rte_dma_info info;
+               rte_dma_info_get(i, &info);
+               if (strncmp(name, info.dev_name, strlen(name)) == 0)
+                       idxd_dmadev_destroy(info.dev_name);
        }
 
        return 0;