[alsa-devel] [PATCH] ASoC: hdac_hda: Fix unbalanced bus link refcount at probe error

Takashi Iwai tiwai at suse.de
Fri May 31 16:38:20 CEST 2019


The error paths in hdac_hda_codec_probe() don't take care of the bus
link refcount properly, which leave the refcount still high.
This patch addresses them.

Fixes: 6bae5ea94989 ("ASoC: hdac_hda: add asoc extension for legacy HDA codec drivers")
Signed-off-by: Takashi Iwai <tiwai at suse.de>
---

A bug I found while digging for another problem :)

 sound/soc/codecs/hdac_hda.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/sound/soc/codecs/hdac_hda.c b/sound/soc/codecs/hdac_hda.c
index 7d4940256914..b55deaeb1ebf 100644
--- a/sound/soc/codecs/hdac_hda.c
+++ b/sound/soc/codecs/hdac_hda.c
@@ -475,8 +475,10 @@ static int hdac_hda_dev_probe(struct hdac_device *hdev)
 	snd_hdac_ext_bus_link_get(hdev->bus, hlink);
 
 	hda_pvt = hdac_to_hda_priv(hdev);
-	if (!hda_pvt)
-		return -ENOMEM;
+	if (!hda_pvt) {
+		ret = -ENOMEM;
+		goto error;
+	}
 
 	/* ASoC specific initialization */
 	ret = devm_snd_soc_register_component(&hdev->dev,
@@ -484,12 +486,13 @@ static int hdac_hda_dev_probe(struct hdac_device *hdev)
 					 ARRAY_SIZE(hdac_hda_dais));
 	if (ret < 0) {
 		dev_err(&hdev->dev, "failed to register HDA codec %d\n", ret);
-		return ret;
+		goto error;
 	}
 
 	dev_set_drvdata(&hdev->dev, hda_pvt);
-	snd_hdac_ext_bus_link_put(hdev->bus, hlink);
 
+ error:
+	snd_hdac_ext_bus_link_put(hdev->bus, hlink);
 	return ret;
 }
 
-- 
2.16.4



More information about the Alsa-devel mailing list