eal: fix NULL device argument pointer reference
Checks
Commit Message
dev->devargs is not initialized for PCI device, so use dev->bus to
replace dev->devargs->bus to avoid segment fault when hotplug remove
a PCI device.
Fixes: 244d5130719c ("eal: enable hotplug on multi-process")
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
---
lib/librte_eal/common/eal_common_dev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Comments
22/10/2018 08:15, Qi Zhang:
> dev->devargs is not initialized for PCI device, so use dev->bus to
> replace dev->devargs->bus to avoid segment fault when hotplug remove
> a PCI device.
It is not really specific to PCI device.
The devargs is not initialized if the device is probed by default policy
(i.e. not in blacklist).
I think we can say that "devargs is not always initialized".
> Fixes: 244d5130719c ("eal: enable hotplug on multi-process")
>
> Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
22/10/2018 09:30, Thomas Monjalon:
> 22/10/2018 08:15, Qi Zhang:
> > dev->devargs is not initialized for PCI device, so use dev->bus to
> > replace dev->devargs->bus to avoid segment fault when hotplug remove
> > a PCI device.
>
> It is not really specific to PCI device.
> The devargs is not initialized if the device is probed by default policy
> (i.e. not in blacklist).
>
> I think we can say that "devargs is not always initialized".
>
> > Fixes: 244d5130719c ("eal: enable hotplug on multi-process")
> >
> > Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Applied with following text:
eal: fix bus name read for removal in multi-process
A crash may appear when removing some PCI devices because
dev->devargs is not always initialized. So use dev->bus instead of
dev->devargs->bus when building devargs string to remove a device.
@@ -393,7 +393,7 @@ rte_dev_remove(struct rte_device *dev)
return -ENOENT;
}
- ret = build_devargs(dev->devargs->bus->name, dev->name, "", &devargs);
+ ret = build_devargs(dev->bus->name, dev->name, "", &devargs);
if (ret != 0)
return ret;