Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Roi Dayan <roid@mellanox.com>
Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>

authored by

Roi Dayan and committed by
Roland Dreier
27ae2d1e 5587856c

+7 -3
+7 -3
drivers/infiniband/ulp/iser/iser_verbs.c
··· 305 305 if (IS_ERR(desc->data_frpl)) { 306 306 ret = PTR_ERR(desc->data_frpl); 307 307 iser_err("Failed to allocate ib_fast_reg_page_list err=%d\n", ret); 308 - goto err; 308 + goto fast_reg_page_failure; 309 309 } 310 310 311 311 desc->data_mr = ib_alloc_fast_reg_mr(device->pd, ··· 313 313 if (IS_ERR(desc->data_mr)) { 314 314 ret = PTR_ERR(desc->data_mr); 315 315 iser_err("Failed to allocate ib_fast_reg_mr err=%d\n", ret); 316 - ib_free_fast_reg_page_list(desc->data_frpl); 317 - goto err; 316 + goto fast_reg_mr_failure; 318 317 } 319 318 desc->valid = true; 320 319 list_add_tail(&desc->list, &ib_conn->fastreg.frwr.pool); ··· 321 322 } 322 323 323 324 return 0; 325 + 326 + fast_reg_mr_failure: 327 + ib_free_fast_reg_page_list(desc->data_frpl); 328 + fast_reg_page_failure: 329 + kfree(desc); 324 330 err: 325 331 iser_free_frwr_pool(ib_conn); 326 332 return ret;