All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@novell.com>
To: <linux-kernel@vger.kernel.org>
Subject: [PATCH] i386: NMI <-> debugging handler adjustments
Date: Tue, 08 Nov 2005 17:54:15 +0100	[thread overview]
Message-ID: <4370E647.76F0.0078.0@novell.com> (raw)
In-Reply-To: 4370AEE1.76F0.0078.0@novell.com

[-- Attachment #1: Type: text/plain, Size: 394 bytes --]

Also account for an INT3 breakpoint potentially placed (from a kernel
debugger) on sysenter_entry, which requires the NMI handler to add one
more check. Further, don't discard debug or breakpoint traps/faults
happening on this one instruction and their handler getting
interrupted by an NMI before being able to fix the stack.

From: Jan Beulich <jbeulich@novell.com>

(actual patch attached)


[-- Attachment #2: linux-2.6.14-i386-nmi-int3.patch --]
[-- Type: application/octet-stream, Size: 2573 bytes --]

Also account for an INT3 breakpoint potentially placed (from a kernel
debugger) on sysenter_entry, which requires the NMI handler to add one
more check. Further, don't discard debug or breakpoint traps/faults
happening on this one instruction and their handler getting
interrupted by an NMI before being able to fix the stack.

From: Jan Beulich <jbeulich@novell.com>

--- 2.6.14/arch/i386/kernel/entry.S	2005-10-28 02:02:08.000000000 +0200
+++ 2.6.14-i386-nmi-int3/arch/i386/kernel/entry.S	2005-11-08 17:06:59.000000000 +0100
@@ -178,6 +178,7 @@ need_resched:
 	# sysenter call handler stub
 ENTRY(sysenter_entry)
 	movl TSS_sysenter_esp0(%esp),%esp
+.globl sysenter_past_esp
 sysenter_past_esp:
 	sti
 	pushl $(__USER_DS)
@@ -520,12 +521,12 @@ debug_stack_correct:
 	jmp ret_from_exception
 	.previous .text
 /*
- * NMI is doubly nasty. It can happen _while_ we're handling
- * a debug fault, and the debug fault hasn't yet been able to
- * clear up the stack. So we first check whether we got  an
+ * NMI is doubly nasty. It can happen _while_ we're handling a debug
+ * fault or breakpoint trap, and the fault/trap hasn't yet been able
+ * to clear up the stack. So we first check whether we got an
  * NMI on the sysenter entry path, but after that we need to
- * check whether we got an NMI on the debug path where the debug
- * fault happened on the sysenter path.
+ * check whether we got an NMI on the debug/breakpoint path where the
+ * fault/trap happened on the sysenter path.
  */
 ENTRY(nmi)
 	pushl %eax
@@ -546,6 +547,8 @@ ENTRY(nmi)
 	jae nmi_stack_correct
 	cmpl $sysenter_entry,12(%esp)
 	je nmi_debug_stack_check
+	cmpl $sysenter_entry+1,12(%esp)
+	je .Lnmi_int3_stack_check
 nmi_stack_correct:
 	pushl %eax
 	SAVE_ALL
@@ -566,6 +569,21 @@ nmi_debug_stack_check:
 	jle nmi_debug_stack_fixup
 nmi_debug_stack_fixup:
 	FIX_STACK(24,nmi_stack_correct, 1)
+	pushfl
+	pushl $__KERNEL_CS
+	pushl $debug_stack_correct
+	jmp nmi_stack_correct
+.Lnmi_int3_stack_check:
+	cmpw $__KERNEL_CS,16(%esp)
+	jne nmi_stack_correct
+	cmpl $int3, (%esp)
+	jb nmi_stack_correct
+	cmpl $.Lint3_esp_fix_insn, (%esp)
+	ja nmi_stack_correct
+	FIX_STACK(24,nmi_stack_correct, 1)
+	pushfl
+	pushl $__KERNEL_CS
+	pushl $.Lint3_stack_correct
 	jmp nmi_stack_correct
 
 nmi_16bit_stack:
@@ -592,6 +610,10 @@ nmi_16bit_stack:
 .previous
 
 KPROBE_ENTRY(int3)
+	cmpl $sysenter_entry+1, (%esp)
+	jne .Lint3_stack_correct
+	FIX_STACK(12, .Lint3_stack_correct, .Lint3_esp_fix_insn)
+.Lint3_stack_correct:
 	pushl $-1			# mark this as an int
 	SAVE_ALL
 	xorl %edx,%edx		# zero error code

  parent reply	other threads:[~2005-11-08 16:53 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-08 12:57 [PATCH] i386: export genapic again Jan Beulich
2005-11-08 13:08 ` Arjan van de Ven
2005-11-08 13:22   ` Jan Beulich
2005-11-08 13:29 ` Adrian Bunk
2005-11-08 14:17   ` Jan Beulich
2005-11-08 16:52 ` [PATCH] i386: make trap information available to die handlers Jan Beulich
2005-11-08 16:59   ` Randy.Dunlap
2005-11-08 17:08     ` Jan Beulich
2005-11-08 17:13       ` Randy.Dunlap
2005-11-09  8:20         ` Jan Beulich
2005-11-10 12:21           ` Pavel Machek
2005-11-08 20:58       ` Richard Knutsson
2005-11-08 16:52 ` [PATCH] i386: int3 adjustment Jan Beulich
2005-11-09  8:37   ` [PATCH 1/2] i386: double fault adjustment - introduce THREAD_ORDER Jan Beulich
2005-11-09  8:38     ` [PATCH 2/2] i386: double fault adjustment Jan Beulich
2005-11-08 16:54 ` Jan Beulich [this message]
2005-11-08 16:55 ` [PATCH] i386: handle NMI case in IPI sending Jan Beulich
2005-11-08 16:55 ` [PATCH] i386: stand-alone CONFIG_PAE Jan Beulich
2005-11-08 17:02   ` Adrian Bunk
2005-11-08 17:10     ` Jan Beulich
2005-11-08 16:57 ` [PATCH] i386: adjust page fault handling Jan Beulich
2005-11-08 21:22 ` [PATCH] i386: export genapic again Randy.Dunlap
2005-11-09  8:18   ` Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4370E647.76F0.0078.0@novell.com \
    --to=jbeulich@novell.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.