Search Linux Wireless

Re: Kernel oops when loading ath5k from compat-wireless in 2.6.27

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Nov 14, 2008 at 8:57 PM, Dan McGee <dpmcgee@xxxxxxxxx> wrote:
>
> BUG: unable to handle kernel NULL pointer dereference at 00000082
> IP: [<7818ca71>] sysfs_find_dirent+0x9/0x23
> Oops: 0000 [#1] PREEMPT
> Modules linked in: ath5k(+) mac80211
>
> Pid: 818 comm: modprobe Not tainted (2.6.27.6eee #1)
> EIP: 0060:[<7818ca71>] EFLAGS: 00010206 CPU: 0
> EIP is at sysfs_find_dirent+0x9/0x23
> EAX: 00000001 EBX: 00000072 ECX: 00000001 EDX: b730b4f0
> ESI: b730b4f0 EDI: fffffff4 EBP: b7311490 ESP: b73ffd34
>  DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
> Stack: <<<i'm too lazy>>>>
> Call Trace:
>  [<7818cb39>]: __sysfs_add_one+0x10/0x69
>  [<7818cba2>]: sysfs_add_one+0x9/0x2f
>  [<7818d0bc>]: create_dir+0x3c/0x62
>  sysfs_create_dir+0x29/0x3b
>  kobject_get
>  kobject_add_internal
>  kobject_add
>  device_add+0x75/0x456
>  apic_timer_interrupt+0x28/0x30
>  strlcpy+0x11/0x3e
>  register_netdevice+0x1f1/0x31a
>  ieee80211_register_hw+0x1eb/0x2d0 [mac80211]
>  ath5k_pci_probe+0xc27/0x1150 [ath5k]
>  find_inode
>  pci_device_probe
>  driver_probe_device
>  .......
>  init_ath5k_pci [ath5k]
>  .......
>  ==============
> Code: dd 85 c0 53 89 c3 74 16 83 38 00 75 0f ba 82 00 00 00 b8 f7 75
> 3c 78 e8 70 da f8 ff ff 03 89 d8 5b c3 56 89 d6 53 8b 58 18 eb 11 <8b>
> 43 10 89 f2 e8 34 cc 04 00 85 c0 74 07 8b 5b 0c 85 db 75 eb
>
> $ AFLAGS=--32 scripts/decodecode < /tmp/oops.txt
> Code: dd 85 c0 53 89 c3 74 16 83 38 00 75 0f ba 82 00 00 00 b8 f7 75
> 3c 78 e8 70 da f8 ff ff 03 89 d8 5b c3 56 89 d6 53 8b 58 18 eb 11 <8b>
> 43 10 89 f2 e8 34 cc 04 00 85 c0 74 07 8b 5b 0c 85 db 75 eb
>
> /tmp/tmp.xJNdgiQwSL.o:     file format elf32-i386
>
> Disassembly of section .text:
>
> 00000000 <.text>:
>   0:   dd 85 c0 53 89 c3       fldl   -0x3c76ac40(%ebp)
>   6:   74 16                   je     0x1e
>   8:   83 38 00                cmpl   $0x0,(%eax)
>   b:   75 0f                   jne    0x1c
>   d:   ba 82 00 00 00          mov    $0x82,%edx
>  12:   b8 f7 75 3c 78          mov    $0x783c75f7,%eax
>  17:   e8 70 da f8 ff          call   0xfff8da8c
>  1c:   ff 03                   incl   (%ebx)
>  1e:   89 d8                   mov    %ebx,%eax
>  20:   5b                      pop    %ebx
>  21:   c3                      ret
>  22:   56                      push   %esi
>  23:   89 d6                   mov    %edx,%esi
>  25:   53                      push   %ebx
>  26:   8b 58 18                mov    0x18(%eax),%ebx
>  29:   eb 11                   jmp    0x3c
>
> /tmp/tmp.xJNdgiQwSL.o:     file format elf32-i386
>
> Disassembly of section .text:
>
> 00000000 <.text>:
>   0:   8b 43 10                mov    0x10(%ebx),%eax
>   3:   89 f2                   mov    %esi,%edx
>   5:   e8 34 cc 04 00          call   0x4cc3e
>   a:   85 c0                   test   %eax,%eax
>   c:   74 07                   je     0x15
>   e:   8b 5b 0c                mov    0xc(%ebx),%ebx
>  11:   85 db                   test   %ebx,%ebx
>  13:   75 eb                   jne    0x0

And I had the code completely wrong, oops. Looks like we are bailing
on the strcmp call in this function or something along those lines? I
wish I could be a bigger help with debugging this stuff.

-Dan

000001bc <sysfs_find_dirent>:
 *      RETURNS:
 *      Pointer to sysfs_dirent if found, NULL if not.
 */
struct sysfs_dirent *sysfs_find_dirent(struct sysfs_dirent *parent_sd,
                                      const unsigned char *name)
{
 1bc:   56                      push   %esi
 1bd:   89 d6                   mov    %edx,%esi
 1bf:   53                      push   %ebx
       struct sysfs_dirent *sd;

       for (sd = parent_sd->s_dir.children; sd; sd = sd->s_sibling)
 1c0:   8b 58 18                mov    0x18(%eax),%ebx
 1c3:   eb 11                   jmp    1d6 <sysfs_find_dirent+0x1a>
               if (!strcmp(sd->s_name, name))
 1c5:   8b 43 10                mov    0x10(%ebx),%eax
 1c8:   89 f2                   mov    %esi,%edx
 1ca:   e8 fc ff ff ff          call   1cb <sysfs_find_dirent+0xf>
 1cf:   85 c0                   test   %eax,%eax
 1d1:   74 07                   je     1da <sysfs_find_dirent+0x1e>
struct sysfs_dirent *sysfs_find_dirent(struct sysfs_dirent *parent_sd,
                                      const unsigned char *name)
{
       struct sysfs_dirent *sd;

       for (sd = parent_sd->s_dir.children; sd; sd = sd->s_sibling)
 1d3:   8b 5b 0c                mov    0xc(%ebx),%ebx
 1d6:   85 db                   test   %ebx,%ebx
 1d8:   75 eb                   jne    1c5 <sysfs_find_dirent+0x9>
               if (!strcmp(sd->s_name, name))
                       return sd;
       return NULL;
}
 1da:   89 d8                   mov    %ebx,%eax
 1dc:   5b                      pop    %ebx
 1dd:   5e                      pop    %esi
 1de:   c3                      ret
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux