> -----Original Message----- > From: stable <stable-boun...@dpdk.org> On Behalf Of Ferruh Yigit > Sent: Thursday, November 4, 2021 7:04 PM > To: Thomas Monjalon <tho...@monjalon.net>; Andrew Rybchenko > <andrew.rybche...@oktetlabs.ru>; Stephen Hemminger > <step...@networkplumber.org>; Matan Azrad <ma...@mellanox.com> > Cc: Yigit, Ferruh <ferruh.yi...@intel.com>; dev@dpdk.org; sta...@dpdk.org; > Matan Azrad <ma...@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: sta...@dpdk.org > > Signed-off-by: Ferruh Yigit <ferruh.yi...@intel.com> > --- > Cc: Matan Azrad <ma...@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(ð_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....@intel.com>