forked from Minki/linux
[PATCH] x86_64: Clean up double fault handling
Since a double fault always implies that kernel data structures are corrupt, this fault should neither be handed to user mode handling, nor should the handler allow resuming the faulting code stream (since architecturally this isn't a fault, but an abort). Note that this slightly depends on the previously submitted patch adjusting the prototype of notify_die() (a compiler warning will result without that other patch). AK: Removed obsolete CONFIG_CHECKING code, added comments Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
6e3f361781
commit
eca37c18be
@ -489,7 +489,23 @@ DO_ERROR(11, SIGBUS, "segment not present", segment_not_present)
|
|||||||
DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
|
DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
|
||||||
DO_ERROR(18, SIGSEGV, "reserved", reserved)
|
DO_ERROR(18, SIGSEGV, "reserved", reserved)
|
||||||
DO_ERROR(12, SIGBUS, "stack segment", stack_segment)
|
DO_ERROR(12, SIGBUS, "stack segment", stack_segment)
|
||||||
DO_ERROR( 8, SIGSEGV, "double fault", double_fault)
|
|
||||||
|
asmlinkage void do_double_fault(struct pt_regs * regs, long error_code)
|
||||||
|
{
|
||||||
|
static const char str[] = "double fault";
|
||||||
|
struct task_struct *tsk = current;
|
||||||
|
|
||||||
|
/* Return not checked because double check cannot be ignored */
|
||||||
|
notify_die(DIE_TRAP, str, regs, error_code, 8, SIGSEGV);
|
||||||
|
|
||||||
|
tsk->thread.error_code = error_code;
|
||||||
|
tsk->thread.trap_no = 8;
|
||||||
|
|
||||||
|
/* This is always a kernel trap and never fixable (and thus must
|
||||||
|
never return). */
|
||||||
|
for (;;)
|
||||||
|
die(str, regs, error_code);
|
||||||
|
}
|
||||||
|
|
||||||
asmlinkage void __kprobes do_general_protection(struct pt_regs * regs,
|
asmlinkage void __kprobes do_general_protection(struct pt_regs * regs,
|
||||||
long error_code)
|
long error_code)
|
||||||
|
Loading…
Reference in New Issue
Block a user