X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=kernel%2Fvserver%2Fsignal.c;h=ae4d11fa3092462ac98b9c5da84cd8e2de3d0adf;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=0499c9ec7609509653236238f9326ccd5c1452a7;hpb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;p=linux-2.6.git diff --git a/kernel/vserver/signal.c b/kernel/vserver/signal.c index 0499c9ec7..ae4d11fa3 100644 --- a/kernel/vserver/signal.c +++ b/kernel/vserver/signal.c @@ -3,7 +3,7 @@ * * Virtual Server: Signal Support * - * Copyright (C) 2003-2004 Herbert Pötzl + * Copyright (C) 2003-2005 Herbert Pötzl * * V0.01 broken out from vcontext V0.05 * @@ -15,7 +15,6 @@ #include #include -#include #include #include @@ -46,8 +45,9 @@ int vc_ctx_kill(uint32_t id, void __user *data) retval = -ESRCH; read_lock(&tasklist_lock); switch (vc_data.pid) { - case -1: case 0: + info.si_code = SI_KERNEL; + case -1: for_each_process(p) { int err = 0; @@ -63,8 +63,14 @@ int vc_ctx_kill(uint32_t id, void __user *data) } break; + case 1: + 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); + p = find_task_by_real_pid(vc_data.pid); if (p) { if (!thread_group_leader(p)) { struct task_struct *tg;