[PATCH 54] ptrace_resume: don't ignore "data" argument
Oleg Nesterov
oleg at redhat.com
Thu Oct 1 22:45:27 UTC 2009
ptrace_resume(data) should process "data" in case of
PTRACE_EVENT_SYSCALL and PTRACE_EVENT_SIGNAL events.
---
kernel/ptrace.c | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
--- PU/kernel/ptrace.c~54_RESUME_USE_DATA 2009-10-01 21:53:01.000000000 +0200
+++ PU/kernel/ptrace.c 2009-10-01 23:06:36.000000000 +0200
@@ -205,18 +205,6 @@ static u32 ptrace_report_clone(enum utra
return ret;
}
-static void ptrace_resume_syscall(struct utrace_engine *engine,
- struct task_struct *tracee, long data)
-{
- if (data) {
- // XXX: until do_send_sig_info()
- read_lock(&tasklist_lock);
- if (tracee->signal)
- send_sig(data, tracee, 1);
- read_unlock(&tasklist_lock);
- }
-}
-
static u32 ptrace_report_syscall_entry(u32 action,
struct utrace_engine *engine,
struct task_struct *task,
@@ -276,10 +264,9 @@ static u32 ptrace_report_exec(enum utrac
/*
* XXX: This all is wrong/racy/crashable
*/
-static void ptrace_resume_signal(struct utrace_engine *engine,
- struct task_struct *tracee, long data)
+static void ptrace_resume_signal(struct ptrace_context* context, int data)
{
- siginfo_t *info = ptrace_context(engine)->siginfo;
+ siginfo_t *info = context->siginfo;
if (WARN_ON(!info))
return;
@@ -891,6 +878,19 @@ static void do_ptrace_resume(struct utra
{
struct ptrace_context *context = ptrace_context(engine);
+ switch (context->ev_name) {
+ case 0:
+ // XXX: JCTL stop
+ break;
+ case PTRACE_EVENT_SYSCALL:
+ if (data)
+ send_sig_info(data, SEND_SIG_PRIV, tracee);
+ break;
+ case PTRACE_EVENT_SIGNAL:
+ ptrace_resume_signal(context, data);
+ break;
+ }
+
context->ev_name = 0;
context->resume = action;
ptrace_wake_up(engine, tracee, action);
More information about the utrace-devel
mailing list