RDMA/core: Fix unwinding flow in case of error to register device
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>
This commit is contained in:
Родитель
56e027a604
Коммит
67fecaf8e9
|
@ -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 @@ 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:
|
||||
|
|
Загрузка…
Ссылка в новой задаче