A panic could occur when calling ib_device_release() and port_data isn't initialized, To avoid that a check was added to verify that port_data isn't NULL. Signed-off-by: Kamal Heib <kamalheib1@xxxxxxxxx> --- drivers/infiniband/core/cache.c | 3 +++ drivers/infiniband/core/device.c | 3 +++ drivers/infiniband/core/security.c | 3 +++ 3 files changed, 9 insertions(+) diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c index 18e476b3ced0..87801e3848a8 100644 --- a/drivers/infiniband/core/cache.c +++ b/drivers/infiniband/core/cache.c @@ -1520,6 +1520,9 @@ void ib_cache_release_one(struct ib_device *device) { unsigned int p; + if (!device->port_data) + return; + /* * The release function frees all the cache elements. * This function should be called as part of freeing diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c index 78dc07c6ac4b..3a497e57f673 100644 --- a/drivers/infiniband/core/device.c +++ b/drivers/infiniband/core/device.c @@ -1935,6 +1935,9 @@ static void free_netdevs(struct ib_device *ib_dev) unsigned long flags; unsigned int port; + if (!ib_dev->port_data) + return; + rdma_for_each_port (ib_dev, port) { struct ib_port_data *pdata = &ib_dev->port_data[port]; struct net_device *ndev; diff --git a/drivers/infiniband/core/security.c b/drivers/infiniband/core/security.c index 1ab423b19f77..fba7bd5d4a2e 100644 --- a/drivers/infiniband/core/security.c +++ b/drivers/infiniband/core/security.c @@ -564,6 +564,9 @@ void ib_security_release_port_pkey_list(struct ib_device *device) struct pkey_index_qp_list *pkey, *tmp_pkey; unsigned int i; + if (!device->port_data) + return; + rdma_for_each_port (device, i) { list_for_each_entry_safe(pkey, tmp_pkey, -- 2.20.1