* [dpdk-dev] [PATCH] dev: don't remove devargs that are still referenced @ 2018-11-21 18:37 Darek Stojaczyk 2018-11-21 18:55 ` Thomas Monjalon 2018-11-21 19:38 ` [dpdk-dev] [PATCH v2] " Darek Stojaczyk 0 siblings, 2 replies; 9+ messages in thread From: Darek Stojaczyk @ 2018-11-21 18:37 UTC (permalink / raw) To: dev; +Cc: Darek Stojaczyk, gaetan.rivet Even if a device failed to plug, it's still a device object that references the devargs. Those devargs will be freed automatically together with the device, but can't be freed any earlier. Fixes: 7e8b26650146 ("eal: fix hotplug add / remove") Cc: gaetan.rivet@6wind.com Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> --- lib/librte_eal/common/eal_common_dev.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c index 1fdc9ab17..b6fc5e437 100644 --- a/lib/librte_eal/common/eal_common_dev.c +++ b/lib/librte_eal/common/eal_common_dev.c @@ -169,11 +169,10 @@ local_dev_probe(const char *devargs, struct rte_device **new_dev) ret = dev->bus->plug(dev); if (ret) { - if (rte_dev_is_probed(dev)) /* if already succeeded earlier */ - return ret; /* no rollback */ - RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", - dev->name); - goto err_devarg; + if (!rte_dev_is_probed(dev)) /* if hasn't succeeded earlier */ + RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", + dev->name); + return ret; } *new_dev = dev; -- 2.17.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-dev] [PATCH] dev: don't remove devargs that are still referenced 2018-11-21 18:37 [dpdk-dev] [PATCH] dev: don't remove devargs that are still referenced Darek Stojaczyk @ 2018-11-21 18:55 ` Thomas Monjalon 2018-11-21 19:38 ` [dpdk-dev] [PATCH v2] " Darek Stojaczyk 1 sibling, 0 replies; 9+ messages in thread From: Thomas Monjalon @ 2018-11-21 18:55 UTC (permalink / raw) To: Darek Stojaczyk; +Cc: dev, gaetan.rivet 21/11/2018 19:37, Darek Stojaczyk: > Even if a device failed to plug, it's still a device > object that references the devargs. Those devargs will > be freed automatically together with the device, but > can't be freed any earlier. Thanks for the patch. Please, be more specific about the bug. You could add 2 more paragraphs: - One before, to explain the tested scenario and the result. - One after, to explain how it is fixed (changing the goto by a return). [...] > ret = dev->bus->plug(dev); > if (ret) { > - if (rte_dev_is_probed(dev)) /* if already succeeded earlier */ > - return ret; /* no rollback */ > - RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", > - dev->name); > - goto err_devarg; > + if (!rte_dev_is_probed(dev)) /* if hasn't succeeded earlier */ > + RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", > + dev->name); > + return ret; > } ^ permalink raw reply [flat|nested] 9+ messages in thread
* [dpdk-dev] [PATCH v2] dev: don't remove devargs that are still referenced 2018-11-21 18:37 [dpdk-dev] [PATCH] dev: don't remove devargs that are still referenced Darek Stojaczyk 2018-11-21 18:55 ` Thomas Monjalon @ 2018-11-21 19:38 ` Darek Stojaczyk 2018-11-22 9:54 ` Gaëtan Rivet 2018-11-23 15:43 ` [dpdk-dev] [PATCH v3] " Darek Stojaczyk 1 sibling, 2 replies; 9+ messages in thread From: Darek Stojaczyk @ 2018-11-21 19:38 UTC (permalink / raw) To: dev; +Cc: Darek Stojaczyk, gaetan.rivet, thomas Even if a device failed to plug, it's still a device object that references the devargs. Those devargs will be freed automatically together with the device, but freeing them any earlier - like it's done in the hotplug error handling path right now - will give us a dangling pointer and a segfault scenario. Consider the following case: * secondary process receives the hotplug request IPC message * devargs are either created or updated * the bus is scanned * a new device object is created with the latest devargs * the device can't be plugged for whatever reason, bus->plug returns error * the devargs are freed, even though they're still referenced by the device object on the bus For PCI devices, the generic device name comes from a buffer within the devargs. Freeing those will make EAL segfault whenever the device name is checked. This patch just prevents the hotplug error handling path from removing the devargs when there's a device that references them. This is done by simply exiting early from the hotplug function. As mentioned in the beginning, those devargs will be freed later, together with the device itself. Fixes: 7e8b26650146 ("eal: fix hotplug add / remove") Cc: gaetan.rivet@6wind.com Cc: thomas@monjalon.net Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> --- lib/librte_eal/common/eal_common_dev.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c index 1fdc9ab17..b6fc5e437 100644 --- a/lib/librte_eal/common/eal_common_dev.c +++ b/lib/librte_eal/common/eal_common_dev.c @@ -169,11 +169,10 @@ local_dev_probe(const char *devargs, struct rte_device **new_dev) ret = dev->bus->plug(dev); if (ret) { - if (rte_dev_is_probed(dev)) /* if already succeeded earlier */ - return ret; /* no rollback */ - RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", - dev->name); - goto err_devarg; + if (!rte_dev_is_probed(dev)) /* if hasn't succeeded earlier */ + RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", + dev->name); + return ret; } *new_dev = dev; -- 2.17.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-dev] [PATCH v2] dev: don't remove devargs that are still referenced 2018-11-21 19:38 ` [dpdk-dev] [PATCH v2] " Darek Stojaczyk @ 2018-11-22 9:54 ` Gaëtan Rivet 2018-11-22 12:54 ` Stojaczyk, Dariusz 2018-11-23 15:43 ` [dpdk-dev] [PATCH v3] " Darek Stojaczyk 1 sibling, 1 reply; 9+ messages in thread From: Gaëtan Rivet @ 2018-11-22 9:54 UTC (permalink / raw) To: Darek Stojaczyk; +Cc: dev, thomas On Wed, Nov 21, 2018 at 08:38:27PM +0100, Darek Stojaczyk wrote: > Even if a device failed to plug, it's still a device > object that references the devargs. Those devargs will > be freed automatically together with the device, but > freeing them any earlier - like it's done in the hotplug > error handling path right now - will give us a dangling > pointer and a segfault scenario. > > Consider the following case: > * secondary process receives the hotplug request IPC message > * devargs are either created or updated > * the bus is scanned > * a new device object is created with the latest devargs > * the device can't be plugged for whatever reason, > bus->plug returns error > * the devargs are freed, even though they're still referenced > by the device object on the bus > > For PCI devices, the generic device name comes from > a buffer within the devargs. Freeing those will make > EAL segfault whenever the device name is checked. > > This patch just prevents the hotplug error handling > path from removing the devargs when there's a device > that references them. This is done by simply exiting > early from the hotplug function. As mentioned in the > beginning, those devargs will be freed later, together > with the device itself. > This seems ok in conjunction with Thomas' patch on overwriting devargs on insertion. The only place a device will be freed is the unplug bus ops, it already does remove the device devargs. > Fixes: 7e8b26650146 ("eal: fix hotplug add / remove") > Cc: gaetan.rivet@6wind.com > Cc: thomas@monjalon.net > > Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> > --- > lib/librte_eal/common/eal_common_dev.c | 9 ++++----- > 1 file changed, 4 insertions(+), 5 deletions(-) > > diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c > index 1fdc9ab17..b6fc5e437 100644 > --- a/lib/librte_eal/common/eal_common_dev.c > +++ b/lib/librte_eal/common/eal_common_dev.c > @@ -169,11 +169,10 @@ local_dev_probe(const char *devargs, struct rte_device **new_dev) > > ret = dev->bus->plug(dev); > if (ret) { > - if (rte_dev_is_probed(dev)) /* if already succeeded earlier */ > - return ret; /* no rollback */ > - RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", > - dev->name); > - goto err_devarg; > + if (!rte_dev_is_probed(dev)) /* if hasn't succeeded earlier */ > + RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", > + dev->name); Maybe a comment here to describe that the devargs is still the responsibility of the rte_device and should not be removed. > + return ret; > } > > *new_dev = dev; > -- > 2.17.1 > -- Gaëtan Rivet 6WIND ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-dev] [PATCH v2] dev: don't remove devargs that are still referenced 2018-11-22 9:54 ` Gaëtan Rivet @ 2018-11-22 12:54 ` Stojaczyk, Dariusz 0 siblings, 0 replies; 9+ messages in thread From: Stojaczyk, Dariusz @ 2018-11-22 12:54 UTC (permalink / raw) To: Gaëtan Rivet; +Cc: dev, thomas > -----Original Message----- > From: Gaëtan Rivet [mailto:gaetan.rivet@6wind.com] > Sent: Thursday, November 22, 2018 10:54 AM > To: Stojaczyk, Dariusz <dariusz.stojaczyk@intel.com> > Cc: dev@dpdk.org; thomas@monjalon.net > Subject: Re: [PATCH v2] dev: don't remove devargs that are still referenced > > On Wed, Nov 21, 2018 at 08:38:27PM +0100, Darek Stojaczyk wrote: > > Even if a device failed to plug, it's still a device > > object that references the devargs. Those devargs will > > be freed automatically together with the device, but > > freeing them any earlier - like it's done in the hotplug > > error handling path right now - will give us a dangling > > pointer and a segfault scenario. > > > > Consider the following case: > > * secondary process receives the hotplug request IPC message > > * devargs are either created or updated > > * the bus is scanned > > * a new device object is created with the latest devargs > > * the device can't be plugged for whatever reason, > > bus->plug returns error > > * the devargs are freed, even though they're still referenced > > by the device object on the bus > > > > For PCI devices, the generic device name comes from > > a buffer within the devargs. Freeing those will make > > EAL segfault whenever the device name is checked. > > > > This patch just prevents the hotplug error handling > > path from removing the devargs when there's a device > > that references them. This is done by simply exiting > > early from the hotplug function. As mentioned in the > > beginning, those devargs will be freed later, together > > with the device itself. > > > > This seems ok in conjunction with Thomas' patch on overwriting devargs > on insertion. > > The only place a device will be freed is the unplug bus ops, it already > does remove the device devargs. > > > Fixes: 7e8b26650146 ("eal: fix hotplug add / remove") > > Cc: gaetan.rivet@6wind.com > > Cc: thomas@monjalon.net > > > > Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> > > --- > > lib/librte_eal/common/eal_common_dev.c | 9 ++++----- > > 1 file changed, 4 insertions(+), 5 deletions(-) > > > > diff --git a/lib/librte_eal/common/eal_common_dev.c > b/lib/librte_eal/common/eal_common_dev.c > > index 1fdc9ab17..b6fc5e437 100644 > > --- a/lib/librte_eal/common/eal_common_dev.c > > +++ b/lib/librte_eal/common/eal_common_dev.c > > @@ -169,11 +169,10 @@ local_dev_probe(const char *devargs, struct > rte_device **new_dev) > > > > ret = dev->bus->plug(dev); > > if (ret) { > > - if (rte_dev_is_probed(dev)) /* if already succeeded earlier > */ > > - return ret; /* no rollback */ > > - RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", > > - dev->name); > > - goto err_devarg; > > + if (!rte_dev_is_probed(dev)) /* if hasn't succeeded earlier */ > > + RTE_LOG(ERR, EAL, "Driver cannot attach the device > (%s)\n", > > + dev->name); > > Maybe a comment here to describe that the devargs is still the > responsibility of the rte_device and should not be removed. Ack, I'll do that. > > > + return ret; > > } > > > > *new_dev = dev; > > -- > > 2.17.1 > > > > -- > Gaëtan Rivet > 6WIND ^ permalink raw reply [flat|nested] 9+ messages in thread
* [dpdk-dev] [PATCH v3] dev: don't remove devargs that are still referenced 2018-11-21 19:38 ` [dpdk-dev] [PATCH v2] " Darek Stojaczyk 2018-11-22 9:54 ` Gaëtan Rivet @ 2018-11-23 15:43 ` Darek Stojaczyk 2018-11-23 17:04 ` Maxime Coquelin 1 sibling, 1 reply; 9+ messages in thread From: Darek Stojaczyk @ 2018-11-23 15:43 UTC (permalink / raw) To: dev; +Cc: Darek Stojaczyk, gaetan.rivet, thomas Even if a device failed to plug, it's still a device object that references the devargs. Those devargs will be freed automatically together with the device, but freeing them any earlier - like it's done in the hotplug error handling path right now - will give us a dangling pointer and a segfault scenario. Consider the following case: * secondary process receives the hotplug request IPC message * devargs are either created or updated * the bus is scanned * a new device object is created with the latest devargs * the device can't be plugged for whatever reason, bus->plug returns error * the devargs are freed, even though they're still referenced by the device object on the bus For PCI devices, the generic device name comes from a buffer within the devargs. Freeing those will make EAL segfault whenever the device name is checked. This patch just prevents the hotplug error handling path from removing the devargs when there's a device that references them. This is done by simply exiting early from the hotplug function. As mentioned in the beginning, those devargs will be freed later, together with the device itself. Fixes: 7e8b26650146 ("eal: fix hotplug add / remove") Cc: gaetan.rivet@6wind.com Cc: thomas@monjalon.net Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> --- Changes since v2: * added an extra comment (Gaetan) Changes since v1: * described the failing scenario in commit msg (Thomas) lib/librte_eal/common/eal_common_dev.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c index 1fdc9ab17..d7950bc9a 100644 --- a/lib/librte_eal/common/eal_common_dev.c +++ b/lib/librte_eal/common/eal_common_dev.c @@ -166,14 +166,17 @@ local_dev_probe(const char *devargs, struct rte_device **new_dev) ret = -ENODEV; goto err_devarg; } + /* Since there is a matching device, it is now its responsibility + * to manage the devargs we've just inserted. From this point + * those devargs shouldn't be removed manually anymore. + */ ret = dev->bus->plug(dev); if (ret) { - if (rte_dev_is_probed(dev)) /* if already succeeded earlier */ - return ret; /* no rollback */ - RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", - dev->name); - goto err_devarg; + if (!rte_dev_is_probed(dev)) /* if hasn't succeeded earlier */ + RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", + dev->name); + return ret; } *new_dev = dev; -- 2.17.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-dev] [PATCH v3] dev: don't remove devargs that are still referenced 2018-11-23 15:43 ` [dpdk-dev] [PATCH v3] " Darek Stojaczyk @ 2018-11-23 17:04 ` Maxime Coquelin 2018-11-23 21:45 ` Stojaczyk, Dariusz 2018-11-25 12:46 ` Thomas Monjalon 0 siblings, 2 replies; 9+ messages in thread From: Maxime Coquelin @ 2018-11-23 17:04 UTC (permalink / raw) To: Darek Stojaczyk, dev; +Cc: gaetan.rivet, thomas Hi, On 11/23/18 4:43 PM, Darek Stojaczyk wrote: > Even if a device failed to plug, it's still a device > object that references the devargs. Those devargs will > be freed automatically together with the device, but > freeing them any earlier - like it's done in the hotplug > error handling path right now - will give us a dangling > pointer and a segfault scenario. > > Consider the following case: > * secondary process receives the hotplug request IPC message > * devargs are either created or updated > * the bus is scanned > * a new device object is created with the latest devargs > * the device can't be plugged for whatever reason, > bus->plug returns error > * the devargs are freed, even though they're still referenced > by the device object on the bus > > For PCI devices, the generic device name comes from > a buffer within the devargs. Freeing those will make > EAL segfault whenever the device name is checked. > > This patch just prevents the hotplug error handling > path from removing the devargs when there's a device > that references them. This is done by simply exiting > early from the hotplug function. As mentioned in the > beginning, those devargs will be freed later, together > with the device itself. > > Fixes: 7e8b26650146 ("eal: fix hotplug add / remove") Should you also cc stable? Above commit is in since v17.08. > Cc: gaetan.rivet@6wind.com > Cc: thomas@monjalon.net > > Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> > --- > Changes since v2: > * added an extra comment (Gaetan) > > Changes since v1: > * described the failing scenario in commit msg (Thomas) > > lib/librte_eal/common/eal_common_dev.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > > diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c > index 1fdc9ab17..d7950bc9a 100644 > --- a/lib/librte_eal/common/eal_common_dev.c > +++ b/lib/librte_eal/common/eal_common_dev.c > @@ -166,14 +166,17 @@ local_dev_probe(const char *devargs, struct rte_device **new_dev) > ret = -ENODEV; > goto err_devarg; > } > + /* Since there is a matching device, it is now its responsibility > + * to manage the devargs we've just inserted. From this point > + * those devargs shouldn't be removed manually anymore. > + */ > > ret = dev->bus->plug(dev); > if (ret) { > - if (rte_dev_is_probed(dev)) /* if already succeeded earlier */ > - return ret; /* no rollback */ > - RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", > - dev->name); > - goto err_devarg; > + if (!rte_dev_is_probed(dev)) /* if hasn't succeeded earlier */ > + RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", > + dev->name); > + return ret; > } > > *new_dev = dev; > Other than that, it looks good to me: Acked-by: Maxime Coquelin <maxime.coquelin@redhat.com> Regards, Maxime ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-dev] [PATCH v3] dev: don't remove devargs that are still referenced 2018-11-23 17:04 ` Maxime Coquelin @ 2018-11-23 21:45 ` Stojaczyk, Dariusz 2018-11-25 12:46 ` Thomas Monjalon 1 sibling, 0 replies; 9+ messages in thread From: Stojaczyk, Dariusz @ 2018-11-23 21:45 UTC (permalink / raw) To: Maxime Coquelin, dev; +Cc: gaetan.rivet, thomas > -----Original Message----- > From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com] > Sent: Friday, November 23, 2018 6:05 PM > To: Stojaczyk, Dariusz <dariusz.stojaczyk@intel.com>; dev@dpdk.org > Cc: gaetan.rivet@6wind.com; thomas@monjalon.net > Subject: Re: [dpdk-dev] [PATCH v3] dev: don't remove devargs that are still > referenced > > Hi, > > On 11/23/18 4:43 PM, Darek Stojaczyk wrote: > > Even if a device failed to plug, it's still a device > > object that references the devargs. Those devargs will > > be freed automatically together with the device, but > > freeing them any earlier - like it's done in the hotplug > > error handling path right now - will give us a dangling > > pointer and a segfault scenario. > > > > Consider the following case: > > * secondary process receives the hotplug request IPC message > > * devargs are either created or updated > > * the bus is scanned > > * a new device object is created with the latest devargs > > * the device can't be plugged for whatever reason, > > bus->plug returns error > > * the devargs are freed, even though they're still referenced > > by the device object on the bus > > > > For PCI devices, the generic device name comes from > > a buffer within the devargs. Freeing those will make > > EAL segfault whenever the device name is checked. > > > > This patch just prevents the hotplug error handling > > path from removing the devargs when there's a device > > that references them. This is done by simply exiting > > early from the hotplug function. As mentioned in the > > beginning, those devargs will be freed later, together > > with the device itself. > > > > Fixes: 7e8b26650146 ("eal: fix hotplug add / remove") > > Should you also cc stable? > Above commit is in since v17.08. > Hi Maxime, Stable could use a similar patch, but not exactly this one as it is now. I'll resubmit for stable once the one here gets approved. Thank you, D. > > Cc: gaetan.rivet@6wind.com > > Cc: thomas@monjalon.net > > > > Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> > > --- > > Changes since v2: > > * added an extra comment (Gaetan) > > > > Changes since v1: > > * described the failing scenario in commit msg (Thomas) > > > > lib/librte_eal/common/eal_common_dev.c | 13 ++++++++----- > > 1 file changed, 8 insertions(+), 5 deletions(-) > > > > diff --git a/lib/librte_eal/common/eal_common_dev.c > b/lib/librte_eal/common/eal_common_dev.c > > index 1fdc9ab17..d7950bc9a 100644 > > --- a/lib/librte_eal/common/eal_common_dev.c > > +++ b/lib/librte_eal/common/eal_common_dev.c > > @@ -166,14 +166,17 @@ local_dev_probe(const char *devargs, struct > rte_device **new_dev) > > ret = -ENODEV; > > goto err_devarg; > > } > > + /* Since there is a matching device, it is now its responsibility > > + * to manage the devargs we've just inserted. From this point > > + * those devargs shouldn't be removed manually anymore. > > + */ > > > > ret = dev->bus->plug(dev); > > if (ret) { > > - if (rte_dev_is_probed(dev)) /* if already succeeded earlier > */ > > - return ret; /* no rollback */ > > - RTE_LOG(ERR, EAL, "Driver cannot attach the device (%s)\n", > > - dev->name); > > - goto err_devarg; > > + if (!rte_dev_is_probed(dev)) /* if hasn't succeeded earlier */ > > + RTE_LOG(ERR, EAL, "Driver cannot attach the device > (%s)\n", > > + dev->name); > > + return ret; > > } > > > > *new_dev = dev; > > > > Other than that, it looks good to me: > Acked-by: Maxime Coquelin <maxime.coquelin@redhat.com> > > Regards, > Maxime ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [dpdk-dev] [PATCH v3] dev: don't remove devargs that are still referenced 2018-11-23 17:04 ` Maxime Coquelin 2018-11-23 21:45 ` Stojaczyk, Dariusz @ 2018-11-25 12:46 ` Thomas Monjalon 1 sibling, 0 replies; 9+ messages in thread From: Thomas Monjalon @ 2018-11-25 12:46 UTC (permalink / raw) To: Darek Stojaczyk; +Cc: dev, Maxime Coquelin, gaetan.rivet 23/11/2018 18:04, Maxime Coquelin: > Hi, > > On 11/23/18 4:43 PM, Darek Stojaczyk wrote: > > Even if a device failed to plug, it's still a device > > object that references the devargs. Those devargs will > > be freed automatically together with the device, but > > freeing them any earlier - like it's done in the hotplug > > error handling path right now - will give us a dangling > > pointer and a segfault scenario. > > > > Consider the following case: > > * secondary process receives the hotplug request IPC message > > * devargs are either created or updated > > * the bus is scanned > > * a new device object is created with the latest devargs > > * the device can't be plugged for whatever reason, > > bus->plug returns error > > * the devargs are freed, even though they're still referenced > > by the device object on the bus > > > > For PCI devices, the generic device name comes from > > a buffer within the devargs. Freeing those will make > > EAL segfault whenever the device name is checked. > > > > This patch just prevents the hotplug error handling > > path from removing the devargs when there's a device > > that references them. This is done by simply exiting > > early from the hotplug function. As mentioned in the > > beginning, those devargs will be freed later, together > > with the device itself. > > > > Fixes: 7e8b26650146 ("eal: fix hotplug add / remove") > > Should you also cc stable? > Above commit is in since v17.08. > > > Cc: gaetan.rivet@6wind.com > > Cc: thomas@monjalon.net > > > > Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> > Acked-by: Maxime Coquelin <maxime.coquelin@redhat.com> Acked-by: Thomas Monjalon <thomas@monjalon.net> Applied (with rebase), thanks ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-11-25 12:46 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-11-21 18:37 [dpdk-dev] [PATCH] dev: don't remove devargs that are still referenced Darek Stojaczyk 2018-11-21 18:55 ` Thomas Monjalon 2018-11-21 19:38 ` [dpdk-dev] [PATCH v2] " Darek Stojaczyk 2018-11-22 9:54 ` Gaëtan Rivet 2018-11-22 12:54 ` Stojaczyk, Dariusz 2018-11-23 15:43 ` [dpdk-dev] [PATCH v3] " Darek Stojaczyk 2018-11-23 17:04 ` Maxime Coquelin 2018-11-23 21:45 ` Stojaczyk, Dariusz 2018-11-25 12:46 ` Thomas Monjalon
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).