Blob Blame History Raw
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: