Setting tag linux-2.6-27-38
[linux-2.6.git] / delta-killperm-fix01.diff
1 diff --git a/kernel/signal.c b/kernel/signal.c
2 index 76f1f25..23f2fa4 100644
3 --- a/kernel/signal.c
4 +++ b/kernel/signal.c
5 @@ -573,10 +573,11 @@ static int check_kill_permission(int sig, struct siginfo *info,
6         if (!valid_signal(sig))
7                 return -EINVAL;
8  
9 +/*
10         if ((info != SEND_SIG_NOINFO) &&
11                 (is_si_special(info) || !SI_FROMUSER(info)))
12                 goto skip;
13 -
14 +*/
15         vxdprintk(VXD_CBIT(misc, 7),
16                 "check_kill_permission(%d,%p,%p[#%u,%u])",
17                 sig, info, t, vx_task_xid(t), t->pid);
18 @@ -610,13 +611,17 @@ static int check_kill_permission(int sig, struct siginfo *info,
19                 return error;
20  
21         error = -ESRCH;
22 +       /* FIXME: we shouldn't return ESRCH ever, to avoid
23 +                 loops, maybe ENOENT or EACCES? */
24         if (!vx_check(vx_task_xid(t), VS_WATCH_P | VS_IDENT)) {
25                 vxdprintk(current->xid || VXD_CBIT(misc, 7),
26                         "signal %d[%p] xid mismatch %p[#%u,%u] xid=#%u",
27                         sig, info, t, vx_task_xid(t), t->pid, current->xid);
28                 return error;
29         }
30 +/*
31  skip:
32 +*/
33         return security_task_kill(t, info, sig, 0);
34  }
35  
36 @@ -1074,7 +1079,7 @@ int kill_pid_info(int sig, struct siginfo *info, struct pid *pid)
37         rcu_read_lock();
38  retry:
39         p = pid_task(pid, PIDTYPE_PID);
40 -       if (p && vx_check(vx_task_xid(p), VS_ADMIN | VS_IDENT)) {
41 +       if (p && vx_check(vx_task_xid(p), VS_IDENT)) {
42                 error = group_send_sig_info(sig, info, p);
43                 if (unlikely(error == -ESRCH))
44                         /*