staging: greybus: codecs: Fix reference counter leak in error handling
authorZhang Qilong <zhangqilong3@huawei.com>
Mon, 9 Nov 2020 13:13:46 +0000 (21:13 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 13 Nov 2020 14:34:07 +0000 (15:34 +0100)
gb_pm_runtime_get_sync has increased the usage counter of the device here.
Forgetting to call gb_pm_runtime_put_noidle will result in usage counter
leak in the error branch of (gbcodec_hw_params and gbcodec_prepare). We
fixed it by adding it.

Fixes: c388ae7696992 ("greybus: audio: Update pm runtime support in dai_ops callback")
Signed-off-by: Zhang Qilong <zhangqilong3@huawei.com>
Link: https://lore.kernel.org/r/20201109131347.1725288-2-zhangqilong3@huawei.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/greybus/audio_codec.c

index 17a39ed63769063c21ac1ce1bd7cef31ac7cb439..b589cf6b1d0348864e72f469d643991769ce27d6 100644 (file)
@@ -471,6 +471,7 @@ static int gbcodec_hw_params(struct snd_pcm_substream *substream,
        if (ret) {
                dev_err_ratelimited(dai->dev, "%d: Error during set_config\n",
                                    ret);
+               gb_pm_runtime_put_noidle(bundle);
                mutex_unlock(&codec->lock);
                return ret;
        }
@@ -545,6 +546,7 @@ static int gbcodec_prepare(struct snd_pcm_substream *substream,
                break;
        }
        if (ret) {
+               gb_pm_runtime_put_noidle(bundle);
                mutex_unlock(&codec->lock);
                dev_err_ratelimited(dai->dev, "set_data_size failed:%d\n", ret);
                return ret;