diff -NurpP --minimal linux-2.6.11.6-vs1.9.5.9/kernel/signal.c linux-2.6.11.6-vs1.9.5.10/kernel/signal.c --- linux-2.6.11.6-vs1.9.5.9/kernel/signal.c 2005-04-04 05:46:05 +0200 +++ linux-2.6.11.6-vs1.9.5.10/kernel/signal.c 2005-04-04 23:48:30 +0200 @@ -1892,6 +1892,11 @@ relock: if (current->pid == 1) continue; + /* virtual init is protected against user signals */ + if ((info->si_code == SI_USER) && + vx_current_initpid(current->pid)) + continue; + if (sig_kernel_stop(signr)) { /* * The default action is to stop all threads in diff -NurpP --minimal linux-2.6.11.6-vs1.9.5.9/kernel/vserver/signal.c linux-2.6.11.6-vs1.9.5.10/kernel/vserver/signal.c --- linux-2.6.11.6-vs1.9.5.9/kernel/vserver/signal.c 2005-04-01 01:31:57 +0200 +++ linux-2.6.11.6-vs1.9.5.10/kernel/vserver/signal.c 2005-04-04 23:46:29 +0200 @@ -63,8 +63,10 @@ int vc_ctx_kill(uint32_t id, void __user break; case 1: - if (vxi->vx_initpid) + if (vxi->vx_initpid) { vc_data.pid = vxi->vx_initpid; + info.si_code = SI_KERNEL; + } /* fallthrough */ default: p = find_task_by_real_pid(vc_data.pid);