From: Arkadiusz Miƛkiewicz Date: Sat, 30 Jan 2016 08:52:14 +0000 (+0100) Subject: - rel 3; previous fix was buggy (oops at vserver guest stop) X-Git-Tag: auto/th/kernel-4.1-4.1.16-3 X-Git-Url: http://git.pld-linux.org/gitweb.cgi?a=commitdiff_plain;h=9d49b35cb1591ff860012ef5c21674498975e35b;p=packages%2Fkernel.git - rel 3; previous fix was buggy (oops at vserver guest stop) --- diff --git a/kernel-vserver-fixes.patch b/kernel-vserver-fixes.patch index f18f26d8..d4f11730 100644 --- a/kernel-vserver-fixes.patch +++ b/kernel-vserver-fixes.patch @@ -52,3 +52,32 @@ 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); + } + + /* diff --git a/kernel.spec b/kernel.spec index 3bc7226b..ae0a6801 100644 --- a/kernel.spec +++ b/kernel.spec @@ -69,7 +69,7 @@ %define have_pcmcia 0 %endif -%define rel 2 +%define rel 3 %define basever 4.1 %define postver .16