lkml.org 
[lkml]   [2011]   [May]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/9] ptrace: ptrace_check_attach(): rename @kill to @ignore_state and add comments
    Date
    PTRACE_INTERRUPT is going to be added which should also skip
    task_is_traced() check in ptrace_check_attach(). Rename @kill to
    @ignore_state and make it bool. Add function comment while at it.

    This patch doesn't introduce any behavior difference.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    ---
    include/linux/ptrace.h | 2 +-
    kernel/ptrace.c | 24 +++++++++++++++++++-----
    2 files changed, 20 insertions(+), 6 deletions(-)
    diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
    index a1147e5..974e187 100644
    --- a/include/linux/ptrace.h
    +++ b/include/linux/ptrace.h
    @@ -105,7 +105,7 @@ extern long arch_ptrace(struct task_struct *child, long request,
    extern int ptrace_readdata(struct task_struct *tsk, unsigned long src, char __user *dst, int len);
    extern int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long dst, int len);
    extern void ptrace_disable(struct task_struct *);
    -extern int ptrace_check_attach(struct task_struct *task, int kill);
    +extern int ptrace_check_attach(struct task_struct *task, bool ignore_state);
    extern int ptrace_request(struct task_struct *child, long request,
    unsigned long addr, unsigned long data);
    extern void ptrace_notify(int exit_code);
    diff --git a/kernel/ptrace.c b/kernel/ptrace.c
    index 30de03b..5cd77a8 100644
    --- a/kernel/ptrace.c
    +++ b/kernel/ptrace.c
    @@ -96,10 +96,24 @@ void __ptrace_unlink(struct task_struct *child)
    spin_unlock(&child->sighand->siglock);
    }

    -/*
    - * Check that we have indeed attached to the thing..
    +/**
    + * ptrace_check_attach - check whether ptracee is ready for ptrace operation
    + * @child: ptracee to check for
    + * @ignore_state: don't check whether @child is currently %TASK_TRACED
    + *
    + * Check whether @child is being ptraced by %current and ready for further
    + * ptrace operations. If @ignore_state is %false, @child also should be in
    + * %TASK_TRACED state and on return the child is guaranteed to be traced
    + * and not executing. If @ignore_state is %true, @child can be in any
    + * state.
    + *
    + * CONTEXT:
    + * Grabs and releases tasklist_lock and @child->sighand->siglock.
    + *
    + * RETURNS:
    + * 0 on success, -ESRCH if %child is not ready.
    */
    -int ptrace_check_attach(struct task_struct *child, int kill)
    +int ptrace_check_attach(struct task_struct *child, bool ignore_state)
    {
    int ret = -ESRCH;

    @@ -118,13 +132,13 @@ int ptrace_check_attach(struct task_struct *child, int kill)
    */
    spin_lock_irq(&child->sighand->siglock);
    WARN_ON_ONCE(task_is_stopped(child));
    - if (task_is_traced(child) || kill)
    + if (task_is_traced(child) || ignore_state)
    ret = 0;
    spin_unlock_irq(&child->sighand->siglock);
    }
    read_unlock(&tasklist_lock);

    - if (!ret && !kill)
    + if (!ret && !ignore_state)
    ret = wait_task_inactive(child, TASK_TRACED) ? 0 : -ESRCH;

    /* All systems go.. */
    --
    1.7.1


    \
     
     \ /
      Last update: 2011-05-13 17:51    [from the cache]
    ©2003-2014 Jasper Spaans. Advertise on this site