From: Parav Pandit <parav@mellanox.com>
Date: Wed, 17 Oct 2018 13:19:27 +0300
Subject: RDMA/core: Fix unwinding flow in case of error to register device
Patch-mainline: v4.20-rc1
Git-commit: 67fecaf8e9cc28812042f61194ac0e0a9737f897
References: bsc#1103992 FATE#326009
If port pkey list initialization fails, free the port_immutable memory
during cleanup path. Currently it is missed out.
If cache setup fails, free the pkey list during cleanup path.
Fixes: d291f1a65 ("IB/core: Enforce PKey security on QPs")
Signed-off-by: Parav Pandit <parav@mellanox.com>
Reviewed-by: Daniel Jurgens <danielj@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
---
drivers/infiniband/core/device.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
--- a/drivers/infiniband/core/device.c
+++ b/drivers/infiniband/core/device.c
@@ -545,14 +545,14 @@ int ib_register_device(struct ib_device
ret = setup_port_pkey_list(device);
if (ret) {
dev_warn(&device->dev, "Couldn't create per port_pkey_list\n");
- goto out;
+ goto port_cleanup;
}
ret = ib_cache_setup_one(device);
if (ret) {
dev_warn(&device->dev,
"Couldn't set up InfiniBand P_Key/GID cache\n");
- goto port_cleanup;
+ goto pkey_cleanup;
}
device->index = __dev_new_index();
@@ -596,6 +596,8 @@ cg_cleanup:
cache_cleanup:
ib_cache_cleanup_one(device);
ib_cache_release_one(device);
+pkey_cleanup:
+ kfree(device->port_pkey_list);
port_cleanup:
kfree(device->port_immutable);
out: