:-/

Boris Tobotras (boris@xtalk.msk.su)
Tue, 17 Sep 1996 21:19:32 +0400


Hi, it's me again. Again, during ip-up. And, I found it's cause :)
OOPS comes when some process tries to access /proc/97/stat. 97 is PID of
diald-0.14 being running now. (Works just fine, BTW :) This is how "cat stat"
looks like:

ttyp3 /proc/97# strace cat stat
execve("/bin/cat", ["cat", "stat"], [/* 32 vars */]) = 0
mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x40006000
mprotect(0x40000000, 19701, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mprotect(0x8000000, 6015, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
stat("/etc/ld.so.cache", {st_mode=S_IFREG|0644, st_size=5673, ...}) = 0
open("/etc/ld.so.cache", O_RDONLY) = 3
mmap(0, 5673, PROT_READ, MAP_SHARED, 3, 0) = 0x40007000
close(3) = 0
stat("/etc/ld.so.preload", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
open("/etc/ld.so.preload", O_RDONLY) = 3
mmap(0, 1, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0x40009000
close(3) = 0
munmap(0x40009000, 1) = 0
open("/usr/local/lib/libc.so.5", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/usr/openwin/lib/libc.so.5", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/lib/libc.so.5.4.4", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3"..., 4096) = 4096
mmap(0, 880640, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40009000
mmap(0x40009000, 651903, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) =
0x40009000
mmap(0x400a9000, 21776, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3,
0x9f000) = 0x400a9000
mmap(0x400af000, 199876, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYM
OUS, -1, 0) = 0x400af000
close(3) = 0
mprotect(0x40009000, 651903, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mprotect(0x8000000, 6015, PROT_READ|PROT_EXEC) = 0
mprotect(0x40009000, 651903, PROT_READ|PROT_EXEC) = 0
mprotect(0x40000000, 19701, PROT_READ|PROT_EXEC) = 0
personality(PER_LINUX) = 0
brk(0) = 0x8002968
brk(0x8002990) = 0x8002990
brk(0x8003000) = 0x8003000
stat("/etc/locale/C/libc.cat", 0xbffff544) = -1 ENOENT (No such file or
directory)
stat("/usr/lib/locale/C/libc.cat", 0xbffff544) = -1 ENOENT (No such file or
directory)
stat("/usr/lib/locale/libc/C", 0xbffff544) = -1 ENOENT (No such file or
directory)
stat("/usr/share/locale/C/libc.cat", 0xbffff544) = -1 ENOENT (No such file or
directory)
stat("/usr/local/share/locale/C/libc.cat", 0xbffff544) = -1 ENOENT (No such
file or directory)
fstat(1, {st_mode=S_IFCHR|0622, st_rdev=makedev(4, 195), ...}) = 0
open("stat", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
brk(0x8005000) = 0x8005000
read(3, <unfinished ...>
+++ killed by SIGSEGV +++

Here's what happened:

general protection: 0000
CPU: 0
EIP: 0010:[<0016092d>]
EFLAGS: 00010256
eax: 00000000 ebx: 00682810 ecx: 00000001 edx: 00000000
esi: 43434700 edi: 40072ffb ebp: 00000000 esp: 01102f18
ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018
Process cat (pid: 5800, process nr: 26, stackpage=01102000)
Stack: 002b89b0 00242280 00000061 00a5e000 00000000 0111a00c 01320453 00000293
bffffd6c 40072ffb 0010c000 0012f3af 00161297 00000061 00a5e000 0016138e
00a5e000 00000061 0000000b 00242280 00000000 00001000 002b89b0 00fb2067
Call Trace: [<0010c000>] [<0012f3af>] [<00161297>] [<0016138e>] [<001104c4>]
[<001230d3>] [<0010a6e2>]
Code: 8b 44 30 04 85 c0 74 0f 83 f8 01 75 06 09 cd eb 06 8d 36 09

Ksymoops says:

Using `/boot/System.map' to map addresses to symbols.

>>EIP: 16092d <get_stat+ed/290>
Trace: 10c000 <bad_IRQ8_interrupt>
Trace: 12f3af <do_select+1ef/250>
Trace: 161297 <get_process_array+87/b0>
Trace: 16138e <array_read+ce/270>
Trace: 1104c4 <do_page_fault+134/330>
Trace: 1230d3 <sys_read+b3/e0>
Trace: 10a6e2 <system_call+52/80>

Code: 16092d <get_stat+ed/290> movl 0x4(%eax,%esi,1),%eax
Code: 160931 <get_stat+f1/290> testl %eax,%eax
Code: 160933 <get_stat+f3/290> je 160944 <get_stat+104/290>
Code: 160935 <get_stat+f5/290> cmpl $0x1,%eax
Code: 160938 <get_stat+f8/290> jne 160940 <get_stat+100/290>
Code: 16093a <get_stat+fa/290> orl %ecx,%ebp
Code: 16093c <get_stat+fc/290> jmp 160944 <get_stat+104/290>
Code: 16093e <get_stat+fe/290> leal (%esi),%esi
Code: 160940 <get_stat+100/290> orl %eax,(%eax)
Code: 160942 <get_stat+102/290> nop
Code: 160943 <get_stat+103/290> nop
Code: 160944 <get_stat+104/290> nop

I have absolutely nothing at IRQ8!

Next thing was several things like

Aiee, killing interrupt handler
kfree of non-kmalloced memory: 001a8c5c, next= 00000000, order=0
kfree of non-kmalloced memory: 001a8c4c, next= 00000000, order=0
kfree of non-kmalloced memory: 001a9160, next= 00000000, order=0
idle task may not sleep

Strangely enough, system is still running and I'm cut'n'pasting
those line in vi :)

--
	Best regards, -- Boris.