Commit 27ae2d1e authored by Roi Dayan's avatar Roi Dayan Committed by Roland Dreier

IB/iser: Fix possible memory leak in iser_create_frwr_pool()

Fix leak where desc is not being freed in error flows.
Signed-off-by: default avatarRoi Dayan <roid@mellanox.com>
Signed-off-by: default avatarSagi Grimberg <sagig@mellanox.com>
Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
parent 5587856c
...@@ -305,7 +305,7 @@ int iser_create_frwr_pool(struct iser_conn *ib_conn, unsigned cmds_max) ...@@ -305,7 +305,7 @@ int iser_create_frwr_pool(struct iser_conn *ib_conn, unsigned cmds_max)
if (IS_ERR(desc->data_frpl)) { if (IS_ERR(desc->data_frpl)) {
ret = PTR_ERR(desc->data_frpl); ret = PTR_ERR(desc->data_frpl);
iser_err("Failed to allocate ib_fast_reg_page_list err=%d\n", ret); iser_err("Failed to allocate ib_fast_reg_page_list err=%d\n", ret);
goto err; goto fast_reg_page_failure;
} }
desc->data_mr = ib_alloc_fast_reg_mr(device->pd, desc->data_mr = ib_alloc_fast_reg_mr(device->pd,
...@@ -313,8 +313,7 @@ int iser_create_frwr_pool(struct iser_conn *ib_conn, unsigned cmds_max) ...@@ -313,8 +313,7 @@ int iser_create_frwr_pool(struct iser_conn *ib_conn, unsigned cmds_max)
if (IS_ERR(desc->data_mr)) { if (IS_ERR(desc->data_mr)) {
ret = PTR_ERR(desc->data_mr); ret = PTR_ERR(desc->data_mr);
iser_err("Failed to allocate ib_fast_reg_mr err=%d\n", ret); iser_err("Failed to allocate ib_fast_reg_mr err=%d\n", ret);
ib_free_fast_reg_page_list(desc->data_frpl); goto fast_reg_mr_failure;
goto err;
} }
desc->valid = true; desc->valid = true;
list_add_tail(&desc->list, &ib_conn->fastreg.frwr.pool); list_add_tail(&desc->list, &ib_conn->fastreg.frwr.pool);
...@@ -322,6 +321,11 @@ int iser_create_frwr_pool(struct iser_conn *ib_conn, unsigned cmds_max) ...@@ -322,6 +321,11 @@ int iser_create_frwr_pool(struct iser_conn *ib_conn, unsigned cmds_max)
} }
return 0; return 0;
fast_reg_mr_failure:
ib_free_fast_reg_page_list(desc->data_frpl);
fast_reg_page_failure:
kfree(desc);
err: err:
iser_free_frwr_pool(ib_conn); iser_free_frwr_pool(ib_conn);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment