Unverified Commit 1c348902 authored by Liliang Ye's avatar Liliang Ye Committed by Mark Brown
Browse files

ASoC: fsl_mqs: move of_node_put() to the correct location



of_node_put() should have been done directly after
mqs_priv->regmap = syscon_node_to_regmap(gpr_np);
otherwise it creates a reference leak on the success path.

To fix this, of_node_put() is moved to the correct location, and change
all the gotos to direct returns.

Fixes: a9d27367 ("ASoC: fsl_mqs: Fix error handling in probe")
Signed-off-by: default avatarLiliang Ye <yll@hust.edu.cn>
Reviewed-by: default avatarDan Carpenter <error27@gmail.com>
Link: https://lore.kernel.org/r/20230403152647.17638-1-yll@hust.edu.cn


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 97c236e2
Loading
Loading
Loading
Loading
+5 −10
Original line number Diff line number Diff line
@@ -210,10 +210,10 @@ static int fsl_mqs_probe(struct platform_device *pdev)
		}

		mqs_priv->regmap = syscon_node_to_regmap(gpr_np);
		of_node_put(gpr_np);
		if (IS_ERR(mqs_priv->regmap)) {
			dev_err(&pdev->dev, "failed to get gpr regmap\n");
			ret = PTR_ERR(mqs_priv->regmap);
			goto err_free_gpr_np;
			return PTR_ERR(mqs_priv->regmap);
		}
	} else {
		regs = devm_platform_ioremap_resource(pdev, 0);
@@ -242,8 +242,7 @@ static int fsl_mqs_probe(struct platform_device *pdev)
	if (IS_ERR(mqs_priv->mclk)) {
		dev_err(&pdev->dev, "failed to get the clock: %ld\n",
			PTR_ERR(mqs_priv->mclk));
		ret = PTR_ERR(mqs_priv->mclk);
		goto err_free_gpr_np;
		return PTR_ERR(mqs_priv->mclk);
	}

	dev_set_drvdata(&pdev->dev, mqs_priv);
@@ -252,13 +251,9 @@ static int fsl_mqs_probe(struct platform_device *pdev)
	ret = devm_snd_soc_register_component(&pdev->dev, &soc_codec_fsl_mqs,
			&fsl_mqs_dai, 1);
	if (ret)
		goto err_free_gpr_np;
	return 0;

err_free_gpr_np:
	of_node_put(gpr_np);

		return ret;

	return 0;
}

static void fsl_mqs_remove(struct platform_device *pdev)