lkml.org 
[lkml]   [2010]   [Mar]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] ptrace: kill BKL in ptrace syscall
    Date
    From: Arnd Bergmann <arnd@arndb.de>

    The comment suggests that this usage is stale. There is no bkl in the
    exec path so if there is a race lurking there, the bkl in ptrace is
    not going to help in this regard.

    Overview of the possibility of "accidental" races this bkl might
    protect:

    - ptrace_traceme() is protected against task removal and concurrent
    read/write on current->ptrace as it locks write tasklist_lock.

    - arch_ptrace_attach() is serialized by ptrace_traceme() against
    concurrent PTRACE_TRACEME or PTRACE_ATTACH

    - ptrace_attach() is protected the same way ptrace_traceme() and
    in turn serializes arch_ptrace_attach()

    - ptrace_check_attach() does its own well described serializing too.

    There is no obvious race here.

    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    ---
    kernel/ptrace.c | 10 ----------
    1 files changed, 0 insertions(+), 10 deletions(-)

    diff --git a/kernel/ptrace.c b/kernel/ptrace.c
    index 42ad8ae..5357502 100644
    --- a/kernel/ptrace.c
    +++ b/kernel/ptrace.c
    @@ -666,10 +666,6 @@ SYSCALL_DEFINE4(ptrace, long, request, long, pid, long, addr, long, data)
    struct task_struct *child;
    long ret;

    - /*
    - * This lock_kernel fixes a subtle race with suid exec
    - */
    - lock_kernel();
    if (request == PTRACE_TRACEME) {
    ret = ptrace_traceme();
    if (!ret)
    @@ -703,7 +699,6 @@ SYSCALL_DEFINE4(ptrace, long, request, long, pid, long, addr, long, data)
    out_put_task_struct:
    put_task_struct(child);
    out:
    - unlock_kernel();
    return ret;
    }

    @@ -813,10 +808,6 @@ asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
    struct task_struct *child;
    long ret;

    - /*
    - * This lock_kernel fixes a subtle race with suid exec
    - */
    - lock_kernel();
    if (request == PTRACE_TRACEME) {
    ret = ptrace_traceme();
    goto out;
    @@ -846,7 +837,6 @@ asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
    out_put_task_struct:
    put_task_struct(child);
    out:
    - unlock_kernel();
    return ret;
    }
    #endif /* CONFIG_COMPAT */
    --
    1.6.2.3


    \
     
     \ /
      Last update: 2010-03-28 23:41    [W:0.024 / U:58.388 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site