aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2007-03-07 09:55:59 -0500
committerJaroslav Kysela <perex@suse.cz>2007-05-11 10:55:44 -0400
commitd5ad630b6dd00ea41e0c58b45c0912f72757b5cd (patch)
treef33496e199036feb82bbe23d7407e417ac8e1063
parent6d7b1d7d09e00034325b09a3a7ac7b0ea5e29506 (diff)
[ALSA] Fix NULL dereference with null modelname
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>
-rw-r--r--sound/pci/hda/hda_codec.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 4c0a6a5b20d9..e768187465e3 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -403,6 +403,9 @@ static const struct hda_codec_preset *find_codec_preset(struct hda_codec *codec)
403{ 403{
404 const struct hda_codec_preset **tbl, *preset; 404 const struct hda_codec_preset **tbl, *preset;
405 405
406 if (codec->bus->modelname && !strcmp(codec->bus->modelname, "generic"))
407 return NULL; /* use the generic parser */
408
406 for (tbl = hda_preset_tables; *tbl; tbl++) { 409 for (tbl = hda_preset_tables; *tbl; tbl++) {
407 for (preset = *tbl; preset->id; preset++) { 410 for (preset = *tbl; preset->id; preset++) {
408 u32 mask = preset->mask; 411 u32 mask = preset->mask;
@@ -573,8 +576,7 @@ int snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
573 0); 576 0);
574 } 577 }
575 578
576 if (strcmp(codec->bus->modelname, "generic")) 579 codec->preset = find_codec_preset(codec);
577 codec->preset = find_codec_preset(codec);
578 if (! *bus->card->mixername) 580 if (! *bus->card->mixername)
579 snd_hda_get_codec_name(codec, bus->card->mixername, 581 snd_hda_get_codec_name(codec, bus->card->mixername,
580 sizeof(bus->card->mixername)); 582 sizeof(bus->card->mixername));