aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorSuresh Reddy <suresh.reddy@emulex.com>2013-04-24 20:56:55 -0400
committerDavid S. Miller <davem@davemloft.net>2013-04-29 12:33:47 -0400
commitd98ef50fd99585e43b77b5ac5943e4450031a18e (patch)
tree2da7ec06016adb12a23d60da82c395c91c7198b1 /drivers/net/ethernet
parent2c1bbbffa0b644fab4f91878cde0c2e8f52e2dcc (diff)
be2net: Fixed memory leak
Signed-off-by: Suresh Reddy <suresh.reddy@emulex.com> Signed-off-by: Sarveshwar Bandi <sarveshwar.bandi@emulex.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/emulex/benet/be_cmds.c38
1 files changed, 22 insertions, 16 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c
index ce5af9b3b704..24c80d1d70ba 100644
--- a/drivers/net/ethernet/emulex/benet/be_cmds.c
+++ b/drivers/net/ethernet/emulex/benet/be_cmds.c
@@ -2493,6 +2493,9 @@ int be_cmd_get_cntl_attributes(struct be_adapter *adapter)
2493 struct mgmt_controller_attrib *attribs; 2493 struct mgmt_controller_attrib *attribs;
2494 struct be_dma_mem attribs_cmd; 2494 struct be_dma_mem attribs_cmd;
2495 2495
2496 if (mutex_lock_interruptible(&adapter->mbox_lock))
2497 return -1;
2498
2496 memset(&attribs_cmd, 0, sizeof(struct be_dma_mem)); 2499 memset(&attribs_cmd, 0, sizeof(struct be_dma_mem));
2497 attribs_cmd.size = sizeof(struct be_cmd_resp_cntl_attribs); 2500 attribs_cmd.size = sizeof(struct be_cmd_resp_cntl_attribs);
2498 attribs_cmd.va = pci_alloc_consistent(adapter->pdev, attribs_cmd.size, 2501 attribs_cmd.va = pci_alloc_consistent(adapter->pdev, attribs_cmd.size,
@@ -2500,12 +2503,10 @@ int be_cmd_get_cntl_attributes(struct be_adapter *adapter)
2500 if (!attribs_cmd.va) { 2503 if (!attribs_cmd.va) {
2501 dev_err(&adapter->pdev->dev, 2504 dev_err(&adapter->pdev->dev,
2502 "Memory allocation failure\n"); 2505 "Memory allocation failure\n");
2503 return -ENOMEM; 2506 status = -ENOMEM;
2507 goto err;
2504 } 2508 }
2505 2509
2506 if (mutex_lock_interruptible(&adapter->mbox_lock))
2507 return -1;
2508
2509 wrb = wrb_from_mbox(adapter); 2510 wrb = wrb_from_mbox(adapter);
2510 if (!wrb) { 2511 if (!wrb) {
2511 status = -EBUSY; 2512 status = -EBUSY;
@@ -2525,8 +2526,9 @@ int be_cmd_get_cntl_attributes(struct be_adapter *adapter)
2525 2526
2526err: 2527err:
2527 mutex_unlock(&adapter->mbox_lock); 2528 mutex_unlock(&adapter->mbox_lock);
2528 pci_free_consistent(adapter->pdev, attribs_cmd.size, attribs_cmd.va, 2529 if (attribs_cmd.va)
2529 attribs_cmd.dma); 2530 pci_free_consistent(adapter->pdev, attribs_cmd.size,
2531 attribs_cmd.va, attribs_cmd.dma);
2530 return status; 2532 return status;
2531} 2533}
2532 2534
@@ -2826,6 +2828,9 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
2826 CMD_SUBSYSTEM_ETH)) 2828 CMD_SUBSYSTEM_ETH))
2827 return -EPERM; 2829 return -EPERM;
2828 2830
2831 if (mutex_lock_interruptible(&adapter->mbox_lock))
2832 return -1;
2833
2829 memset(&cmd, 0, sizeof(struct be_dma_mem)); 2834 memset(&cmd, 0, sizeof(struct be_dma_mem));
2830 cmd.size = sizeof(struct be_cmd_resp_acpi_wol_magic_config_v1); 2835 cmd.size = sizeof(struct be_cmd_resp_acpi_wol_magic_config_v1);
2831 cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, 2836 cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size,
@@ -2833,12 +2838,10 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
2833 if (!cmd.va) { 2838 if (!cmd.va) {
2834 dev_err(&adapter->pdev->dev, 2839 dev_err(&adapter->pdev->dev,
2835 "Memory allocation failure\n"); 2840 "Memory allocation failure\n");
2836 return -ENOMEM; 2841 status = -ENOMEM;
2842 goto err;
2837 } 2843 }
2838 2844
2839 if (mutex_lock_interruptible(&adapter->mbox_lock))
2840 return -1;
2841
2842 wrb = wrb_from_mbox(adapter); 2845 wrb = wrb_from_mbox(adapter);
2843 if (!wrb) { 2846 if (!wrb) {
2844 status = -EBUSY; 2847 status = -EBUSY;
@@ -2869,7 +2872,8 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter)
2869 } 2872 }
2870err: 2873err:
2871 mutex_unlock(&adapter->mbox_lock); 2874 mutex_unlock(&adapter->mbox_lock);
2872 pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); 2875 if (cmd.va)
2876 pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma);
2873 return status; 2877 return status;
2874 2878
2875} 2879}
@@ -3001,16 +3005,18 @@ int be_cmd_get_func_config(struct be_adapter *adapter)
3001 int status; 3005 int status;
3002 struct be_dma_mem cmd; 3006 struct be_dma_mem cmd;
3003 3007
3008 if (mutex_lock_interruptible(&adapter->mbox_lock))
3009 return -1;
3010
3004 memset(&cmd, 0, sizeof(struct be_dma_mem)); 3011 memset(&cmd, 0, sizeof(struct be_dma_mem));
3005 cmd.size = sizeof(struct be_cmd_resp_get_func_config); 3012 cmd.size = sizeof(struct be_cmd_resp_get_func_config);
3006 cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, 3013 cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size,
3007 &cmd.dma); 3014 &cmd.dma);
3008 if (!cmd.va) { 3015 if (!cmd.va) {
3009 dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); 3016 dev_err(&adapter->pdev->dev, "Memory alloc failure\n");
3010 return -ENOMEM; 3017 status = -ENOMEM;
3018 goto err;
3011 } 3019 }
3012 if (mutex_lock_interruptible(&adapter->mbox_lock))
3013 return -1;
3014 3020
3015 wrb = wrb_from_mbox(adapter); 3021 wrb = wrb_from_mbox(adapter);
3016 if (!wrb) { 3022 if (!wrb) {
@@ -3050,8 +3056,8 @@ int be_cmd_get_func_config(struct be_adapter *adapter)
3050 } 3056 }
3051err: 3057err:
3052 mutex_unlock(&adapter->mbox_lock); 3058 mutex_unlock(&adapter->mbox_lock);
3053 pci_free_consistent(adapter->pdev, cmd.size, 3059 if (cmd.va)
3054 cmd.va, cmd.dma); 3060 pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma);
3055 return status; 3061 return status;
3056} 3062}
3057 3063