提交 b4c77848 编写于 作者: A Alexander Beregalov 提交者: Greg Kroah-Hartman

staging: crystalhd: fix memory leaks

Free resources before exit.
Signed-off-by: NAlexander Beregalov <a.beregalov@gmail.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 819d4eb1
......@@ -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;
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册