2001-12-21 17:09:19

by Greg KH

[permalink] [raw]
Subject: oops in mm/memory.c remap_page_range() in 2.2.20

Running "cvs update" on a 2.2.20 kernel with 16Mb of real memory I got
the following oops:

Unable to handle kernel NULL pointer dereference at virtual address 00000002
current->tss.cr3 = 00f53000, %cr3 = 00f53000
*pde = 00000000
Oops: 0000
CPU: 0
EIP: 0010:[<c01194a0>]
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010296
eax: 00000002 ebx: c0fe4f50 ecx: 00000000 edx: c0229ff8
esi: 00000000 edi: c0fe4f50 ebp: 00000002 esp: c0805f04
ds: 0018 es: 0018 ss: 0018
Process cvs (pid: 21185, process nr: 44, stackpage=c0805000)
Stack: c0fe4f50 00000000 c0fe4fcc c011956f 00000002 00000000 c0804000 c0fe4f9c
c012247e c0fe4f50 00000000 00000000 c0fe4f50 00000243 c0ebd200 00000000
00000048 c0fe4f50 00000243 00000000 3c2367de 3c2367de 3c2367de 00000006
Call Trace: [<c011956f>] [<c012247e>] [<c012aa62>] [<c0122ea4>] [<c01230ea>] [<c01079c4>]
Code: 8b 4d 00 89 4c 24 10 8b 5d 04 8b 75 08 29 de 8b 55 2c 3b 54

>>EIP; c01194a0 <remap_page_range+654/6f0> <=====
Trace; c011956f <vmtruncate+33/558>
Trace; c012247e <__get_free_pages+1e3e/2820>
Trace; c012aa62 <open_namei+2be/2ec>
Trace; c0122ea4 <filp_open+44/f0>
Trace; c01230ea <get_unused_fd+19a/210>
Trace; c01079c4 <dump_thread+127c/22f0>
Code; c01194a0 <remap_page_range+654/6f0>
00000000 <_EIP>:
Code; c01194a0 <remap_page_range+654/6f0> <=====
0: 8b 4d 00 mov 0x0(%ebp),%ecx <=====
Code; c01194a3 <remap_page_range+657/6f0>
3: 89 4c 24 10 mov %ecx,0x10(%esp,1)
Code; c01194a7 <remap_page_range+65b/6f0>
7: 8b 5d 04 mov 0x4(%ebp),%ebx
Code; c01194aa <remap_page_range+65e/6f0>
a: 8b 75 08 mov 0x8(%ebp),%esi
Code; c01194ad <remap_page_range+661/6f0>
d: 29 de sub %ebx,%esi
Code; c01194af <remap_page_range+663/6f0>
f: 8b 55 2c mov 0x2c(%ebp),%edx
Code; c01194b2 <remap_page_range+666/6f0>
12: 3b 54 00 00 cmp 0x0(%eax,%eax,1),%edx

Any suggestions?

thanks,

greg k-h


2001-12-21 17:20:51

by Greg KH

[permalink] [raw]
Subject: Re: oops in mm/memory.c remap_page_range() in 2.2.20

On Fri, Dec 21, 2001 at 09:05:11AM -0800, Greg KH wrote:
> Running "cvs update" on a 2.2.20 kernel with 16Mb of real memory I got
> the following oops:

Sorry, had /boot/System.map pointing to the wrong place, this is the
correct symbols:

Warning (compare_maps): ksyms_base symbol module_list_R__ver_module_list not found in System.map. Ignoring ksyms_base entry
Unable to handle kernel NULL pointer dereference at virtual address 00000002
current->tss.cr3 = 00f53000, %cr3 = 00f53000
*pde = 00000000
Oops: 0000
CPU: 0
EIP: 0010:[<c01194a0>]
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010296
eax: 00000002 ebx: c0fe4f50 ecx: 00000000 edx: c0229ff8
esi: 00000000 edi: c0fe4f50 ebp: 00000002 esp: c0805f04
ds: 0018 es: 0018 ss: 0018
Process cvs (pid: 21185, process nr: 44, stackpage=c0805000)
Stack: c0fe4f50 00000000 c0fe4fcc c011956f 00000002 00000000 c0804000 c0fe4f9c
c012247e c0fe4f50 00000000 00000000 c0fe4f50 00000243 c0ebd200 00000000
00000048 c0fe4f50 00000243 00000000 3c2367de 3c2367de 3c2367de 00000006
Call Trace: [<c011956f>] [<c012247e>] [<c012aa62>] [<c0122ea4>] [<c01230ea>] [<c01079c4>]
Code: 8b 4d 00 89 4c 24 10 8b 5d 04 8b 75 08 29 de 8b 55 2c 3b 54

>>EIP; c01194a0 <vmtruncate_list+c/a8> <=====
Trace; c011956f <vmtruncate+33/3c>
Trace; c012247e <do_truncate+66/9c>
Trace; c012aa62 <open_namei+2be/2ec>
Trace; c0122ea4 <filp_open+44/f0>
Trace; c01230ea <sys_open+36/94>
Trace; c01079c4 <system_call+34/38>
Code; c01194a0 <vmtruncate_list+c/a8>
00000000 <_EIP>:
Code; c01194a0 <vmtruncate_list+c/a8> <=====
0: 8b 4d 00 mov 0x0(%ebp),%ecx <=====
Code; c01194a3 <vmtruncate_list+f/a8>
3: 89 4c 24 10 mov %ecx,0x10(%esp,1)
Code; c01194a7 <vmtruncate_list+13/a8>
7: 8b 5d 04 mov 0x4(%ebp),%ebx
Code; c01194aa <vmtruncate_list+16/a8>
a: 8b 75 08 mov 0x8(%ebp),%esi
Code; c01194ad <vmtruncate_list+19/a8>
d: 29 de sub %ebx,%esi
Code; c01194af <vmtruncate_list+1b/a8>
f: 8b 55 2c mov 0x2c(%ebp),%edx
Code; c01194b2 <vmtruncate_list+1e/a8>
12: 3b 54 00 00 cmp 0x0(%eax,%eax,1),%edx


greg k-h

2001-12-21 17:31:22

by Rik van Riel

[permalink] [raw]
Subject: Re: oops in mm/memory.c remap_page_range() in 2.2.20

On Fri, 21 Dec 2001, Greg KH wrote:
> On Fri, Dec 21, 2001 at 09:05:11AM -0800, Greg KH wrote:
> > Running "cvs update" on a 2.2.20 kernel with 16Mb of real memory I got
> > the following oops:
>
> Sorry, had /boot/System.map pointing to the wrong place, this is the
> correct symbols:

> >>EIP; c01194a0 <vmtruncate_list+c/a8> <=====

OK, lets take a look at the code in memory.c, first at line 736:

static void vmtruncate_list(struct vm_area_struct *mpnt, unsigned long
offset)
{
do {
struct mm_struct *mm = mpnt->vm_mm;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This is the line where the system oopses, so vmtruncate_list
is being called with mpnt==0x00000002

Time to take a step back and look in vmtruncate(), line 769:

if (inode->i_mmap)
vmtruncate_list(inode->i_mmap, offset);
if (inode->i_mmap_shared)
vmtruncate_list(inode->i_mmap_shared, offset);


This suggests that you have a single-bit error somewhere in RAM
and vmtruncate_list() simply should never have been called.

kind regards,

Rik
--
DMCA, SSSCA, W3C? Who cares? http://thefreeworld.net/

http://www.surriel.com/ http://distro.conectiva.com/