eal: fix NULL device argument pointer reference

Message ID 20181022061516.45912-1-qi.z.zhang@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers
Series eal: fix NULL device argument pointer reference |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Qi Zhang Oct. 22, 2018, 6:15 a.m. UTC
  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

Thomas Monjalon Oct. 22, 2018, 7:30 a.m. UTC | #1
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>
  
Thomas Monjalon Oct. 22, 2018, 10:47 a.m. UTC | #2
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.
  

Patch

diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c
index d4b1ea70d..9d456d320 100644
--- a/lib/librte_eal/common/eal_common_dev.c
+++ b/lib/librte_eal/common/eal_common_dev.c
@@ -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;