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@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; }