ALSA: hda - check NULL pointer when creating SPDIF PCM switch
authorMengdong Lin <mengdong.lin@intel.com>
Thu, 7 Mar 2013 19:11:05 +0000 (14:11 -0500)
committerTakashi Iwai <tiwai@suse.de>
Thu, 7 Mar 2013 08:14:03 +0000 (09:14 +0100)
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>
sound/pci/hda/hda_codec.c

index 3dc656688c08d3637b6b8e802c0b2334e306b811..97c68dd24ef5dfed33d340730371e4a40e34347d 100644 (file)
@@ -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);