All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [RESEND PATCH tip] x86/idt: Remove X86_TRAP_BP initialization in idt_setup_traps()
@ 2017-11-08 19:28 Yonghong Song
  2017-11-08 20:10 ` [tip:x86/urgent] " tip-bot for Yonghong Song
  0 siblings, 1 reply; 2+ messages in thread
From: Yonghong Song @ 2017-11-08 19:28 UTC (permalink / raw
  To: mingo, tglx, oleg, luto, hpa, a.p.zijlstra, linux-kernel, x86,
	ast
  Cc: kernel-team

Commit b70543a0b2b6("x86/idt: Move regular trap init to tables")
moves regular trap init for each trap vector into a table based
initialization. It introduced the initialization for vector
X86_TRAP_BP which was not in the original change and it breaks
uprobe functionality for x86_32. A program with uprobe
instrumented can have segfault on x86_32 instead of normal finish.
Uprobe still works on x86_64 even with this commit.

This patch removes X86_TRAP_BP from the structure def_idts
which is used in idt_setup_traps(). It also removes a redundant
entry for X86_TRAP_NMI in def_idts. Tested on both x86_64 and x86_32,
uprobe works fine.

Fixes: b70543a0b2b6("x86/idt: Move regular trap init to tables")
Reported-and-tested-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
---
 arch/x86/kernel/idt.c | 2 --
 1 file changed, 2 deletions(-)

[RESEND with adding linux-kernel@vger.kernel.org as the recipient.]

diff --git a/arch/x86/kernel/idt.c b/arch/x86/kernel/idt.c
index 723fa97..d985cef 100644
--- a/arch/x86/kernel/idt.c
+++ b/arch/x86/kernel/idt.c
@@ -92,8 +92,6 @@ static const __initdata struct idt_data def_idts[] = {
 	INTG(X86_TRAP_DF,		double_fault),
 #endif
 	INTG(X86_TRAP_DB,		debug),
-	INTG(X86_TRAP_NMI,		nmi),
-	INTG(X86_TRAP_BP,		int3),
 
 #ifdef CONFIG_X86_MCE
 	INTG(X86_TRAP_MC,		&machine_check),
-- 
2.9.5

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [tip:x86/urgent] x86/idt: Remove X86_TRAP_BP initialization in idt_setup_traps()
  2017-11-08 19:28 [RESEND PATCH tip] x86/idt: Remove X86_TRAP_BP initialization in idt_setup_traps() Yonghong Song
@ 2017-11-08 20:10 ` tip-bot for Yonghong Song
  0 siblings, 0 replies; 2+ messages in thread
From: tip-bot for Yonghong Song @ 2017-11-08 20:10 UTC (permalink / raw
  To: linux-tip-commits; +Cc: hpa, linux-kernel, yhs, mingo, tglx

Commit-ID:  d0cd64b02aa854d68ce517cb7da1fe4e4fff2653
Gitweb:     https://git.kernel.org/tip/d0cd64b02aa854d68ce517cb7da1fe4e4fff2653
Author:     Yonghong Song <yhs@fb.com>
AuthorDate: Wed, 8 Nov 2017 11:28:45 -0800
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Wed, 8 Nov 2017 21:05:23 +0100

x86/idt: Remove X86_TRAP_BP initialization in idt_setup_traps()

Commit b70543a0b2b6("x86/idt: Move regular trap init to tables") moves
regular trap init for each trap vector into a table based
initialization. It introduced the initialization for vector X86_TRAP_BP
which was not in the code which it replaced. This breaks uprobe
functionality for x86_32; the probed program segfaults instead of handling
the probe proper.

The reason for this is that TRAP_BP is set up as system interrupt gate
(DPL3) in the early IDT and then replaced by a regular interrupt gate
(DPL0) in idt_setup_traps(). The DPL0 restriction causes the int3 trap
to fail with a #GP resulting in a SIGSEGV of the probed program.

On 64bit this does not cause a problem because the IDT entry is replaced
with a system interrupt gate (DPL3) with interrupt stack afterwards.

Remove X86_TRAP_BP from the def_idts table which is used in
idt_setup_traps(). Remove a redundant entry for X86_TRAP_NMI in def_idts
while at it. Tested on both x86_64 and x86_32.

[ tglx: Amended changelog with a description of the root cause ]

Fixes: b70543a0b2b6("x86/idt: Move regular trap init to tables")
Reported-and-tested-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: a.p.zijlstra@chello.nl
Cc: ast@fb.com
Cc: oleg@redhat.com
Cc: luto@kernel.org
Cc: kernel-team@fb.com
Link: https://lkml.kernel.org/r/20171108192845.552709-1-yhs@fb.com

---
 arch/x86/kernel/idt.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/arch/x86/kernel/idt.c b/arch/x86/kernel/idt.c
index 6107ee1..014cb2f 100644
--- a/arch/x86/kernel/idt.c
+++ b/arch/x86/kernel/idt.c
@@ -92,8 +92,6 @@ static const __initdata struct idt_data def_idts[] = {
 	INTG(X86_TRAP_DF,		double_fault),
 #endif
 	INTG(X86_TRAP_DB,		debug),
-	INTG(X86_TRAP_NMI,		nmi),
-	INTG(X86_TRAP_BP,		int3),
 
 #ifdef CONFIG_X86_MCE
 	INTG(X86_TRAP_MC,		&machine_check),

^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-11-08 20:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-08 19:28 [RESEND PATCH tip] x86/idt: Remove X86_TRAP_BP initialization in idt_setup_traps() Yonghong Song
2017-11-08 20:10 ` [tip:x86/urgent] " tip-bot for Yonghong Song

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.