patch-2.4.10 linux/kernel/ptrace.c

Next file: linux/kernel/sched.c
Previous file: linux/kernel/printk.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.9/linux/kernel/ptrace.c linux/kernel/ptrace.c
@@ -42,6 +42,8 @@
 
 	/* Go */
 	task->ptrace |= PT_PTRACED;
+	if (capable(CAP_SYS_PTRACE))
+		task->ptrace |= PT_PTRACE_CAP;
 	task_unlock(task);
 
 	write_lock_irq(&tasklist_lock);
@@ -60,6 +62,27 @@
 	return -EPERM;
 }
 
+int ptrace_detach(struct task_struct *child, unsigned int data)
+{
+	if ((unsigned long) data > _NSIG)
+		return	-EIO;
+
+	/* Architecture-specific hardware disable .. */
+	ptrace_disable(child);
+
+	/* .. re-parent .. */
+	child->ptrace = 0;
+	child->exit_code = data;
+	write_lock_irq(&tasklist_lock);
+	REMOVE_LINKS(child);
+	child->p_pptr = child->p_opptr;
+	SET_LINKS(child);
+	write_unlock_irq(&tasklist_lock);
+
+	/* .. and wake it up. */
+	wake_up_process(child);
+	return 0;
+}
 
 /*
  * Access another process' address space, one page at a time.

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)