Re: NULL pointer dereference with pre 2.1.37-4

Linus Torvalds (torvalds@transmeta.com)
Sun, 4 May 1997 09:14:57 -0700 (PDT)


On Sun, 4 May 1997, Thorsten Kukuk wrote:
>
> With pre 2.1.37-3 and 2.1.37-4, I get the following Oops when
> starting init:
>
> Unable to handle kernel NULL pointer dereference at virtual address 00000000
> current->tss.cr3 = 00101000,%cr3=00101000
> *pde=00000000
> Oops: 0002
> CPU: 0
> EIP: 0010:[<c01d8ef0>]
> EFLAGS: 00010247
> eax: 00000000 ebx: 00004000 ecx: 00000000 edx: 00000001
> esi: c0107f60 edi: c01da4f2 ebp: c0005fdc esp: c0005fac
> ds: 0018 es: 0018 ss: 0018
> Process swapper (pid:0, process nr:1, stackpage=c0097000)
> Stack: 00001100 c0107f60 c01da4f2 00000001 c0107f60 00000001 00000000 00000005
> 00000018 00000018 ffffffff c0108440 00000e00 c0108519 00001100 c02137b0
> 00000000 c021380f 00000000 c02137a4 00000001
> Call Trace:
> Code: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>
> ksymoops:
> Using `/src/Linux/linux-2.1/System.map' to map addresses to symbols.
>
> >>EIP: c01d8ef0 <dst_access_fault+1a9/2c16>
>
> Code: c01d8ef0 <dst_access_fault+1a9/2c16>

This _looks_ like the linker hasn't done the right thing for the
".text.lock" segment, which should contain the out-of-line spinlock code,
but seems to contain just zeroes for you. So you get a fault the first
time there is any contention on any lock.

How recent are your binutils? The new kernel compilation scheme definitely
requires more of the linker - we're doing some extremely clever stuff to
get some nice optimizations.

Linus