aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorAndy Lutomirski <luto@amacapital.net>2014-11-24 20:39:06 -0500
committerIngo Molnar <mingo@kernel.org>2014-11-25 01:26:55 -0500
commit7ddc6a2199f1da405a2fb68c40db8899b1a8cd87 (patch)
tree9a5488e27fa1bdf55dfdcb2c53bc0f328fc92c41 /arch/x86
parent5d01410fe4d92081f349b013a2e7a95429e4f2c9 (diff)
x86/asm/traps: Disable tracing and kprobes in fixup_bad_iret and sync_regs
These functions can be executed on the int3 stack, so kprobes are dangerous. Tracing is probably a bad idea, too. Fixes: b645af2d5905 ("x86_64, traps: Rework bad_iret") Signed-off-by: Andy Lutomirski <luto@amacapital.net> Cc: <stable@vger.kernel.org> # Backport as far back as it would apply Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Steven Rostedt <rostedt@goodmis.org> Link: http://lkml.kernel.org/r/50e33d26adca60816f3ba968875801652507d0c4.1416870125.git.luto@amacapital.net Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/kernel/traps.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index de801f22128a..07ab8e9733c5 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -387,7 +387,7 @@ NOKPROBE_SYMBOL(do_int3);
387 * for scheduling or signal handling. The actual stack switch is done in 387 * for scheduling or signal handling. The actual stack switch is done in
388 * entry.S 388 * entry.S
389 */ 389 */
390asmlinkage __visible struct pt_regs *sync_regs(struct pt_regs *eregs) 390asmlinkage __visible notrace struct pt_regs *sync_regs(struct pt_regs *eregs)
391{ 391{
392 struct pt_regs *regs = eregs; 392 struct pt_regs *regs = eregs;
393 /* Did already sync */ 393 /* Did already sync */
@@ -413,7 +413,7 @@ struct bad_iret_stack {
413 struct pt_regs regs; 413 struct pt_regs regs;
414}; 414};
415 415
416asmlinkage __visible 416asmlinkage __visible notrace
417struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s) 417struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s)
418{ 418{
419 /* 419 /*
@@ -436,6 +436,7 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s)
436 BUG_ON(!user_mode_vm(&new_stack->regs)); 436 BUG_ON(!user_mode_vm(&new_stack->regs));
437 return new_stack; 437 return new_stack;
438} 438}
439NOKPROBE_SYMBOL(fixup_bad_iret);
439#endif 440#endif
440 441
441/* 442/*