public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: Sysenter crash with Nested Task Bit set
@ 2006-09-18  3:51 Chuck Ebbert
  2006-09-18  5:25 ` Andrew Morton
  0 siblings, 1 reply; 14+ messages in thread
From: Chuck Ebbert @ 2006-09-18  3:51 UTC (permalink / raw)
  To: In Cognito; +Cc: linux-kernel, Linus Torvalds, Andrew Morton

In-Reply-To: <5a20704e0609171608o7ee45fdbxb94aa897c1776153@mail.gmail.com>

On Sun, 17 Sep 2006 19:08:24 -0400, "In Cognito" wrote:

> Here's a way to heat up your cpu and crash the rest of the system too:
>
> main(){
> asm("pushf\n"
>         "popl %eax\n"
> /* enable the NT bit */
>         "orl $0x4000, %eax\n"
>         "pushl %eax\n"
>         "popf\n"
>
>         "sysenter\n"
>        );
> return 0;
> }

I'll take your word that it crashes.

2.6.9 is fine.  I'd guess the iret fixups from 2.6.12 are the problem.

This doesn't crash for me, but it's probably not quite the right fix:

Signed-off-by: Chuck Ebbert <76306.1226@compuserve.com>
---
 arch/i386/kernel/traps.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletion(-)

--- 2.6.18-rc6-nb.orig/arch/i386/kernel/traps.c
+++ 2.6.18-rc6-nb/arch/i386/kernel/traps.c
@@ -516,6 +516,16 @@ fastcall void do_##name(struct pt_regs *
 	do_trap(trapnr, signr, str, 0, regs, error_code, NULL); \
 }
 
+#define DO_TSS_ERROR(trapnr, signr, str, name) \
+fastcall void do_##name(struct pt_regs * regs, long error_code) \
+{ \
+	if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, signr) \
+						== NOTIFY_STOP) \
+		return; \
+	regs->eflags &= ~X86_EFLAGS_NT; \
+	do_trap(trapnr, signr, str, 0, regs, error_code, NULL); \
+}
+
 #define DO_ERROR_INFO(trapnr, signr, str, name, sicode, siaddr) \
 fastcall void do_##name(struct pt_regs * regs, long error_code) \
 { \
@@ -561,7 +571,7 @@ DO_VM86_ERROR( 4, SIGSEGV, "overflow", o
 DO_VM86_ERROR( 5, SIGSEGV, "bounds", bounds)
 DO_ERROR_INFO( 6, SIGILL,  "invalid opcode", invalid_op, ILL_ILLOPN, regs->eip)
 DO_ERROR( 9, SIGFPE,  "coprocessor segment overrun", coprocessor_segment_overrun)
-DO_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS)
+DO_TSS_ERROR(10, SIGSEGV, "invalid TSS", invalid_TSS)
 DO_ERROR(11, SIGBUS,  "segment not present", segment_not_present)
 DO_ERROR(12, SIGBUS,  "stack segment", stack_segment)
 DO_ERROR_INFO(17, SIGBUS, "alignment check", alignment_check, BUS_ADRALN, 0)
-- 
Chuck

^ permalink raw reply	[flat|nested] 14+ messages in thread
[parent not found: <5a20704e0609171603s55ca52bap71dc2fa2c05d6741@mail.gmail.com>]

end of thread, other threads:[~2006-09-18 19:01 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-09-18  3:51 Sysenter crash with Nested Task Bit set Chuck Ebbert
2006-09-18  5:25 ` Andrew Morton
2006-09-18  8:44   ` Mike Galbraith
2006-09-18 15:11   ` Linus Torvalds
2006-09-18 15:06     ` Ingo Molnar
2006-09-18 15:29     ` Andi Kleen
2006-09-18 15:24       ` Ingo Molnar
2006-09-18 16:02       ` Linus Torvalds
2006-09-18 16:10         ` Linus Torvalds
2006-09-18 16:24           ` Jeremy Fitzhardinge
2006-09-18 16:12       ` Benjamin LaHaise
2006-09-18 16:39         ` Andi Kleen
2006-09-18 19:01           ` Jeremy Fitzhardinge
     [not found] <5a20704e0609171603s55ca52bap71dc2fa2c05d6741@mail.gmail.com>
2006-09-17 23:08 ` In Cognito

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox