From b4c77848600906055c66dd32074d23858e6e200d Mon Sep 17 00:00:00 2001 From: Alexander Beregalov Date: Sun, 13 Mar 2011 21:58:48 +0300 Subject: [PATCH] staging: crystalhd: fix memory leaks Free resources before exit. Signed-off-by: Alexander Beregalov Signed-off-by: Greg Kroah-Hartman --- drivers/staging/crystalhd/crystalhd_hw.c | 1 + drivers/staging/crystalhd/crystalhd_lnx.c | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/staging/crystalhd/crystalhd_hw.c b/drivers/staging/crystalhd/crystalhd_hw.c index 153ddbf4247d..13a514dd0f79 100644 --- a/drivers/staging/crystalhd/crystalhd_hw.c +++ b/drivers/staging/crystalhd/crystalhd_hw.c @@ -1965,6 +1965,7 @@ enum BC_STATUS crystalhd_hw_setup_dma_rings(struct crystalhd_hw *hw) } else { BCMLOG_ERR("Insufficient Memory For RX\n"); crystalhd_hw_free_dma_rings(hw); + kfree(rpkt); return BC_STS_INSUFF_RES; } rpkt->desc_mem.pdma_desc_start = mem; diff --git a/drivers/staging/crystalhd/crystalhd_lnx.c b/drivers/staging/crystalhd/crystalhd_lnx.c index c1ee24c98315..7e0c199f6893 100644 --- a/drivers/staging/crystalhd/crystalhd_lnx.c +++ b/drivers/staging/crystalhd/crystalhd_lnx.c @@ -559,7 +559,7 @@ static int __devinit chd_dec_pci_probe(struct pci_dev *pdev, rc = pci_enable_device(pdev); if (rc) { BCMLOG_ERR("Failed to enable PCI device\n"); - return rc; + goto err; } snprintf(pinfo->name, sizeof(pinfo->name), "crystalhd_pci_e:%d:%d:%d", @@ -570,7 +570,8 @@ static int __devinit chd_dec_pci_probe(struct pci_dev *pdev, if (rc) { BCMLOG_ERR("Failed to setup memory regions.\n"); pci_disable_device(pdev); - return -ENOMEM; + rc = -ENOMEM; + goto err; } pinfo->present = 1; @@ -585,7 +586,8 @@ static int __devinit chd_dec_pci_probe(struct pci_dev *pdev, if (rc) { BCMLOG_ERR("_enable_int err:%d\n", rc); pci_disable_device(pdev); - return -ENODEV; + rc = -ENODEV; + goto err; } /* Set dma mask... */ @@ -598,14 +600,16 @@ static int __devinit chd_dec_pci_probe(struct pci_dev *pdev, } else { BCMLOG_ERR("Unabled to setup DMA %d\n", rc); pci_disable_device(pdev); - return -ENODEV; + rc = -ENODEV; + goto err; } sts = crystalhd_setup_cmd_context(&pinfo->cmds, pinfo); if (sts != BC_STS_SUCCESS) { BCMLOG_ERR("cmd setup :%d\n", sts); pci_disable_device(pdev); - return -ENODEV; + rc = -ENODEV; + goto err; } pci_set_master(pdev); @@ -615,6 +619,10 @@ static int __devinit chd_dec_pci_probe(struct pci_dev *pdev, g_adp_info = pinfo; return 0; + +err: + kfree(pinfo); + return rc; } #ifdef CONFIG_PM -- GitLab