[RFC PATCH 00/12 v3] ptrace: introduce task_struct->ptrace_cxt

From: Oleg Nesterov
Date: Sat May 30 2009 - 18:43:54 EST


Changes:

04/12: move kfree() outside of task_lock() in alloc_ptrace_context().
But I misread your sugesstion:

> task_lock(tsk);
> if (likely(!tsk->ptrace_ctx)) {
> tsk->ptrace_ctx = ptrace_ctx;
> task_unlock(tsk);
> return 0;
> }
>
> task_unlock(tsk);
> kfree(ptrace_ctx);

Just can't do that. I hate multiple unlocks very much. So it
becomes:

task_lock(tsk);
if (likely(!tsk->ptrace_ctx)) {
tsk->ptrace_ctx = ptrace_ctx;
ptrace_ctx = NULL;
}
task_unlock(tsk);
kfree(ptrace_ctx);

kfree(NULL) is specially allowed.


05/12: Add the comment about tracehook_init_task to ptrace_init_task().

I didn't change the original comment, but imho it is confusing.
"immediately after adding @child to its parent's children list"
does not matter. What does matter, is that it is called before
this child is visible to the user-space and thus the unconditional
ptrace_link() is safe: nobody could attach before us.


08/12: No changes, but I think it better to change format_mca_init_stack()
right now. Imho it has nothing to do with tracehooks and it is the
last user of ->parent (except perhaps there are some in arch/ code
which should be tracehookfied).


09/12: Remove the stale "pt_" from the changelog.

Oleg.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/