1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
diff -NurpP --minimal linux-2.6.19.2-vs2.2.0-rc8/kernel/vserver/signal.c linux-2.6.19.2-vs2.2.0-rc8.1/kernel/vserver/signal.c
--- linux-2.6.19.2-vs2.2.0-rc8/kernel/vserver/signal.c 2006-11-08 04:57:45 +0100
+++ linux-2.6.19.2-vs2.2.0-rc8.1/kernel/vserver/signal.c 2007-01-18 20:31:22 +0100
@@ -3,10 +3,11 @@
*
* Virtual Server: Signal Support
*
- * Copyright (C) 2003-2006 Herbert P�tzl
+ * Copyright (C) 2003-2007 Herbert P�tzl
*
* V0.01 broken out from vcontext V0.05
* V0.02 changed vcmds to vxi arg
+ * V0.03 adjusted siginfo for kill
*
*/
@@ -23,7 +24,7 @@ int vx_info_kill(struct vx_info *vxi, in
{
int retval, count=0;
struct task_struct *p;
- unsigned long priv = 0;
+ struct siginfo *sip = SEND_SIG_PRIV;
retval = -ESRCH;
vxdprintk(VXD_CBIT(misc, 4),
@@ -32,7 +33,7 @@ int vx_info_kill(struct vx_info *vxi, in
read_lock(&tasklist_lock);
switch (pid) {
case 0:
- priv = 1;
+ sip = SEND_SIG_FORCED;
case -1:
for_each_process(p) {
int err = 0;
@@ -41,7 +42,7 @@ int vx_info_kill(struct vx_info *vxi, in
(pid && vxi->vx_initpid == p->pid))
continue;
- err = group_send_sig_info(sig, (void*)priv, p);
+ err = group_send_sig_info(sig, sip, p);
++count;
if (err != -EPERM)
retval = err;
@@ -56,22 +57,22 @@ int vx_info_kill(struct vx_info *vxi, in
/* ... as long as there are tasks left */
(atomic_read(&vxi->vx_tasks) > 1))
sig = SIGINT;
- priv = 1;
+ else
+ sip = SEND_SIG_FORCED;
}
/* fallthrough */
default:
p = find_task_by_real_pid(pid);
if (p) {
if (vx_task_xid(p) == vxi->vx_id)
- retval = group_send_sig_info(sig,
- (void*)priv, p);
+ retval = group_send_sig_info(sig, sip, p);
}
break;
}
read_unlock(&tasklist_lock);
vxdprintk(VXD_CBIT(misc, 4),
- "vx_info_kill(%p[#%d],%d,%d) = %d",
- vxi, vxi->vx_id, pid, sig, retval);
+ "vx_info_kill(%p[#%d],%d,%d,%d) = %d",
+ vxi, vxi->vx_id, pid, sig, (int)sip, retval);
return retval;
}
|