[alsa-devel] [BUG] NULL pointer dereference in patch_sigmatel.c

Takashi Iwai tiwai at suse.de
Mon Aug 10 07:48:55 CEST 2009


At Mon, 10 Aug 2009 07:39:28 +0200,
I wrote:
> 
> At Mon, 10 Aug 2009 02:02:06 +0300,
> Ozan Çağlayan wrote:
> > 
> > Takashi Iwai wrote:
> > > At Sun, 09 Aug 2009 15:10:31 +0300,
> > >
> > >   
> > > Could you load the module with probe_only=1 option and give
> > > alsa-info.sh output (or at least codec#* proc file)?
> > >   
> > 
> > Ok, will provide that info too. BTW,
> > 
> > CPI: PCI Interrupt 0000:00:1b.0[A] -> GSI 21 (level, low) -> IRQ 21
> > PCI: Setting latency timer of device 0000:00:1b.0 to 64
> > ** codec:0xf5846800
> > ** spec->dmux_nids:0x00000000
> > BUG: unable to handle kernel NULL pointer dereference at 00000000
> > IP: [<f8c7b4d5>] :snd_hda_codec_idt:stac92xx_init+0x29b/0x520
> > *pde = 00000000 
> > Oops: 0000 [#1] SMP
> > 
> > 
> > spec->dmux_nids is NULL. Found the following commit:
> 
> Good catch.  How about the patch below?

Doh, sorry a totally broken patch.  The fixed one is below.

I could reproduce the bug with the emulator, and this patch fixes the
issue.  Updated sound GIT tree and snapshot now.


thanks,

Takashi

---
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index a75d6a0..a695558 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -3701,7 +3701,7 @@ static int set_mic_route(struct hda_codec *codec,
 		if (i < 0)
 			return -1;
 		mic->mux_idx = i;
-	}  else {
+	}  else if (spec->dmux_nids) {
 		/* digital pin */
 		mic->mux_idx = 0;
 		i = get_connection_index(codec, spec->dmux_nids[0], pin);
@@ -4404,7 +4404,8 @@ static int stac92xx_init(struct hda_codec *codec)
 	}
 	if (spec->auto_mic) {
 		/* initialize connection to analog input */
-		snd_hda_codec_write_cache(codec, spec->dmux_nids[0], 0,
+		if (spec->dmux_nids)
+			snd_hda_codec_write_cache(codec, spec->dmux_nids[0], 0,
 					  AC_VERB_SET_CONNECT_SEL, 0);
 		if (enable_pin_detect(codec, spec->ext_mic.pin, STAC_MIC_EVENT))
 			stac_issue_unsol_event(codec, spec->ext_mic.pin);


More information about the Alsa-devel mailing list