lkml.org 
[lkml]   [2007]   [Aug]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] kill an obsolete sub-thread-ptrace stuff
    There is a couple of subtle checks which were needed to handle ptracing from
    the same thread group. This was deprecated a long ago, imho this code just
    complicates the understanding.

    And, the "->parent->signal->flags & SIGNAL_GROUP_EXIT" check in exit_notify()
    is not right. SIGNAL_GROUP_EXIT can mean exec(), not exit_group(). This means
    ptracer can lose a ptraced zombie on exec(). Minor problem, but still the bug.

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

    --- t/kernel/exit.c~PT_TG 2007-08-03 18:05:52.000000000 +0400
    +++ t/kernel/exit.c 2007-08-03 21:10:40.000000000 +0400
    @@ -802,7 +802,7 @@ static void exit_notify(struct task_stru
    __kill_pgrp_info(SIGCONT, SEND_SIG_PRIV, pgrp);
    }

    - /* Let father know we died
    + /* Let father know we died
    *
    * Thread signals are configurable, but you aren't going to use
    * that to send signals to arbitary processes.
    @@ -815,9 +815,7 @@ static void exit_notify(struct task_stru
    * If our self_exec id doesn't match our parent_exec_id then
    * we have changed execution domain as these two values started
    * the same after a fork.
    - *
    */
    -
    if (tsk->exit_signal != SIGCHLD && tsk->exit_signal != -1 &&
    ( tsk->parent_exec_id != t->self_exec_id ||
    tsk->self_exec_id != tsk->parent_exec_id)
    @@ -837,9 +835,7 @@ static void exit_notify(struct task_stru
    }

    state = EXIT_ZOMBIE;
    - if (tsk->exit_signal == -1 &&
    - (likely(tsk->ptrace == 0) ||
    - unlikely(tsk->parent->signal->flags & SIGNAL_GROUP_EXIT)))
    + if (tsk->exit_signal == -1 && likely(!tsk->ptrace))
    state = EXIT_DEAD;
    tsk->exit_state = state;

    --- t/kernel/signal.c~PT_TG 2007-07-28 16:58:17.000000000 +0400
    +++ t/kernel/signal.c 2007-08-03 21:11:59.000000000 +0400
    @@ -1561,10 +1561,6 @@ static inline int may_ptrace_stop(void)
    (current->ptrace & PT_ATTACHED)))
    return 0;

    - if (unlikely(current->signal == current->parent->signal) &&
    - unlikely(current->signal->flags & SIGNAL_GROUP_EXIT))
    - return 0;
    -
    /*
    * Are we in the middle of do_coredump?
    * If so and our tracer is also part of the coredump stopping
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-08-03 23:07    [W:0.021 / U:0.396 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site