[ALSA] Fix NULL dereference with null modelname
authorTakashi Iwai <tiwai@suse.de>
Wed, 7 Mar 2007 14:55:59 +0000 (15:55 +0100)
committerJaroslav Kysela <perex@suse.cz>
Fri, 11 May 2007 14:55:44 +0000 (16:55 +0200)
Fix the NULL dereference of modelname option.  The check is moved to
find_codec_preset() now, too.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/pci/hda/hda_codec.c

index 4c0a6a5b20d986bb4b832b2158e9209c247fdb97..e768187465e3074fd6655c82e0252675f236e383 100644 (file)
@@ -403,6 +403,9 @@ static const struct hda_codec_preset *find_codec_preset(struct hda_codec *codec)
 {
        const struct hda_codec_preset **tbl, *preset;
 
+       if (codec->bus->modelname && !strcmp(codec->bus->modelname, "generic"))
+               return NULL; /* use the generic parser */
+
        for (tbl = hda_preset_tables; *tbl; tbl++) {
                for (preset = *tbl; preset->id; preset++) {
                        u32 mask = preset->mask;
@@ -573,8 +576,7 @@ int snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
                                                         0);
        }
 
-       if (strcmp(codec->bus->modelname, "generic"))
-               codec->preset = find_codec_preset(codec);
+       codec->preset = find_codec_preset(codec);
        if (! *bus->card->mixername)
                snd_hda_get_codec_name(codec, bus->card->mixername,
                                       sizeof(bus->card->mixername));