Re: gpf in do_exit

Gabriel Paubert (paubert@iram.es)
Mon, 14 Sep 1998 20:01:18 +0200 (METDST)


On Mon, 14 Sep 1998, Ragnar Hojland Espinosa wrote:

> 2.1.121-UP, egcs 1.1 this time
>
> general protection fault: 0000
> CPU: 0
> EIP: 0010:[<c0114a11>]
> EFLAGS: 00010286
> eax: 00000000 ebx: 80000000 ecx: c4c5e000 edx: 0000bfff
> esi: 00000000 edi: 00008000 ebp: bfff8000 esp: c4c5ffd4
> ds: 0000 es: 0000 ss: 0018

>From the contents of ds and es and the stack displayed below, it seems
that a signal handler thrashed the context before returning. There is
indeed an oversight in the handling of exceptions on the iret instruction.
The code which looks like (in the RESTORE_ALL macro in
arch/i386/kernel/entry.S):

pushl $11; \
call do_exit

should first set up %ds and %es and could for example look like:

pushl %ss;\
popl %ds;\
pushl %ss;\
popl %es;\
pushl $11;\
call do_exit

Sorry I can't make a patch, I'm 10000km away from home (for work) and it
was already painful enough to type this.

Gabriel.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/faq.html