[PATCH 37] introduce ptrace_event->ev_options

Oleg Nesterov oleg at redhat.com
Tue Sep 15 18:48:58 UTC 2009


When the tracee resumes from TASK_TRACED, context->options can be changed.

Introduce ptrace_event->ev_options. If a callback sets ->ev_options != 0,
do_ptrace_resume() checks that context->options matches or discards the
event.

This will be used to validate PTRACE_EVENT_VFORK_DONE and SYSCALL_EXIT
reports.

---

 kernel/ptrace.c |   12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

--- PU/kernel/ptrace.c~37_EV_OPTIONS	2009-09-15 18:05:42.000000000 +0200
+++ PU/kernel/ptrace.c	2009-09-15 18:06:53.000000000 +0200
@@ -31,6 +31,8 @@ struct ptrace_event {
 	int		ev_code;
 	unsigned long	ev_message;
 	resume_func_t	ev_resume;
+
+	int		ev_options;
 };
 
 struct ptrace_context {
@@ -1007,9 +1009,13 @@ static void do_ptrace_resume(struct utra
 		if (ev->ev_resume)
 			ev->ev_resume(engine, tracee, data);
 
-		if (!ev_empty(context)) {
-			do_ptrace_notify_stop(context, tracee);
-			return;
+		while (!ev_empty(context)) {
+			int ev_o = ev_current(context)->ev_options;
+			if (!ev_o || (ev_o & context->options)) {
+				do_ptrace_notify_stop(context, tracee);
+				return;
+			}
+			ev_pop(context);
 		}
 	}
 




More information about the utrace-devel mailing list