Good News for 2.1.51: oops starting X :)

Riccardo Facchetti (fizban@tin.it)
Fri, 22 Aug 1997 15:08:07 +0200 (MET DST)


On Thu, 21 Aug 1997, Edward H Welbon wrote:

[...]
> Unable to handle kernel paging request at virtual address 1a97342c
> current->tss.cr3 = 036ff000, |r3 = 036ff000
> *pde = 00000000
> Oops: 0000
> CPU: 1
> EIP: 0010:[<c012f691>]
> EFLAGS: 00010206
> eax: 1a973400 ebx: c6692180 ecx: 00000000 edx: c3b2f1f7
[...]
> >>EIP: c012f691 <do_follow_link+19/88>
> Trace: c012f873 <lookup_dentry+173/1ac>
> Trace: c012f8d4 <__namei+28/80>
> Trace: c01266db <sys_access+d3/13c>
> Trace: c0109aca <system_call+3a/40>

I have looked into the code of do_follow_link, and it seems to me that the
error is in this code chunk:

...
static struct dentry * do_follow_link(struct dentry *base, struct dentry
*dentry)
{
struct inode * inode = dentry->d_inode;

[line 316]--> if (inode && inode->i_op && inode->i_op->follow_link) {
...

The second ptr (inode->i_op) seems to be an invalid pointer. I have tried
to follow the code path, but I have found nothing that can be an obvious
error.
We have seen some other (different) reports about this particular oops, so
I guess the bug exist and it is in some way reproducible. I have no idea
on how to reproduce it.

Now the good news :)

Today I have hit an oops me too.
Starting the X server I have received this one:

Unable to handle kernel paging request at virtual address 1b7498d0
current->tss.cr3 = 00101000, %cr3 = 00101000
*pde = 00000000
Oops: 0000
CPU: 0
EIP: 0010:[<c012da0c>]
EFLAGS: 00010206
eax: 1b7498c0 ebx: c125ead3 ecx: c125ead3 edx: c125eb44
esi: 00000000 edi: c0c30320 ebp: 00000000 esp: c000dfa4
ds: 0018 es: 0018 ss: 0018
Process kswapd (pid: 3, process nr: 3, stackpage=c000d000)
Stack: c139f0e0 c0c30348 c0c30320 c012dc70 c125ead3 00000006 00000000 00000003
c011f9c1 00000000 c000c000 00000000 00009000 c011fb9b 00000003 00000000
00000000 00000100 c0003fe4 c01082ba 00000000 c011fa90 c0107fdc
Call Trace: [<c012dc70>] [<c011f9c1>] [<c011fb9b>] [<c01082ba>] [<c011fa90>]
[<c0107fdc>]
Code: 8b 40 10 85 c0 74 02 89 c6 85 f6 74 0d 8b 46 08 85 c0 74 06

>>EIP: c012da0c <iput+18/b0>
Trace: c012dc70 <shrink_dcache+54/7c>
Trace: c011f9c1 <try_to_free_page+65/c8>
Trace: c011fb9b <kswapd+10b/128>
Trace: c01082ba <init+42/1a8>
Trace: c011fb9b <kswapd+10b/128>
Trace: c0107fdc <this_must_match_init_task+1fdc/2000>

Disassembly of section .text:

0000000000000000 <_EIP>:
0: 8b 40 10 movl 0x10(%eax),%eax
3: 85 c0 testl %eax,%eax
5: 74 02 je 9 <_EIP+9>
7: 89 c6 movl %eax,%esi
9: 85 f6 testl %esi,%esi
b: 74 0d je 1a <_EIP+1a>
d: 8b 46 08 movl 0x8(%esi),%eax
10: 85 c0 testl %eax,%eax
12: 74 06 je 1a <_EIP+1a>

Now I have no time to look into the code. I will do it in the weekend.

Ciao,
Riccardo.