]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
drivers/iommu/msm_iommu_dev.c: fix leak and clean up error paths
authorLibo Chen <clbchenlibo.chen@huawei.com>
Wed, 19 Jun 2013 00:05:31 +0000 (10:05 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Wed, 19 Jun 2013 07:12:44 +0000 (17:12 +1000)
Fix two obvious problems:

1. We have registered msm_iommu_driver first, and need unregister it
   when registered msm_iommu_ctx_driver fail

2. We don`t need to kfree drvdata before kzalloc successful.

Signed-off-by: Libo Chen <libo.chen@huawei.com>
Acked-by: David Brown <davidb@codeaurora.org>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: James Hogan <james.hogan@imgtec.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
drivers/iommu/msm_iommu_dev.c

index 9144a6beed922a70c995c09099f822f02baddca2..63cdeb903d5c00a22e5fe0d4ac056257438d1985 100644 (file)
@@ -294,22 +294,20 @@ static int msm_iommu_ctx_probe(struct platform_device *pdev)
        struct msm_iommu_ctx_drvdata *ctx_drvdata = NULL;
        int i, ret;
        if (!c || !pdev->dev.parent) {
-               ret = -EINVAL;
-               goto fail;
+               return -EINVAL;
        }
 
        drvdata = dev_get_drvdata(pdev->dev.parent);
 
        if (!drvdata) {
-               ret = -ENODEV;
-               goto fail;
+               return -ENODEV;
        }
 
        ctx_drvdata = kzalloc(sizeof(*ctx_drvdata), GFP_KERNEL);
        if (!ctx_drvdata) {
-               ret = -ENOMEM;
-               goto fail;
+               return -ENOMEM;
        }
+
        ctx_drvdata->num = c->num;
        ctx_drvdata->pdev = pdev;
 
@@ -403,6 +401,7 @@ static int __init msm_iommu_driver_init(void)
 
        ret = platform_driver_register(&msm_iommu_ctx_driver);
        if (ret != 0) {
+               platform_driver_unregister(&msm_iommu_driver);
                pr_err("Failed to register IOMMU context driver\n");
                goto error;
        }