qlcnic: fix memory leaks
authorAnirban Chakraborty <anirban.chakraborty@qlogic.com>
Mon, 17 May 2010 01:22:08 +0000 (01:22 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 18 May 2010 00:30:53 +0000 (17:30 -0700)
Fixes memory leak in error path when memory allocation
for adapter data structures fails.

Signed-off-by: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/qlcnic/qlcnic_ctx.c
drivers/net/qlcnic/qlcnic_init.c

index 0a6a39914aec7e351c581c1bc348495c14cbb464..c2c1f5cc16c6d992d9d00b3a2ab6b84569335874 100644 (file)
@@ -421,7 +421,8 @@ int qlcnic_alloc_hw_resources(struct qlcnic_adapter *adapter)
 
        if (addr == NULL) {
                dev_err(&pdev->dev, "failed to allocate tx desc ring\n");
-               return -ENOMEM;
+               err = -ENOMEM;
+               goto err_out_free;
        }
 
        tx_ring->desc_head = (struct cmd_desc_type0 *)addr;
index 77bfdaba83e8772666cb5c3a76caf21639a6715b..dccd8c3d65e5f0bd65335a51568bb918e1902b88 100644 (file)
@@ -210,7 +210,7 @@ int qlcnic_alloc_sw_resources(struct qlcnic_adapter *adapter)
        cmd_buf_arr = vmalloc(TX_BUFF_RINGSIZE(tx_ring));
        if (cmd_buf_arr == NULL) {
                dev_err(&netdev->dev, "failed to allocate cmd buffer ring\n");
-               return -ENOMEM;
+               goto err_out;
        }
        memset(cmd_buf_arr, 0, TX_BUFF_RINGSIZE(tx_ring));
        tx_ring->cmd_buf_arr = cmd_buf_arr;
@@ -221,7 +221,7 @@ int qlcnic_alloc_sw_resources(struct qlcnic_adapter *adapter)
        rds_ring = kzalloc(size, GFP_KERNEL);
        if (rds_ring == NULL) {
                dev_err(&netdev->dev, "failed to allocate rds ring struct\n");
-               return -ENOMEM;
+               goto err_out;
        }
        recv_ctx->rds_rings = rds_ring;