reparent_leader(father, p, dead);
}
list_splice_tail_init(&father->children, &reaper->children);
+diff -Nurp linux-4.1.3-vs2.3.8.2.fakeinit04/kernel/exit.c linux-4.1.3-vs2.3.8.2.fakeinit05/kernel/exit.c
+--- linux-4.1.3-vs2.3.8.2.fakeinit04/kernel/exit.c 2016-01-29 23:56:25.077386945 +0100
++++ linux-4.1.3-vs2.3.8.2.fakeinit05/kernel/exit.c 2016-01-30 00:12:30.693073246 +0100
+@@ -579,8 +579,10 @@ static void forget_original_parent(struc
+ return;
+
+ reaper = find_new_reaper(father, reaper);
+- list_for_each_entry(p, &father->children, sibling) {
+- struct task_struct *this_reaper = reaper;
++ for (p = list_first_entry(&father->children, struct task_struct, sibling);
++ &p->sibling != &father->children;
++ ) {
++ struct task_struct *next, *this_reaper = reaper;
+ if (p == reaper)
+ this_reaper = task_active_pid_ns(reaper)->child_reaper;
+ for_each_thread(p, t) {
+@@ -598,8 +600,11 @@ static void forget_original_parent(struc
+ */
+ if (!same_thread_group(this_reaper, father))
+ reparent_leader(father, p, dead);
++ next = list_next_entry(p, sibling);
++ list_add(&p->sibling, &this_reaper->children);
++ p = next;
+ }
+- list_splice_tail_init(&father->children, &reaper->children);
++ INIT_LIST_HEAD(&father->children);
+ }
+
+ /*