[PATCH] ALSA: hda: release resource when snd_hdac_device_init is failed

Takashi Iwai tiwai at suse.de
Wed Sep 2 19:30:40 CEST 2020


On Wed, 02 Sep 2020 17:42:29 +0200,
Kai Vehmanen wrote:
> 
> From: Rander Wang <rander.wang at intel.com>
> 
> When snd_hdac_device_init is failed, the codec is released by kfree
> immediately without releasing some resources. The vendor_name should
> be free if the memory is allocated and the runtime pm status should
> be restored, especially the runtime pm status of parent device.

It's released via put_device() and this should call the release
callback, default_release(), and it contains all those kfree()'s and
pm_runtime_*().

Could you double-check whether it's really missing?


thanks,

Takashi

> 
> Signed-off-by: Rander Wang <rander.wang at intel.com>
> Reviewed-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>
> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
> Reviewed-by: Bard Liao <yung-chuan.liao at linux.intel.com>
> Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski at linux.intel.com>
> Signed-off-by: Kai Vehmanen <kai.vehmanen at linux.intel.com>
> ---
>  sound/hda/hdac_device.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/hda/hdac_device.c b/sound/hda/hdac_device.c
> index 3e9e9ac804f6..8d9d37225701 100644
> --- a/sound/hda/hdac_device.c
> +++ b/sound/hda/hdac_device.c
> @@ -109,12 +109,16 @@ int snd_hdac_device_init(struct hdac_device *codec, struct hdac_bus *bus,
>  				     codec->vendor_id & 0xffff);
>  	if (!codec->chip_name) {
>  		err = -ENOMEM;
> -		goto error;
> +		goto error_chip;
>  	}
>  
>  	return 0;
>  
> + error_chip:
> +	kfree(codec->vendor_name);
>   error:
> +	pm_runtime_put_noidle(&codec->dev);
> +	pm_runtime_set_suspended(&codec->dev);
>  	put_device(&codec->dev);
>  	return err;
>  }
> -- 
> 2.27.0
> 


More information about the Alsa-devel mailing list