'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(&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

Reply via email to