> -----Original Message----- > From: stable <[email protected]> On Behalf Of Ferruh Yigit > Sent: Thursday, November 4, 2021 7:04 PM > To: Thomas Monjalon <[email protected]>; Andrew Rybchenko > <[email protected]>; Stephen Hemminger > <[email protected]>; Matan Azrad <[email protected]> > Cc: Yigit, Ferruh <[email protected]>; [email protected]; [email protected]; > Matan Azrad <[email protected]> > 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: [email protected] > > Signed-off-by: Ferruh Yigit <[email protected]> > --- > Cc: Matan Azrad <[email protected]> > --- > 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 <[email protected]>

