X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=kernel%2Fptrace.c;h=3eca7a55f2ee8b13fb2fb6f3e09ea2d7a685acaf;hb=2cde4afacad1d66a129ad8787c01ce122382559a;hp=1653d35419a1cdd60aae7af2b592254fcc125273;hpb=7664732315c97f48dba9d1e7339ad16fc5a320ac;p=linux-2.6 diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 1653d35419..3eca7a55f2 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c @@ -142,7 +142,7 @@ static int may_attach(struct task_struct *task) return -EPERM; smp_rmb(); if (task->mm) - dumpable = task->mm->dumpable; + dumpable = get_dumpable(task->mm); if (!dumpable && !capable(CAP_SYS_PTRACE)) return -EPERM; @@ -233,6 +233,7 @@ int ptrace_detach(struct task_struct *child, unsigned int data) /* Architecture-specific hardware disable .. */ ptrace_disable(child); + clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); write_lock_irq(&tasklist_lock); /* protect against de_thread()->release_task() */ @@ -501,3 +502,11 @@ int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data) return -EIO; return put_user(tmp, (unsigned long __user *)data); } + +int generic_ptrace_pokedata(struct task_struct *tsk, long addr, long data) +{ + int copied; + + copied = access_process_vm(tsk, addr, &data, sizeof(data), 1); + return (copied == sizeof(data)) ? 0 : -EIO; +}