aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleg Nesterov <[email protected]>2012-03-23 15:02:40 -0700
committerLinus Torvalds <[email protected]>2012-03-23 16:58:40 -0700
commitb1845ff53f1a9eadba005ae53dfe60ab00dfe83b (patch)
tree1c38877029c0ffe0844cbbe7b0e022e8f79b6235
parent15cab952139404d0e593cb1aaab0a3547ac0f95b (diff)
ptrace: don't send SIGTRAP on exec if SEIZED
ptrace_event(PTRACE_EVENT_EXEC) sends SIGTRAP if PT_TRACE_EXEC is not set. This is because this SIGTRAP predates PTRACE_O_TRACEEXEC option, we do not need/want this with PT_SEIZED which can set the options during attach. Suggested-by: Pedro Alves <[email protected]> Signed-off-by: Oleg Nesterov <[email protected]> Cc: Chris Evans <[email protected]> Cc: Indan Zupancic <[email protected]> Cc: Denys Vlasenko <[email protected]> Cc: Tejun Heo <[email protected]> Cc: Pedro Alves <[email protected]> Cc: Jan Kratochvil <[email protected]> Cc: Steven Rostedt <[email protected]> Cc: Frederic Weisbecker <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
-rw-r--r--include/linux/ptrace.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
index c2f1f6a5fcb8..6fdb196caa3e 100644
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
@@ -199,9 +199,10 @@ static inline void ptrace_event(int event, unsigned long message)
if (unlikely(ptrace_event_enabled(current, event))) {
current->ptrace_message = message;
ptrace_notify((event << 8) | SIGTRAP);
- } else if (event == PTRACE_EVENT_EXEC && unlikely(current->ptrace)) {
+ } else if (event == PTRACE_EVENT_EXEC) {
/* legacy EXEC report via SIGTRAP */
- send_sig(SIGTRAP, current, 0);
+ if ((current->ptrace & (PT_PTRACED|PT_SEIZED)) == PT_PTRACED)
+ send_sig(SIGTRAP, current, 0);
}
}