diff -NurpP --minimal linux-2.6.29.1-vs2.3.0.36.9-pre6/kernel/signal.c linux-2.6.29.1-vs2.3.0.36.10/kernel/signal.c --- linux-2.6.29.1-vs2.3.0.36.9-pre6/kernel/signal.c 2009-03-24 14:48:36.000000000 +0100 +++ linux-2.6.29.1-vs2.3.0.36.10/kernel/signal.c 2009-04-20 23:37:12.000000000 +0200 @@ -626,6 +626,8 @@ static int check_kill_permission(int sig return error; error = -ESRCH; + /* FIXME: we shouldn't return ESRCH ever, to avoid + loops, maybe ENOENT or EACCES? */ if (!vx_check(vx_task_xid(t), VS_WATCH_P | VS_IDENT)) { vxdprintk(current->xid || VXD_CBIT(misc, 7), "signal %d[%p] xid mismatch %p[#%u,%u] xid=#%u", @@ -1098,7 +1100,7 @@ int kill_pid_info(int sig, struct siginf rcu_read_lock(); retry: p = pid_task(pid, PIDTYPE_PID); - if (p && vx_check(vx_task_xid(p), VS_ADMIN | VS_IDENT)) { + if (p && vx_check(vx_task_xid(p), VS_IDENT)) { error = group_send_sig_info(sig, info, p); if (unlikely(error == -ESRCH)) /*