Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34e3a58c authored by Libo Chen's avatar Libo Chen Committed by Linus Torvalds
Browse files

drivers/iommu/msm_iommu_dev.c: fix leak and clean up error paths



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 was successful.

[akpm@linux-foundation.org: remove now-unneeded initialization of ctx_drvdata, remove unneeded braces]
Signed-off-by: default avatarLibo Chen <libo.chen@huawei.com>
Acked-by: default avatarDavid Brown <davidb@codeaurora.org>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: James Hogan <james.hogan@imgtec.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 9756b918
Loading
Loading
Loading
Loading
+10 −14
Original line number Diff line number Diff line
@@ -291,25 +291,20 @@ static int msm_iommu_ctx_probe(struct platform_device *pdev)
{
	struct msm_iommu_ctx_dev *c = pdev->dev.platform_data;
	struct msm_iommu_drvdata *drvdata;
	struct msm_iommu_ctx_drvdata *ctx_drvdata = NULL;
	struct msm_iommu_ctx_drvdata *ctx_drvdata;
	int i, ret;
	if (!c || !pdev->dev.parent) {
		ret = -EINVAL;
		goto fail;
	}

	drvdata = dev_get_drvdata(pdev->dev.parent);
	if (!c || !pdev->dev.parent)
		return -EINVAL;

	if (!drvdata) {
		ret = -ENODEV;
		goto fail;
	}
	drvdata = dev_get_drvdata(pdev->dev.parent);
	if (!drvdata)
		return -ENODEV;

	ctx_drvdata = kzalloc(sizeof(*ctx_drvdata), GFP_KERNEL);
	if (!ctx_drvdata) {
		ret = -ENOMEM;
		goto fail;
	}
	if (!ctx_drvdata)
		return -ENOMEM;

	ctx_drvdata->num = c->num;
	ctx_drvdata->pdev = pdev;

@@ -403,6 +398,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;
	}