|
@@ -364,8 +364,14 @@ unlock_creds:
|
|
|
mutex_unlock(&task->signal->cred_guard_mutex);
|
|
|
out:
|
|
|
if (!retval) {
|
|
|
- wait_on_bit(&task->jobctl, JOBCTL_TRAPPING_BIT,
|
|
|
- TASK_UNINTERRUPTIBLE);
|
|
|
+ /*
|
|
|
+ * We do not bother to change retval or clear JOBCTL_TRAPPING
|
|
|
+ * if wait_on_bit() was interrupted by SIGKILL. The tracer will
|
|
|
+ * not return to user-mode, it will exit and clear this bit in
|
|
|
+ * __ptrace_unlink() if it wasn't already cleared by the tracee;
|
|
|
+ * and until then nobody can ptrace this task.
|
|
|
+ */
|
|
|
+ wait_on_bit(&task->jobctl, JOBCTL_TRAPPING_BIT, TASK_KILLABLE);
|
|
|
proc_ptrace_connector(task, PTRACE_ATTACH);
|
|
|
}
|
|
|
|