瀏覽代碼

iw_cxgb4: Fix an error handling path in 'c4iw_get_dma_mr()'

The error handling path of 'c4iw_get_dma_mr()' does not free resources
in the correct order.
If an error occures, it can leak 'mhp->wr_waitp'.

Fixes: a3f12da0e99a ("iw_cxgb4: allocate wait object for each memory object")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Christophe Jaillet 7 年之前
父節點
當前提交
3d69191086
共有 1 個文件被更改,包括 2 次插入2 次删除
  1. 2 2
      drivers/infiniband/hw/cxgb4/mem.c

+ 2 - 2
drivers/infiniband/hw/cxgb4/mem.c

@@ -489,10 +489,10 @@ struct ib_mr *c4iw_get_dma_mr(struct ib_pd *pd, int acc)
 err_dereg_mem:
 err_dereg_mem:
 	dereg_mem(&rhp->rdev, mhp->attr.stag, mhp->attr.pbl_size,
 	dereg_mem(&rhp->rdev, mhp->attr.stag, mhp->attr.pbl_size,
 		  mhp->attr.pbl_addr, mhp->dereg_skb, mhp->wr_waitp);
 		  mhp->attr.pbl_addr, mhp->dereg_skb, mhp->wr_waitp);
-err_free_wr_wait:
-	c4iw_put_wr_wait(mhp->wr_waitp);
 err_free_skb:
 err_free_skb:
 	kfree_skb(mhp->dereg_skb);
 	kfree_skb(mhp->dereg_skb);
+err_free_wr_wait:
+	c4iw_put_wr_wait(mhp->wr_waitp);
 err_free_mhp:
 err_free_mhp:
 	kfree(mhp);
 	kfree(mhp);
 	return ERR_PTR(ret);
 	return ERR_PTR(ret);