[alsa-devel] [PATCH] ALSA: hda - check NULL pointer when creating SPDIF PCM switch

Takashi Iwai tiwai at suse.de
Thu Mar 7 09:16:35 CET 2013


At Thu,  7 Mar 2013 14:11:05 -0500,
mengdong.lin at intel.com wrote:
> 
> From: Mengdong Lin <mengdong.lin at intel.com>
> 
> If the new control cannot be created, this function will return to avoid
> snd_hda_ctl_add dereferencing a NULL control pointer.
> 
> Signed-off-by: Mengdong Lin <mengdong.lin at intel.com>

Applied.

Another option would be to change snd_hda_ctl_add() to check NULL by
itself like snd_ctl_add(), but here is the only place where missing
the NULL check, so I don't think it's worth to change more.


thanks,

Takashi
> 
> diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
> index 3dc6566..97c68dd 100644
> --- a/sound/pci/hda/hda_codec.c
> +++ b/sound/pci/hda/hda_codec.c
> @@ -3433,11 +3433,16 @@ static struct snd_kcontrol_new spdif_share_sw = {
>  int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
>  				  struct hda_multi_out *mout)
>  {
> +	struct snd_kcontrol *kctl;
> +
>  	if (!mout->dig_out_nid)
>  		return 0;
> +
> +	kctl = snd_ctl_new1(&spdif_share_sw, mout);
> +	if (!kctl)
> +		return -ENOMEM;
>  	/* ATTENTION: here mout is passed as private_data, instead of codec */
> -	return snd_hda_ctl_add(codec, mout->dig_out_nid,
> -			      snd_ctl_new1(&spdif_share_sw, mout));
> +	return snd_hda_ctl_add(codec, mout->dig_out_nid, kctl);
>  }
>  EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
>  
> -- 
> 1.7.10.4
> 


More information about the Alsa-devel mailing list