[PATCH 110] revert the clone() related changes in tracehook.h

Oleg Nesterov oleg at redhat.com
Wed Oct 21 18:27:28 UTC 2009


The changes in tracehook_prepare_clone() and tracehook_report_clone()
are no longer needed, we can revert them to lessen the size of the
first patch(es) and simplify the review/merging.

The reverted changes were necessary before, now

	- tracehook_prepare_clone()

	  none of "->ptrace & PT_" conditions can be true,
	  ->ptrace can contain only PT_PTRACED or PT_PTRACE_CAP

	- tracehook_report_clone()

	  task_ptrace(child) is not possible at this point

see also the next patches.

---

 include/linux/tracehook.h |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

--- PU/include/linux/tracehook.h~110_REVERT_CLONE_CHANGES_IN_H	2009-09-02 20:30:00.000000000 +0200
+++ PU/include/linux/tracehook.h	2009-10-21 19:20:39.000000000 +0200
@@ -208,6 +208,18 @@ static inline void tracehook_report_exit
  */
 static inline int tracehook_prepare_clone(unsigned clone_flags)
 {
+	if (clone_flags & CLONE_UNTRACED)
+		return 0;
+
+	if (clone_flags & CLONE_VFORK) {
+		if (current->ptrace & PT_TRACE_VFORK)
+			return PTRACE_EVENT_VFORK;
+	} else if ((clone_flags & CSIGNAL) != SIGCHLD) {
+		if (current->ptrace & PT_TRACE_CLONE)
+			return PTRACE_EVENT_CLONE;
+	} else if (current->ptrace & PT_TRACE_FORK)
+		return PTRACE_EVENT_FORK;
+
 	return 0;
 }
 
@@ -252,6 +264,14 @@ static inline void tracehook_report_clon
 {
 	if (unlikely(task_utrace_flags(current) & UTRACE_EVENT(CLONE)))
 		utrace_report_clone(clone_flags, child);
+	if (unlikely(task_ptrace(child))) {
+		/*
+		 * It doesn't matter who attached/attaching to this
+		 * task, the pending SIGSTOP is right in any case.
+		 */
+		sigaddset(&child->pending.signal, SIGSTOP);
+		set_tsk_thread_flag(child, TIF_SIGPENDING);
+	}
 }
 
 /**




More information about the utrace-devel mailing list