]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - include/linux/tracehook.h
tracehook: tracehook_tracer_task
[net-next-2.6.git] / include / linux / tracehook.h
index 9a5b3be2503ac05f84310f76754699231dbb7bfd..6468ca0fe69b21a3d16e43b67f40b5591eb7dd8e 100644 (file)
@@ -72,6 +72,24 @@ static inline int tracehook_unsafe_exec(struct task_struct *task)
        return unsafe;
 }
 
+/**
+ * tracehook_tracer_task - return the task that is tracing the given task
+ * @tsk:               task to consider
+ *
+ * Returns NULL if noone is tracing @task, or the &struct task_struct
+ * pointer to its tracer.
+ *
+ * Must called under rcu_read_lock().  The pointer returned might be kept
+ * live only by RCU.  During exec, this may be called with task_lock()
+ * held on @task, still held from when tracehook_unsafe_exec() was called.
+ */
+static inline struct task_struct *tracehook_tracer_task(struct task_struct *tsk)
+{
+       if (task_ptrace(tsk) & PT_PTRACED)
+               return rcu_dereference(tsk->parent);
+       return NULL;
+}
+
 /**
  * tracehook_report_exec - a successful exec was completed
  * @fmt:               &struct linux_binfmt that performed the exec