Oops in 1.3.21

Uwe Ohse (uwe@tirka.gun.de)
Wed, 30 Aug 1995 21:02:35 +0200 (MET DST)


Hello,

---------------------------------------------------------------------------
Unable to handle kernel paging request at virtual address 08007000
current->tss.cr3 = 012f2000, %cr3 = 012f2000
*pde = 0173e067
*pte = 00000000
Oops: 0000
EIP: 0010:001486d1
EFLAGS: 00010216
eax: 01ea7744 ebx: 00000400 ecx: 00000100 edx: 01e5b400
esi: 08007000 edi: 01e5b400 ebp: 00000400 esp: 002c4d40
ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018
Process mmap (pid: 18543, process nr: 65, stackpage=002c4000)
Stack: 00009000 0000002b 00000001 00000001 00000000 00000000 001c5f84 00006400
0000001c 00007400 00000000 01ea7744 ffffffe4 0014ba46 012c57e0 0118f5dc
00000000 00000242 00008180 002c4e20 0118f5dc 00000000 01a4b8a0 00000000
Call Trace: 0014ba46 001271ea 00149fa1 00109aa5 001247b3 00110003 00113a22
0010a07b 0010a402
Code: 64 f3 a5 83 e3 03 89 d9 64 f3 a4 01 ac 24 c0 00 00 00 8b 54
---------------------------------------------------------------------------

00147990 t ext2_readdir
00147fb0 t ext2_file_read
>> 00148420 t ext2_file_write
001488c0 t ext2_release_file
001488e0 t sync_block

This happend while generating a core dump.
The programm (mmap) munmapped some malloced memory, and aout_core_dump
isn't able to handle that. mmap does (loading of shared libs omitted):

personality(PER_LINUX) = 0 (PER_LINUX)
brk(0x800531c) = 0x800531c
brk(0x8006000) = 0x8006000
brk(0x8008000) = 0x8008000
brk(0x8009000) = 0x8009000
brk(0x800b000) = 0x800b000
open("testmmap", O_RDWR|O_CREAT|O_TRUNC, 0666) = 4
write(4, "\365$EzqEVA\7(\255q\33\26uYg\370\356|\224}\210P;"..., 8192) = 8192
mmap(0x8007000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE, 4, 0) = 0x800a000
munmap(0x800a000, 4096) = 0
mmap(0x8007000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 4, 0) = \
0x8007000
munmap(0x8007000, 4096) = 0
lseek(4, 4096, SEEK_SET) = 4096
read(4, 0x8007000, 4096) = -1 EFAULT (Bad address)
lseek(4, 0, SEEK_SET) = 0
read(4, "\365$EzqEVA\7(\255q\33\26uYg\370\356|\224}\210P;"..., 8192) = 8192
--- SIGSEGV (Segmentation fault) ---
+++ killed by SIGSEGV +++
(reading memory at 0x8007000). The program is buggy, yes. The core
file is 284 bytes long.

EIP 001486d1 is around here: (fs/ext2/file.c, ext2_write_file())
pos2 += c;
pos += c;
written += c;
>> memcpy_fromfs (bh->b_data + offset, buf, c);
buf += c;
bh->b_uptodate = 1;

Call Trace:
0014ba46 ext2_create
001271ea open_namei
00149fa1 inode_getblk
00109aa5 dump_thread
001247b3 aout_core_dump
00110003 do_timer
00113a22 notify_parent
0010a07b do_signal
0010a402 signal_return

btw: Now i have a constant load of 2. Two mmap-processes are waiting in down.

F UID PID PPID PRI NI SIZE RSS WCHAN STAT TTY TIME COMMAND
0 406 18478 1 1 0 38 72 down D ? 0:00 ./mmap
0 406 18497 1 1 0 38 128 down D ? 0:00 ./mmap

The machine doesn't feel like load 2, though. Why are tasks in
uninterruptible sleep counted as active?

Bye, Uwe