|
@@ -259,14 +259,12 @@ static inline void tracehook_finish_clone(struct task_struct *child,
|
|
|
|
|
|
/**
|
|
|
* tracehook_report_clone - in parent, new child is about to start running
|
|
|
- * @trace: return value from tracehook_prepare_clone()
|
|
|
* @regs: parent's user register state
|
|
|
* @clone_flags: flags from parent's system call
|
|
|
* @pid: new child's PID in the parent's namespace
|
|
|
* @child: new child task
|
|
|
*
|
|
|
- * Called after a child is set up, but before it has been started
|
|
|
- * running. @trace is the value returned by tracehook_prepare_clone().
|
|
|
+ * Called after a child is set up, but before it has been started running.
|
|
|
* This is not a good place to block, because the child has not started
|
|
|
* yet. Suspend the child here if desired, and then block in
|
|
|
* tracehook_report_clone_complete(). This must prevent the child from
|
|
@@ -276,13 +274,14 @@ static inline void tracehook_finish_clone(struct task_struct *child,
|
|
|
*
|
|
|
* Called with no locks held, but the child cannot run until this returns.
|
|
|
*/
|
|
|
-static inline void tracehook_report_clone(int trace, struct pt_regs *regs,
|
|
|
+static inline void tracehook_report_clone(struct pt_regs *regs,
|
|
|
unsigned long clone_flags,
|
|
|
pid_t pid, struct task_struct *child)
|
|
|
{
|
|
|
- if (unlikely(trace) || unlikely(clone_flags & CLONE_PTRACE)) {
|
|
|
+ if (unlikely(task_ptrace(child))) {
|
|
|
/*
|
|
|
- * The child starts up with an immediate SIGSTOP.
|
|
|
+ * 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);
|