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

Ozan Çağlayan ozan at pardus.org.tr
Fri Aug 7 12:36:46 CEST 2009


Takashi Iwai wrote On 07-08-2009 12:56:
> At Fri, 7 Aug 2009 10:43:07 +0100,
> James Courtier-Dutton wrote:
>   
>> 2009/8/7 Ozan Çağlayan <ozan at pardus.org.tr>:
>>     
>>> Added the following lines:
>>>
>>> printk(KERN_INFO "0x%p\n", jack);
>>> printk(KERN_INFO "0x%p\n", jack->jack);
>>> printk(KERN_INFO "0x%p\n", jack->jack->private_data);
>>>
>>> dmesg:
>>>
>>> NVRM: loading NVIDIA UNIX x86 Kernel Module  180.51  Thu Apr 16 19:02:15
>>> PDT 2009
>>> ACPI: PCI Interrupt 0000:00:1b.0[A] -> GSI 22 (level, low) -> IRQ 22
>>> PCI: Setting latency timer of device 0000:00:1b.0 to 64
>>> 0xf777a614
>>> 0x00000000
>>> BUG: unable to handle kernel NULL pointer dereference at 00000074
>>> IP: [<f93f2d97>] :snd_hda_codec_conexant:conexant_add_jack+0x57/0x81
>>> *pde = 00000000·
>>> Oops: 0000 [#1] SMP
>>>
>>>       
>> Need more of the dmesg output.
>> I.e. to see which print statements succeeded.
>> Alternatively, attach the snd_hda.ko so one can see where in that file
>> offset 0x57 is.
>> But a more useful print would be:
>> if (!jack) printk(KERN_INFO "jack null\n");
>> else if (!(jack->jack)) printk(KERN_INFO "jack->jack null\n");
>> else if (!(jack->jack->private_data)) printk(KERN_INFO
>> "jack->jack->private_data null\n");
>>     
>
> Well, it's fairly obvious that jack->jack is NULL as the second
> output is NULL, and the third one hits Oops.
>
> Ozan, could you check whether CONFIG_SND_JACK is set in
> stac92xx_add_jack, e.g. like below?
>
>   
Nope it seems that it's not set as the #error pragma is executed. I
looked into the configure script and found the following:

  if alsa_check_kconfig_option "hda-input-jack"; then
    if ( test "$CONFIG_SND_PCI" = "y" -o "$CONFIG_SND_PCI" = "m" ) &&
      ( test "$CONFIG_SND_HDA_INTEL" = "y" -o "$CONFIG_SND_HDA_INTEL" =
"m" ) &&
      ( test "$CONFIG_INPUT" = "y" -o "$CONFIG_INPUT" = "m" ); then
      test "$kversion.$kpatchlevel" = "2.6" -a $ksublevel -ge 27 &&
CONFIG_SND_JACK="y"
      CONFIG_SND_HDA_INPUT_JACK="y"
  fi

SND_JACK is set if sublevel >= 27 but SND_HDA_INPUT_JACK is set
regardless of anything. Why the lower limit is 27 for that functionality?





More information about the Alsa-devel mailing list