patches for DPDK stable branches
 help / color / mirror / Atom feed
* [dpdk-stable] [PATCH] ethdev: fix crash on owner delete
       [not found] <20211102234434.2639807-1-ferruh.yigit@intel.com>
@ 2021-11-04 11:04 ` Ferruh Yigit
  2021-11-05  3:03   ` Xia, Chenbo
  0 siblings, 1 reply; 5+ messages in thread
From: Ferruh Yigit @ 2021-11-04 11:04 UTC (permalink / raw)
  To: Thomas Monjalon, Andrew Rybchenko, Stephen Hemminger, Matan Azrad
  Cc: Ferruh Yigit, dev, stable, Matan Azrad

'eth_dev->data' can be null before ethdev allocated. The API walks
through all eth devices, at least for some data can be null.

Adding 'eth_dev->data' null check before accessing it.

Fixes: 33c73aae32e4 ("ethdev: allow ownership operations on unused port")
Cc: stable@dpdk.org

Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
---
Cc: Matan Azrad <matan@nvidia.com>
---
 lib/ethdev/rte_ethdev.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
index 7db84b12d03b..8e679e4003db 100644
--- a/lib/ethdev/rte_ethdev.c
+++ b/lib/ethdev/rte_ethdev.c
@@ -757,10 +757,13 @@ rte_eth_dev_owner_delete(const uint64_t owner_id)
 	rte_spinlock_lock(&eth_dev_shared_data->ownership_lock);
 
 	if (eth_is_valid_owner_id(owner_id)) {
-		for (port_id = 0; port_id < RTE_MAX_ETHPORTS; port_id++)
-			if (rte_eth_devices[port_id].data->owner.id == owner_id)
-				memset(&rte_eth_devices[port_id].data->owner, 0,
+		for (port_id = 0; port_id < RTE_MAX_ETHPORTS; port_id++) {
+			struct rte_eth_dev_data *data =
+				rte_eth_devices[port_id].data;
+			if (data != NULL && data->owner.id == owner_id)
+				memset(&data->owner, 0,
 				       sizeof(struct rte_eth_dev_owner));
+		}
 		RTE_ETHDEV_LOG(NOTICE,
 			"All port owners owned by %016"PRIx64" identifier have removed\n",
 			owner_id);
-- 
2.31.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [dpdk-stable] [PATCH] ethdev: fix crash on owner delete
  2021-11-04 11:04 ` [dpdk-stable] [PATCH] ethdev: fix crash on owner delete Ferruh Yigit
@ 2021-11-05  3:03   ` Xia, Chenbo
  2021-11-05 13:16     ` [dpdk-stable] [dpdk-dev] " Thomas Monjalon
  0 siblings, 1 reply; 5+ messages in thread
From: Xia, Chenbo @ 2021-11-05  3:03 UTC (permalink / raw)
  To: Yigit, Ferruh, Thomas Monjalon, Andrew Rybchenko,
	Stephen Hemminger, Matan Azrad
  Cc: Yigit, Ferruh, dev, stable, Matan Azrad

> -----Original Message-----
> From: stable <stable-bounces@dpdk.org> On Behalf Of Ferruh Yigit
> Sent: Thursday, November 4, 2021 7:04 PM
> To: Thomas Monjalon <thomas@monjalon.net>; Andrew Rybchenko
> <andrew.rybchenko@oktetlabs.ru>; Stephen Hemminger
> <stephen@networkplumber.org>; Matan Azrad <matan@mellanox.com>
> Cc: Yigit, Ferruh <ferruh.yigit@intel.com>; dev@dpdk.org; stable@dpdk.org;
> Matan Azrad <matan@nvidia.com>
> Subject: [dpdk-stable] [PATCH] ethdev: fix crash on owner delete
> 
> 'eth_dev->data' can be null before ethdev allocated. The API walks
> through all eth devices, at least for some data can be null.
> 
> Adding 'eth_dev->data' null check before accessing it.
> 
> Fixes: 33c73aae32e4 ("ethdev: allow ownership operations on unused port")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> ---
> Cc: Matan Azrad <matan@nvidia.com>
> ---
>  lib/ethdev/rte_ethdev.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c
> index 7db84b12d03b..8e679e4003db 100644
> --- a/lib/ethdev/rte_ethdev.c
> +++ b/lib/ethdev/rte_ethdev.c
> @@ -757,10 +757,13 @@ rte_eth_dev_owner_delete(const uint64_t owner_id)
>  	rte_spinlock_lock(&eth_dev_shared_data->ownership_lock);
> 
>  	if (eth_is_valid_owner_id(owner_id)) {
> -		for (port_id = 0; port_id < RTE_MAX_ETHPORTS; port_id++)
> -			if (rte_eth_devices[port_id].data->owner.id == owner_id)
> -				memset(&rte_eth_devices[port_id].data->owner, 0,
> +		for (port_id = 0; port_id < RTE_MAX_ETHPORTS; port_id++) {
> +			struct rte_eth_dev_data *data =
> +				rte_eth_devices[port_id].data;
> +			if (data != NULL && data->owner.id == owner_id)
> +				memset(&data->owner, 0,
>  				       sizeof(struct rte_eth_dev_owner));
> +		}
>  		RTE_ETHDEV_LOG(NOTICE,
>  			"All port owners owned by %016"PRIx64" identifier have
> removed\n",
>  			owner_id);
> --
> 2.31.1

Acked-by: Chenbo Xia <chenbo.xia@intel.com>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH] ethdev: fix crash on owner delete
  2021-11-05  3:03   ` Xia, Chenbo
@ 2021-11-05 13:16     ` Thomas Monjalon
  2021-11-05 13:36       ` Andrew Rybchenko
  0 siblings, 1 reply; 5+ messages in thread
From: Thomas Monjalon @ 2021-11-05 13:16 UTC (permalink / raw)
  To: Yigit, Ferruh
  Cc: Andrew Rybchenko, Stephen Hemminger, dev, stable, Matan Azrad,
	Xia, Chenbo

05/11/2021 04:03, Xia, Chenbo:
> From: stable <stable-bounces@dpdk.org> On Behalf Of Ferruh Yigit
> 
> > 'eth_dev->data' can be null before ethdev allocated. The API walks
> > through all eth devices, at least for some data can be null.
> >
> > Adding 'eth_dev->data' null check before accessing it.
> >
> > Fixes: 33c73aae32e4 ("ethdev: allow ownership operations on unused port")
> > Cc: stable@dpdk.org
> >
> > Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
[...]
> > @@ -757,10 +757,13 @@ rte_eth_dev_owner_delete(const uint64_t owner_id)
> >       rte_spinlock_lock(&eth_dev_shared_data->ownership_lock);
> >
> >       if (eth_is_valid_owner_id(owner_id)) {
> > -             for (port_id = 0; port_id < RTE_MAX_ETHPORTS; port_id++)
> > -                     if (rte_eth_devices[port_id].data->owner.id == owner_id)
> > -                             memset(&rte_eth_devices[port_id].data->owner, 0,
> > +             for (port_id = 0; port_id < RTE_MAX_ETHPORTS; port_id++) {
> > +                     struct rte_eth_dev_data *data =
> > +                             rte_eth_devices[port_id].data;
> > +                     if (data != NULL && data->owner.id == owner_id)

Indeed the NULL check was missing.

> Acked-by: Chenbo Xia <chenbo.xia@intel.com>

Acked-by: Thomas Monjalon <thomas@monjalon.net>



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH] ethdev: fix crash on owner delete
  2021-11-05 13:16     ` [dpdk-stable] [dpdk-dev] " Thomas Monjalon
@ 2021-11-05 13:36       ` Andrew Rybchenko
  2021-11-05 14:36         ` Ferruh Yigit
  0 siblings, 1 reply; 5+ messages in thread
From: Andrew Rybchenko @ 2021-11-05 13:36 UTC (permalink / raw)
  To: Thomas Monjalon, Yigit, Ferruh
  Cc: Stephen Hemminger, dev, stable, Matan Azrad, Xia, Chenbo

On 11/5/21 4:16 PM, Thomas Monjalon wrote:
> 05/11/2021 04:03, Xia, Chenbo:
>> From: stable <stable-bounces@dpdk.org> On Behalf Of Ferruh Yigit
>>
>>> 'eth_dev->data' can be null before ethdev allocated. The API walks
>>> through all eth devices, at least for some data can be null.
>>>
>>> Adding 'eth_dev->data' null check before accessing it.
>>>
>>> Fixes: 33c73aae32e4 ("ethdev: allow ownership operations on unused port")
>>> Cc: stable@dpdk.org
>>>
>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
> [...]
>>> @@ -757,10 +757,13 @@ rte_eth_dev_owner_delete(const uint64_t owner_id)
>>>       rte_spinlock_lock(&eth_dev_shared_data->ownership_lock);
>>>
>>>       if (eth_is_valid_owner_id(owner_id)) {
>>> -             for (port_id = 0; port_id < RTE_MAX_ETHPORTS; port_id++)
>>> -                     if (rte_eth_devices[port_id].data->owner.id == owner_id)
>>> -                             memset(&rte_eth_devices[port_id].data->owner, 0,
>>> +             for (port_id = 0; port_id < RTE_MAX_ETHPORTS; port_id++) {
>>> +                     struct rte_eth_dev_data *data =
>>> +                             rte_eth_devices[port_id].data;
>>> +                     if (data != NULL && data->owner.id == owner_id)
> 
> Indeed the NULL check was missing.
> 
>> Acked-by: Chenbo Xia <chenbo.xia@intel.com>
> 
> Acked-by: Thomas Monjalon <thomas@monjalon.net>
> 

Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [dpdk-stable] [dpdk-dev] [PATCH] ethdev: fix crash on owner delete
  2021-11-05 13:36       ` Andrew Rybchenko
@ 2021-11-05 14:36         ` Ferruh Yigit
  0 siblings, 0 replies; 5+ messages in thread
From: Ferruh Yigit @ 2021-11-05 14:36 UTC (permalink / raw)
  To: Andrew Rybchenko, Thomas Monjalon
  Cc: Stephen Hemminger, dev, stable, Matan Azrad, Xia, Chenbo

On 11/5/2021 1:36 PM, Andrew Rybchenko wrote:
> On 11/5/21 4:16 PM, Thomas Monjalon wrote:
>> 05/11/2021 04:03, Xia, Chenbo:
>>> From: stable <stable-bounces@dpdk.org> On Behalf Of Ferruh Yigit
>>>
>>>> 'eth_dev->data' can be null before ethdev allocated. The API walks
>>>> through all eth devices, at least for some data can be null.
>>>>
>>>> Adding 'eth_dev->data' null check before accessing it.
>>>>
>>>> Fixes: 33c73aae32e4 ("ethdev: allow ownership operations on unused port")
>>>> Cc: stable@dpdk.org
>>>>
>>>> Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
>> [...]
>>>> @@ -757,10 +757,13 @@ rte_eth_dev_owner_delete(const uint64_t owner_id)
>>>>        rte_spinlock_lock(&eth_dev_shared_data->ownership_lock);
>>>>
>>>>        if (eth_is_valid_owner_id(owner_id)) {
>>>> -             for (port_id = 0; port_id < RTE_MAX_ETHPORTS; port_id++)
>>>> -                     if (rte_eth_devices[port_id].data->owner.id == owner_id)
>>>> -                             memset(&rte_eth_devices[port_id].data->owner, 0,
>>>> +             for (port_id = 0; port_id < RTE_MAX_ETHPORTS; port_id++) {
>>>> +                     struct rte_eth_dev_data *data =
>>>> +                             rte_eth_devices[port_id].data;
>>>> +                     if (data != NULL && data->owner.id == owner_id)
>>
>> Indeed the NULL check was missing.
>>
>>> Acked-by: Chenbo Xia <chenbo.xia@intel.com>
>>
>> Acked-by: Thomas Monjalon <thomas@monjalon.net>
>>
> 
> Acked-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
> 

Applied to dpdk-next-net/main, thanks.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-11-05 14:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20211102234434.2639807-1-ferruh.yigit@intel.com>
2021-11-04 11:04 ` [dpdk-stable] [PATCH] ethdev: fix crash on owner delete Ferruh Yigit
2021-11-05  3:03   ` Xia, Chenbo
2021-11-05 13:16     ` [dpdk-stable] [dpdk-dev] " Thomas Monjalon
2021-11-05 13:36       ` Andrew Rybchenko
2021-11-05 14:36         ` Ferruh Yigit

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).