The new ptrace-tests/tests/syscall-from-clone.c fails as expected. Because, following your suggestion, I postponed the "final" changes in ptrace_report_clone() until we fix the more important things. But since we have the new test-case, add the trivial fix.
ptrace_report_clone() still needs changes! Will do later. --- kernel/ptrace.c | 4 ++++ 1 file changed, 4 insertions(+) --- PU/kernel/ptrace.c~53_CLONE_ATTACH_SYSCALL 2009-09-23 20:49:33.000000000 +0200 +++ PU/kernel/ptrace.c 2009-09-23 20:51:47.000000000 +0200 @@ -99,6 +99,8 @@ void __ptrace_link(struct task_struct *c static const struct utrace_engine_ops ptrace_utrace_ops; /* forward decl */ static int ptrace_attach_task(struct task_struct *tracee, int options); static void ptrace_abort_attach(struct task_struct *tracee); +static void ptrace_resume_ck_syscall(struct utrace_engine *engine, + struct task_struct *tracee, long data); static struct utrace_engine *ptrace_lookup_engine(struct task_struct *tracee) { @@ -223,6 +225,7 @@ static u32 ptrace_report_clone(enum utra ev->ev_message = child->pid; ev->ev_code = (event << 8) | SIGTRAP; + ev->ev_resume = ptrace_resume_ck_syscall; ret = UTRACE_STOP; } @@ -234,6 +237,7 @@ static u32 ptrace_report_clone(enum utra ev->ev_message = child->pid; ev->ev_options = PTRACE_O_TRACEVFORKDONE; ev->ev_code = (PTRACE_EVENT_VFORK_DONE << 8) | SIGTRAP; + ev->ev_resume = ptrace_resume_ck_syscall; ret = UTRACE_STOP; }