crashme & 2.1.104pre1: oops in restore_sigcontext

Meelis Roos (mroos@tartu.cyber.ee)
Tue, 2 Jun 1998 15:34:20 +0300 (EEST)


Having run crashme 2.4 for about 4 days, I looked at kernel logs
and found 5 oopses (about one a day). Machine is still running.

So the running of crashme on 2.1.x was not absolutely useless
at least :) At the moment I'm at 31057.

All of them are mostly the same:

general protection: 0004 (also 15e8, 000c, 0008)
CPU: 0
EIP: 0010:[<c0108c5e>]
EFLAGS: 00010202 (also 00050246)
eax: 00000000 ebx: bffff658 ecx: 00000005 edx: 00000005
(this line varies)

esi: 00000000 edi: c11e3fc4 ebp: c11e3fc4 esp: c11e3f84
ds: 0018 es: 0018 ss: 0018
Process crashme (pid: 13210, process nr: 70, stackpage=c11e3000)
Stack: bffff650 00000000 c11e3fc4 c11e2000 00000005 c0108f07 c11e3fc4 bffff658
c11e2000 00000007 0804b2a9 bffff650 c11e3fc4 bffbf6d4 bffffa8c c0109824
0804f360 080490dd 0804b2a9 00000007 0804b2a9 bffff650 00000077 0000002b
Call Trace: [<c0108f07>] [<c0109824>]
Code: 8e e9 31 c0 66 8b 53 04 81 e2 ff ff 00 00 89 54 24 10 66 f7

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

>>EIP: c0108c5e <restore_sigcontext+3e/228>
Trace: c0108f07 <sys_sigreturn+bf/d4>
Trace: c0109824 <system_call+38/3c>
Code: c0108c5e <restore_sigcontext+3e/228>
Code: c0108c5e <restore_sigcontext+3e/228> 8e e9 movw %cx,%gs
Code: c0108c60 <restore_sigcontext+40/228> 31 c0 xorl %eax,%eax
Code: c0108c62 <restore_sigcontext+42/228> 66 8b 53 04 movw 0x4(%ebx),%dx
Code: c0108c66 <restore_sigcontext+46/228> 81 e2 ff ff 00 andl $0xffff,%edx
Code: c0108c72 <restore_sigcontext+52/228> 89 54 24 10 movl %edx,0x10(%esp,1)
Code: c0108c76 <restore_sigcontext+56/228> 66 f7 00 90 90 testw $0x9090,(%eax)
Code: c0108c81 <restore_sigcontext+61/228> 90 nop

ksymoops output is always the same, oops number, flags, eax,ebx,ecx,edx
vary.

Seems to be in restore_sigcontext. I looked at the code, this seems to be
the GET_SEG(gs); statement:

restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc)
{
unsigned int tmp;

// some macros skipped

#define GET_SEG(seg) \
{ __get_user(tmp, &sc->seg); \
if ((tmp & 0xfffc) /* not a NULL selectors */ \
&& (tmp & 0x4) != 0x4 /* not a LDT selector */ \
&& (tmp & 3) != 3) /* not a RPL3 GDT selector */ \
goto badframe; \
__asm__ __volatile__("movl %w0,%%" #seg : : "r"(tmp)); }

GET_SEG(gs);

(end of excerpt)

Any ideas?

2.1.104pre1 UP, AMD K6, gcc 2.7.2.3 as came with RH 5.

---
Meelis Roos (mroos@tartu.cyber.ee)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu