Re: NULL pointer dereference when loading the gre module (3.10.0-rc4)

Steven Rostedt
2013-06-07T18:26:12Z

On Fri, 2013-06-07 at 19:52 +0200, Steinar H. Gunderson wrote:
> On Fri, Jun 07, 2013 at 12:12:23PM -0400, Steven Rostedt wrote:
> >> Ffffffffa0e76000 u ip_tunnel_init_net [ip_gre]
> > What do you get if you do an objdump -Dr ip_gre.ko
> >
> > And then look for ipgre_init, and then subtract 0xb053 (45139) from its
> > address. As that is: ffffffffa0e81055 - ffffffffa0e76002, then see if
> > that object file has anything in that location.
>
> pannekake:~> objdump -Dr /lib/modules/3.10.0-rc4/kernel/net/ipv4/ip_gre.ko | grep ipgre_init
> 0000000000000000 <ipgre_init_net>:
> 0: 8b 35 00 00 00 00 mov 0x0(%rip),%esi # 6 <ipgre_init_net+0x6>
> 13: e8 00 00 00 00 callq 18 <ipgre_init_net+0x18>
>
> Ie., the symbol doesn't show up in the disassembly (for whatever reason).

Ah, that's because of this: module_init(ipgre_init); Where it makes it
into:

00000000 <init_module>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 53 push %ebx
4: 83 ec 08 sub $0x8,%esp
7: c7 04 24 00 00 00 00 movl $0x0,(%esp)
a: R_386_32 .rodata.str1.4

We can use ipgre_tap_init_net, and the offset of 0xb032 (45106) as that
was 0xffffffffa0e5d034 - 0xffffffffa0e52002. Do you have CONFIG_NET_NS
set?

You can also cat /proc/modules. It gives you where the modules are
located.

-- Steve