lkml.org 
[lkml]   [2008]   [Jun]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH 3/3] ptrace: kill may_ptrace_stop()
Now that ptrace_stop() can't sleep if the tracee was SIGKILL'ed, we don't
need the special mm->core_waiters check in may_ptrace_stop(). It was needed
to prevent the deadlock with the tracer with the same ->mm which waits for
us in coredump_wait()->wait_for_completion(&startup_done), and the the
unkillable tracee waits for PTRACE_CONT from the tracer.

Without this check may_ptrace_stop() becomes trivial and can be removed.

Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>

--- 26-rc2/kernel/signal.c~ 2008-06-15 16:15:46.000000000 +0400
+++ 26-rc2/kernel/signal.c 2008-06-15 17:51:50.000000000 +0400
@@ -1472,26 +1472,6 @@ static void do_notify_parent_cldstop(str
spin_unlock_irqrestore(&sighand->siglock, flags);
}

-static inline int may_ptrace_stop(void)
-{
- if (!likely(current->ptrace & PT_PTRACED))
- return 0;
- /*
- * Are we in the middle of do_coredump?
- * If so and our tracer is also part of the coredump stopping
- * is a deadlock situation, and pointless because our tracer
- * is dead so don't allow us to stop.
- * If SIGKILL was already sent before the caller unlocked
- * ->siglock we must see ->core_waiters != 0. Otherwise it
- * is safe to enter schedule().
- */
- if (unlikely(current->mm->core_waiters) &&
- unlikely(current->mm == current->parent->mm))
- return 0;
-
- return 1;
-}
-
/*
* This must be called with current->sighand->siglock held.
*
@@ -1536,7 +1516,7 @@ static void ptrace_stop(int exit_code, i
__set_current_state(TASK_TRACED);
spin_unlock_irq(&current->sighand->siglock);
read_lock(&tasklist_lock);
- if (may_ptrace_stop()) {
+ if (likely(current->ptrace & PT_PTRACED)) {
do_notify_parent_cldstop(current, CLD_TRAPPED);
read_unlock(&tasklist_lock);
schedule();


\
 
 \ /
  Last update: 2008-06-16 16:25    [W:1.006 / U:0.724 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site