[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