]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
RDMA/core: Fix unwinding flow in case of error to register device
authorParav Pandit <parav@mellanox.com>
Wed, 17 Oct 2018 10:19:27 +0000 (13:19 +0300)
committerDoug Ledford <dledford@redhat.com>
Wed, 17 Oct 2018 15:43:07 +0000 (11:43 -0400)
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>
drivers/infiniband/core/device.c

index 5e70f5e1cfd983d309cc281ac94fe4b815de45cd..d175b94ae95272a54956ef2a290603d131243f2c 100644 (file)
@@ -545,14 +545,14 @@ int ib_register_device(struct ib_device *device, const char *name,
        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 @@ int ib_register_device(struct ib_device *device, const char *name,
 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: