[PATCH] ASoC: fsl: imx-card: fix DT node reference leak on unbind

Mark Brown broonie at kernel.org
Sat Nov 7 07:42:12 PST 2026


> imx_card_parse_of() takes references on the CPU and codec device nodes
> with snd_soc_of_get_dlc() and snd_soc_of_get_dai_link_codecs() and
> stores them in the link's component arrays. The driver has no remove
> callback and the ASoC core does not drop these references when the card
> is unregistered, so unbinding the platform device or unloading the
> module leaks one device node reference per CPU and codec.

> +static void imx_card_remove(struct platform_device *pdev)
> +{
> +	struct snd_soc_card *card = dev_get_drvdata(&pdev->dev);
> +	struct snd_soc_dai_link *link;
> +	int i;
> +
> +	for_each_card_prelinks(card, i, link) {
> +		snd_soc_of_put_dai_link_cpus(link);
> +		snd_soc_of_put_dai_link_codecs(link);
> +	}
> +}
> +
>  static const struct of_device_id imx_card_dt_ids[] = {
>  	{ .compatible = "fsl,imx-audio-card", },
>  	{ },
> @@ -940,6 +952,7 @@ static struct platform_driver imx_card_driver = {
>  		.of_match_table = imx_card_dt_ids,
>  	},
>  	.probe = imx_card_probe,
> +	.remove = imx_card_remove,
>  };

This only runs on remove so we've got the same issue if anything goes
wrong during probe (eg, deferral).

-- 
Mark Brown <broonie at kernel.org>



More information about the linux-arm-kernel mailing list