From: Frederic Weisbecker <fweisbec@gmail.com>
To: Ingo Molnar <mingo@elte.hu>
Cc: LKML <linux-kernel@vger.kernel.org>,
Masami Hiramatsu <mhiramat@redhat.com>,
Steven Rostedt <rostedt@goodmis.org>,
Li Zefan <lizf@cn.fujitsu.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
Jim Keniston <jkenisto@us.ibm.com>, Ingo Molnar <mingo@elte.hu>
Subject: [PATCH 10/24] kprobes/x86-32: Move irq-exit functions to kprobes section
Date: Tue, 22 Sep 2009 21:38:08 +0200 [thread overview]
Message-ID: <1253648302-5771-11-git-send-email-fweisbec@gmail.com> (raw)
In-Reply-To: <1253648302-5771-1-git-send-email-fweisbec@gmail.com>
From: Masami Hiramatsu <mhiramat@redhat.com>
Move irq-exit functions to .kprobes.text section to protect against
kprobes recursion.
When I ran kprobe stress test on x86-32, I found below symbols
cause unrecoverable recursive probing:
ret_from_exception
ret_from_intr
check_userspace
restore_all
restore_all_notrace
restore_nocheck
irq_return
And also, I found some interrupt/exception entry points that
cause similar problems.
This patch moves those symbols (including their container functions)
to .kprobes.text section to prevent any kprobes probing.
Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Jim Keniston <jkenisto@us.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>
LKML-Reference: <20090908164755.24050.81182.stgit@dhcp-100-2-132.bos.redhat.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
---
arch/x86/kernel/entry_32.S | 24 ++++++++++++++++++++++++
kernel/kprobes.c | 2 ++
2 files changed, 26 insertions(+), 0 deletions(-)
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
index c097e7d..beb30da 100644
--- a/arch/x86/kernel/entry_32.S
+++ b/arch/x86/kernel/entry_32.S
@@ -334,6 +334,10 @@ ENTRY(ret_from_fork)
END(ret_from_fork)
/*
+ * Interrupt exit functions should be protected against kprobes
+ */
+ .pushsection .kprobes.text, "ax"
+/*
* Return to user mode is not as complex as all this looks,
* but we want the default path for a system call return to
* go as quickly as possible which is why some of this is
@@ -383,6 +387,10 @@ need_resched:
END(resume_kernel)
#endif
CFI_ENDPROC
+/*
+ * End of kprobes section
+ */
+ .popsection
/* SYSENTER_RETURN points to after the "sysenter" instruction in
the vsyscall page. See vsyscall-sysentry.S, which defines the symbol. */
@@ -513,6 +521,10 @@ sysexit_audit:
PTGS_TO_GS_EX
ENDPROC(ia32_sysenter_target)
+/*
+ * syscall stub including irq exit should be protected against kprobes
+ */
+ .pushsection .kprobes.text, "ax"
# system call handler stub
ENTRY(system_call)
RING0_INT_FRAME # can't unwind into user space anyway
@@ -705,6 +717,10 @@ syscall_badsys:
jmp resume_userspace
END(syscall_badsys)
CFI_ENDPROC
+/*
+ * End of kprobes section
+ */
+ .popsection
/*
* System calls that need a pt_regs pointer.
@@ -814,6 +830,10 @@ common_interrupt:
ENDPROC(common_interrupt)
CFI_ENDPROC
+/*
+ * Irq entries should be protected against kprobes
+ */
+ .pushsection .kprobes.text, "ax"
#define BUILD_INTERRUPT3(name, nr, fn) \
ENTRY(name) \
RING0_INT_FRAME; \
@@ -980,6 +1000,10 @@ ENTRY(spurious_interrupt_bug)
jmp error_code
CFI_ENDPROC
END(spurious_interrupt_bug)
+/*
+ * End of kprobes section
+ */
+ .popsection
ENTRY(kernel_thread_helper)
pushl $0 # fake return address for unwinder
diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index 3267d90..00d01b0 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -91,6 +91,8 @@ static spinlock_t *kretprobe_table_lock_ptr(unsigned long hash)
static struct kprobe_blackpoint kprobe_blacklist[] = {
{"preempt_schedule",},
{"native_get_debugreg",},
+ {"irq_entries_start",},
+ {"common_interrupt",},
{NULL} /* Terminator */
};
--
1.6.2.3
next prev parent reply other threads:[~2009-09-22 19:41 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-09-22 19:37 [GIT PULL] tracing/kprobes: Kprobes core/tracing/profiling updates Frederic Weisbecker
2009-09-22 19:37 ` [PATCH 01/24] kprobes/x86: Call BUG() when reentering probe into KPROBES_HIT_SS Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 02/24] kprobes/x86-64: Allow to reenter probe on post_handler Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 03/24] kprobes/x86: Fix to add __kprobes to in-kernel fault handing functions Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 04/24] kprobes: Fix to add __kprobes to notify_die Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 05/24] kprobes/x86-64: Fix to move common_interrupt to .kprobes.text Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 06/24] kprobes: Prohibit to probe native_get_debugreg Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 07/24] x86: Allow x86-32 instruction decoder selftest on x86-64 Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 08/24] x86: Remove unused config macros from instruction decoder selftest Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 09/24] x86: Add MMX support for instruction decoder Frederic Weisbecker
2009-09-22 19:38 ` Frederic Weisbecker [this message]
2009-09-22 19:38 ` [PATCH 11/24] x86/ptrace: Fix regs_get_argument_nth() to add correct offset Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 12/24] tracing/kprobes: Fix probe offset to be unsigned Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 13/24] tracing/kprobes: Cleanup kprobe tracer code Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 14/24] tracing/kprobes: Add event profiling support Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 15/24] tracing/kprobes: Add argument name support Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 16/24] tracing/kprobes: Show event name in trace output Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 17/24] tracing/kprobes: Support custom subsystem for each kprobe event Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 18/24] tracing/kprobes: Fix trace_probe registration order Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 19/24] ftrace: Fix trace_add_event_call() to initialize list Frederic Weisbecker
2009-09-23 1:11 ` Li Zefan
2009-09-23 8:16 ` Masami Hiramatsu
2009-09-22 19:38 ` [PATCH 20/24] ftrace: Fix trace_remove_event_call() to lock trace_event_mutex Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 21/24] tracing/kprobes: Add probe handler dispatcher to support perf and ftrace concurrent use Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 22/24] tracing/kprobes: Fix profiling alignment for perf_counter buffer Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 23/24] tracing/kprobes: Disable kprobe events by default after creation Frederic Weisbecker
2009-09-22 19:38 ` [PATCH 24/24] kprobes: Prevent re-registration of the same kprobe Frederic Weisbecker
2009-09-23 10:52 ` [GIT PULL] tracing/kprobes: Kprobes core/tracing/profiling updates Ingo Molnar
2009-09-23 12:04 ` Frédéric Weisbecker
2009-09-23 16:42 ` Masami Hiramatsu
2009-09-23 21:24 ` Frederic Weisbecker
2009-09-23 21:46 ` Ingo Molnar
2009-09-23 22:13 ` Ingo Molnar
2009-09-23 22:23 ` Frederic Weisbecker
2009-09-24 0:06 ` Masami Hiramatsu
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=1253648302-5771-11-git-send-email-fweisbec@gmail.com \
--to=fweisbec@gmail.com \
--cc=ananth@in.ibm.com \
--cc=jkenisto@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lizf@cn.fujitsu.com \
--cc=mhiramat@redhat.com \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®