aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/hda_codec.c
diff options
context:
space:
mode:
authorMengdong Lin <mengdong.lin@intel.com>2013-03-07 14:11:05 -0500
committerTakashi Iwai <tiwai@suse.de>2013-03-07 03:14:03 -0500
commit4c7a548a70a44269266858f65c3b5fc9c3ace057 (patch)
tree826810f4e37ffe5a315345842a399ad1135b36d6 /sound/pci/hda/hda_codec.c
parent25336e8ae2d2fa64c9c4cc2c9c28f641134c9fa9 (diff)
ALSA: hda - check NULL pointer when creating SPDIF PCM switch
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@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/hda/hda_codec.c')
-rw-r--r--sound/pci/hda/hda_codec.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 3dc656688c08..97c68dd24ef5 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 = {
3433int snd_hda_create_spdif_share_sw(struct hda_codec *codec, 3433int snd_hda_create_spdif_share_sw(struct hda_codec *codec,
3434 struct hda_multi_out *mout) 3434 struct hda_multi_out *mout)
3435{ 3435{
3436 struct snd_kcontrol *kctl;
3437
3436 if (!mout->dig_out_nid) 3438 if (!mout->dig_out_nid)
3437 return 0; 3439 return 0;
3440
3441 kctl = snd_ctl_new1(&spdif_share_sw, mout);
3442 if (!kctl)
3443 return -ENOMEM;
3438 /* ATTENTION: here mout is passed as private_data, instead of codec */ 3444 /* ATTENTION: here mout is passed as private_data, instead of codec */
3439 return snd_hda_ctl_add(codec, mout->dig_out_nid, 3445 return snd_hda_ctl_add(codec, mout->dig_out_nid, kctl);
3440 snd_ctl_new1(&spdif_share_sw, mout));
3441} 3446}
3442EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw); 3447EXPORT_SYMBOL_HDA(snd_hda_create_spdif_share_sw);
3443 3448