]> git.pld-linux.org Git - packages/kernel.git/blame - patch-2.6.2-rc1-vs0.05.diff
- linux-abi - initial NFY
[packages/kernel.git] / patch-2.6.2-rc1-vs0.05.diff
CommitLineData
5be58c1b
AM
1diff -NurpP --minimal linux-2.6.2-rc1/arch/alpha/kernel/ptrace.c linux-2.6.2-rc1-vs0.05/arch/alpha/kernel/ptrace.c
2--- linux-2.6.2-rc1/arch/alpha/kernel/ptrace.c Fri Jan 9 08:00:02 2004
3+++ linux-2.6.2-rc1-vs0.05/arch/alpha/kernel/ptrace.c Sat Jan 24 06:45:48 2004
4@@ -6,6 +6,7 @@
5
6 #include <linux/kernel.h>
7 #include <linux/sched.h>
8+#include <linux/vinline.h>
9 #include <linux/mm.h>
10 #include <linux/smp.h>
11 #include <linux/smp_lock.h>
12@@ -285,7 +286,7 @@ do_sys_ptrace(long request, long pid, lo
13 if (child)
14 get_task_struct(child);
15 read_unlock(&tasklist_lock);
16- if (!child)
17+ if (!child || !vx_check(vx_task_xid(child), VX_WATCH|VX_IDENT))
18 goto out_notsk;
19
20 if (request == PTRACE_ATTACH) {
21diff -NurpP --minimal linux-2.6.2-rc1/arch/alpha/kernel/systbls.S linux-2.6.2-rc1-vs0.05/arch/alpha/kernel/systbls.S
22--- linux-2.6.2-rc1/arch/alpha/kernel/systbls.S Fri Jan 9 07:59:45 2004
23+++ linux-2.6.2-rc1-vs0.05/arch/alpha/kernel/systbls.S Sat Jan 24 06:45:48 2004
24@@ -291,7 +291,7 @@ sys_call_table:
25 .quad alpha_ni_syscall /* 270 */
26 .quad alpha_ni_syscall
27 .quad alpha_ni_syscall
28- .quad alpha_ni_syscall
29+ .quad sys_vserver /* 273 sys_vserver */
30 .quad alpha_ni_syscall
31 .quad alpha_ni_syscall /* 275 */
32 .quad alpha_ni_syscall
33diff -NurpP --minimal linux-2.6.2-rc1/arch/i386/kernel/entry.S linux-2.6.2-rc1-vs0.05/arch/i386/kernel/entry.S
34--- linux-2.6.2-rc1/arch/i386/kernel/entry.S Fri Jan 9 07:59:19 2004
35+++ linux-2.6.2-rc1-vs0.05/arch/i386/kernel/entry.S Sat Jan 24 06:45:48 2004
36@@ -881,6 +881,6 @@ ENTRY(sys_call_table)
37 .long sys_tgkill /* 270 */
38 .long sys_utimes
39 .long sys_fadvise64_64
40- .long sys_ni_syscall /* sys_vserver */
41+ .long sys_vserver
42
43 syscall_table_size=(.-sys_call_table)
44diff -NurpP --minimal linux-2.6.2-rc1/arch/i386/kernel/ptrace.c linux-2.6.2-rc1-vs0.05/arch/i386/kernel/ptrace.c
45--- linux-2.6.2-rc1/arch/i386/kernel/ptrace.c Fri Jan 9 07:59:19 2004
46+++ linux-2.6.2-rc1-vs0.05/arch/i386/kernel/ptrace.c Sat Jan 24 06:45:48 2004
47@@ -7,6 +7,7 @@
48
49 #include <linux/kernel.h>
50 #include <linux/sched.h>
51+#include <linux/vinline.h>
52 #include <linux/mm.h>
53 #include <linux/smp.h>
54 #include <linux/smp_lock.h>
55@@ -255,7 +256,7 @@ asmlinkage int sys_ptrace(long request,
56 if (child)
57 get_task_struct(child);
58 read_unlock(&tasklist_lock);
59- if (!child)
60+ if (!child || !vx_check(vx_task_xid(child), VX_WATCH|VX_IDENT))
61 goto out;
62
63 ret = -EPERM;
64diff -NurpP --minimal linux-2.6.2-rc1/arch/ia64/kernel/ptrace.c linux-2.6.2-rc1-vs0.05/arch/ia64/kernel/ptrace.c
65--- linux-2.6.2-rc1/arch/ia64/kernel/ptrace.c Fri Jan 9 08:00:12 2004
66+++ linux-2.6.2-rc1-vs0.05/arch/ia64/kernel/ptrace.c Sat Jan 24 06:45:48 2004
67@@ -10,6 +10,7 @@
68 #include <linux/config.h>
69 #include <linux/kernel.h>
70 #include <linux/sched.h>
71+#include <linux/vinline.h>
72 #include <linux/slab.h>
73 #include <linux/mm.h>
74 #include <linux/errno.h>
75@@ -1282,7 +1283,7 @@ sys_ptrace (long request, pid_t pid, uns
76 }
77 }
78 read_unlock(&tasklist_lock);
79- if (!child)
80+ if (!child || !vx_check(vx_task_xid(child), VX_WATCH|VX_IDENT))
81 goto out;
82 ret = -EPERM;
83 if (pid == 1) /* no messing around with init! */
84diff -NurpP --minimal linux-2.6.2-rc1/arch/m68k/kernel/ptrace.c linux-2.6.2-rc1-vs0.05/arch/m68k/kernel/ptrace.c
85--- linux-2.6.2-rc1/arch/m68k/kernel/ptrace.c Fri Jan 9 07:59:19 2004
86+++ linux-2.6.2-rc1-vs0.05/arch/m68k/kernel/ptrace.c Sat Jan 24 06:45:48 2004
87@@ -12,6 +12,7 @@
88
89 #include <linux/kernel.h>
90 #include <linux/sched.h>
91+#include <linux/vinline.h>
92 #include <linux/mm.h>
93 #include <linux/smp.h>
94 #include <linux/smp_lock.h>
95@@ -124,7 +125,7 @@ asmlinkage int sys_ptrace(long request,
96 if (child)
97 get_task_struct(child);
98 read_unlock(&tasklist_lock);
99- if (!child)
100+ if (!child || !vx_check(vx_task_xid(child), VX_WATCH|VX_IDENT))
101 goto out;
102
103 ret = -EPERM;
104diff -NurpP --minimal linux-2.6.2-rc1/arch/mips/kernel/ptrace.c linux-2.6.2-rc1-vs0.05/arch/mips/kernel/ptrace.c
105--- linux-2.6.2-rc1/arch/mips/kernel/ptrace.c Fri Jan 9 08:00:13 2004
106+++ linux-2.6.2-rc1-vs0.05/arch/mips/kernel/ptrace.c Sat Jan 24 06:45:48 2004
107@@ -18,6 +18,7 @@
108 #include <linux/compiler.h>
109 #include <linux/kernel.h>
110 #include <linux/sched.h>
111+#include <linux/vinline.h>
112 #include <linux/mm.h>
113 #include <linux/errno.h>
114 #include <linux/ptrace.h>
115@@ -74,7 +75,7 @@ asmlinkage int sys_ptrace(long request,
116 if (child)
117 get_task_struct(child);
118 read_unlock(&tasklist_lock);
119- if (!child)
120+ if (!child || !vx_check(vx_task_xid(child), VX_WATCH|VX_IDENT))
121 goto out;
122
123 ret = -EPERM;
124diff -NurpP --minimal linux-2.6.2-rc1/arch/parisc/kernel/ptrace.c linux-2.6.2-rc1-vs0.05/arch/parisc/kernel/ptrace.c
125--- linux-2.6.2-rc1/arch/parisc/kernel/ptrace.c Fri Jan 9 07:59:09 2004
126+++ linux-2.6.2-rc1-vs0.05/arch/parisc/kernel/ptrace.c Sat Jan 24 06:45:48 2004
127@@ -8,6 +8,7 @@
128
129 #include <linux/kernel.h>
130 #include <linux/sched.h>
131+#include <linux/vinline.h>
132 #include <linux/mm.h>
133 #include <linux/smp.h>
134 #include <linux/smp_lock.h>
135@@ -109,7 +110,7 @@ long sys_ptrace(long request, pid_t pid,
136 if (child)
137 get_task_struct(child);
138 read_unlock(&tasklist_lock);
139- if (!child)
140+ if (!child || !vx_check(vx_task_xid(child), VX_WATCH|VX_IDENT))
141 goto out;
142 ret = -EPERM;
143 if (pid == 1) /* no messing around with init! */
144diff -NurpP --minimal linux-2.6.2-rc1/arch/ppc/kernel/misc.S linux-2.6.2-rc1-vs0.05/arch/ppc/kernel/misc.S
145--- linux-2.6.2-rc1/arch/ppc/kernel/misc.S Sat Jan 24 03:18:04 2004
146+++ linux-2.6.2-rc1-vs0.05/arch/ppc/kernel/misc.S Sat Jan 24 06:45:48 2004
147@@ -1386,3 +1386,22 @@ _GLOBAL(sys_call_table)
148 .long sys_fstatfs64
149 .long ppc_fadvise64_64
150 .long sys_ni_syscall /* 255 - rtas (used on ppc64) */
151+ .long sys_ni_syscall
152+ .long sys_ni_syscall
153+ .long sys_ni_syscall
154+ .long sys_ni_syscall
155+ .long sys_ni_syscall /* 260 */
156+ .long sys_ni_syscall
157+ .long sys_ni_syscall
158+ .long sys_ni_syscall
159+ .long sys_ni_syscall
160+ .long sys_ni_syscall /* 265 */
161+ .long sys_ni_syscall
162+ .long sys_ni_syscall
163+ .long sys_ni_syscall
164+ .long sys_ni_syscall
165+ .long sys_ni_syscall /* 270 */
166+ .long sys_ni_syscall
167+ .long sys_ni_syscall
168+ .long sys_vserver /* 273 sys_vserver */
169+
170diff -NurpP --minimal linux-2.6.2-rc1/arch/ppc/kernel/ptrace.c linux-2.6.2-rc1-vs0.05/arch/ppc/kernel/ptrace.c
171--- linux-2.6.2-rc1/arch/ppc/kernel/ptrace.c Fri Jan 9 07:59:19 2004
172+++ linux-2.6.2-rc1-vs0.05/arch/ppc/kernel/ptrace.c Sat Jan 24 06:45:48 2004
173@@ -19,6 +19,7 @@
174
175 #include <linux/kernel.h>
176 #include <linux/sched.h>
177+#include <linux/vinline.h>
178 #include <linux/mm.h>
179 #include <linux/smp.h>
180 #include <linux/smp_lock.h>
181@@ -195,7 +196,7 @@ int sys_ptrace(long request, long pid, l
182 if (child)
183 get_task_struct(child);
184 read_unlock(&tasklist_lock);
185- if (!child)
186+ if (!child || !vx_check(vx_task_xid(child), VX_WATCH|VX_IDENT))
187 goto out;
188
189 ret = -EPERM;
190diff -NurpP --minimal linux-2.6.2-rc1/arch/ppc64/kernel/misc.S linux-2.6.2-rc1-vs0.05/arch/ppc64/kernel/misc.S
191--- linux-2.6.2-rc1/arch/ppc64/kernel/misc.S Sat Jan 24 03:18:04 2004
192+++ linux-2.6.2-rc1-vs0.05/arch/ppc64/kernel/misc.S Sat Jan 24 06:45:48 2004
193@@ -819,6 +819,24 @@ _GLOBAL(sys_call_table32)
194 .llong .compat_fstatfs64
195 .llong .ppc32_fadvise64_64 /* 32bit only fadvise64_64 */
196 .llong .ppc_rtas /* 255 */
197+ .llong .sys_ni_syscall
198+ .llong .sys_ni_syscall
199+ .llong .sys_ni_syscall
200+ .llong .sys_ni_syscall
201+ .llong .sys_ni_syscall /* 260 */
202+ .llong .sys_ni_syscall
203+ .llong .sys_ni_syscall
204+ .llong .sys_ni_syscall
205+ .llong .sys_ni_syscall
206+ .llong .sys_ni_syscall /* 265 */
207+ .llong .sys_ni_syscall
208+ .llong .sys_ni_syscall
209+ .llong .sys_ni_syscall
210+ .llong .sys_ni_syscall
211+ .llong .sys_ni_syscall /* 270 */
212+ .llong .sys_ni_syscall
213+ .llong .sys_ni_syscall
214+ .llong .sys_vserver /* 273 sys_vserver */
215
216 .balign 8
217 _GLOBAL(sys_call_table)
218@@ -1078,3 +1096,22 @@ _GLOBAL(sys_call_table)
219 .llong .sys_fstatfs64
220 .llong .sys_ni_syscall /* 32bit only fadvise64_64 */
221 .llong .ppc_rtas /* 255 */
222+ .llong .sys_ni_syscall
223+ .llong .sys_ni_syscall
224+ .llong .sys_ni_syscall
225+ .llong .sys_ni_syscall
226+ .llong .sys_ni_syscall /* 260 */
227+ .llong .sys_ni_syscall
228+ .llong .sys_ni_syscall
229+ .llong .sys_ni_syscall
230+ .llong .sys_ni_syscall
231+ .llong .sys_ni_syscall /* 265 */
232+ .llong .sys_ni_syscall
233+ .llong .sys_ni_syscall
234+ .llong .sys_ni_syscall
235+ .llong .sys_ni_syscall
236+ .llong .sys_ni_syscall /* 270 */
237+ .llong .sys_ni_syscall
238+ .llong .sys_ni_syscall
239+ .llong .sys_vserver /* 273 sys_vserver */
240+
241diff -NurpP --minimal linux-2.6.2-rc1/arch/ppc64/kernel/ptrace.c linux-2.6.2-rc1-vs0.05/arch/ppc64/kernel/ptrace.c
242--- linux-2.6.2-rc1/arch/ppc64/kernel/ptrace.c Fri Jan 9 07:59:56 2004
243+++ linux-2.6.2-rc1-vs0.05/arch/ppc64/kernel/ptrace.c Sat Jan 24 06:45:48 2004
244@@ -19,6 +19,7 @@
245
246 #include <linux/kernel.h>
247 #include <linux/sched.h>
248+#include <linux/vinline.h>
249 #include <linux/mm.h>
250 #include <linux/smp.h>
251 #include <linux/smp_lock.h>
252@@ -73,7 +74,7 @@ int sys_ptrace(long request, long pid, l
253 if (child)
254 get_task_struct(child);
255 read_unlock(&tasklist_lock);
256- if (!child)
257+ if (!child || !vx_check(vx_task_xid(child), VX_WATCH|VX_IDENT))
258 goto out;
259
260 ret = -EPERM;
261diff -NurpP --minimal linux-2.6.2-rc1/arch/s390/kernel/ptrace.c linux-2.6.2-rc1-vs0.05/arch/s390/kernel/ptrace.c
262--- linux-2.6.2-rc1/arch/s390/kernel/ptrace.c Sat Jan 24 03:18:05 2004
263+++ linux-2.6.2-rc1-vs0.05/arch/s390/kernel/ptrace.c Sat Jan 24 06:45:48 2004
264@@ -24,6 +24,7 @@
265
266 #include <linux/kernel.h>
267 #include <linux/sched.h>
268+#include <linux/vinline.h>
269 #include <linux/mm.h>
270 #include <linux/smp.h>
271 #include <linux/smp_lock.h>
272@@ -647,7 +648,7 @@ sys_ptrace(long request, long pid, long
273 if (child)
274 get_task_struct(child);
275 read_unlock(&tasklist_lock);
276- if (!child)
277+ if (!child || !vx_check(vx_task_xid(child), VX_WATCH|VX_IDENT))
278 goto out;
279
280 ret = do_ptrace(child, request, addr, data);
281diff -NurpP --minimal linux-2.6.2-rc1/arch/s390/kernel/syscalls.S linux-2.6.2-rc1-vs0.05/arch/s390/kernel/syscalls.S
282--- linux-2.6.2-rc1/arch/s390/kernel/syscalls.S Sat Jan 24 03:18:05 2004
283+++ linux-2.6.2-rc1-vs0.05/arch/s390/kernel/syscalls.S Sat Jan 24 06:45:48 2004
284@@ -271,5 +271,5 @@ SYSCALL(sys_clock_settime,sys_clock_sett
285 SYSCALL(sys_clock_gettime,sys_clock_gettime,sys32_clock_gettime_wrapper) /* 260 */
286 SYSCALL(sys_clock_getres,sys_clock_getres,sys32_clock_getres_wrapper)
287 SYSCALL(sys_clock_nanosleep,sys_clock_nanosleep,sys32_clock_nanosleep_wrapper)
288-NI_SYSCALL /* reserved for vserver */
289+SYSCALL(sys_vserver,sys_vserver,sys_vserver)
290 SYSCALL(s390_fadvise64_64,sys_ni_syscall,sys32_fadvise64_64_wrapper)
291diff -NurpP --minimal linux-2.6.2-rc1/arch/sparc/kernel/systbls.S linux-2.6.2-rc1-vs0.05/arch/sparc/kernel/systbls.S
292--- linux-2.6.2-rc1/arch/sparc/kernel/systbls.S Fri Jan 9 07:59:34 2004
293+++ linux-2.6.2-rc1-vs0.05/arch/sparc/kernel/systbls.S Sat Jan 24 06:45:48 2004
294@@ -72,7 +72,7 @@ sys_call_table:
295 /*250*/ .long sparc_mremap, sys_sysctl, sys_getsid, sys_fdatasync, sys_nfsservctl
296 /*255*/ .long sys_nis_syscall, sys_clock_settime, sys_clock_gettime, sys_clock_getres, sys_clock_nanosleep
297 /*260*/ .long sys_sched_getaffinity, sys_sched_setaffinity, sys_timer_settime, sys_timer_gettime, sys_timer_getoverrun
298-/*265*/ .long sys_timer_delete, sys_timer_create, sys_nis_syscall, sys_io_setup, sys_io_destroy
299+/*265*/ .long sys_timer_delete, sys_timer_create, sys_vserver, sys_io_setup, sys_io_destroy
300 /*270*/ .long sys_io_submit, sys_io_cancel, sys_io_getevents, sys_nis_syscall
301
302 #ifdef CONFIG_SUNOS_EMUL
303diff -NurpP --minimal linux-2.6.2-rc1/arch/sparc64/kernel/ptrace.c linux-2.6.2-rc1-vs0.05/arch/sparc64/kernel/ptrace.c
304--- linux-2.6.2-rc1/arch/sparc64/kernel/ptrace.c Fri Jan 9 08:00:05 2004
305+++ linux-2.6.2-rc1-vs0.05/arch/sparc64/kernel/ptrace.c Sat Jan 24 06:45:48 2004
306@@ -12,6 +12,7 @@
307
308 #include <linux/kernel.h>
309 #include <linux/sched.h>
310+#include <linux/vinline.h>
311 #include <linux/mm.h>
312 #include <linux/errno.h>
313 #include <linux/ptrace.h>
314@@ -164,7 +165,7 @@ asmlinkage void do_ptrace(struct pt_regs
315 get_task_struct(child);
316 read_unlock(&tasklist_lock);
317
318- if (!child) {
319+ if (!child || !vx_check(vx_task_xid(child), VX_WATCH|VX_IDENT)) {
320 pt_error_return(regs, ESRCH);
321 goto out;
322 }
323diff -NurpP --minimal linux-2.6.2-rc1/arch/sparc64/kernel/systbls.S linux-2.6.2-rc1-vs0.05/arch/sparc64/kernel/systbls.S
324--- linux-2.6.2-rc1/arch/sparc64/kernel/systbls.S Fri Jan 9 07:59:26 2004
325+++ linux-2.6.2-rc1-vs0.05/arch/sparc64/kernel/systbls.S Sat Jan 24 06:45:48 2004
326@@ -73,7 +73,7 @@ sys_call_table32:
327 .word sys_ni_syscall, compat_clock_settime, compat_clock_gettime, compat_clock_getres, compat_clock_nanosleep
328 /*260*/ .word compat_sys_sched_getaffinity, compat_sys_sched_setaffinity, compat_timer_settime, compat_timer_gettime, sys_timer_getoverrun
329 .word sys_timer_delete, sys32_timer_create, sys_ni_syscall, compat_sys_io_setup, sys_io_destroy
330-/*270*/ .word compat_sys_io_submit, sys_io_cancel, compat_sys_io_getevents, sys_ni_syscall
331+/*270*/ .word compat_sys_io_submit, sys_io_cancel, compat_sys_io_getevents, sys_vserver
332
333 /* Now the 64-bit native Linux syscall table. */
334
335@@ -135,7 +135,7 @@ sys_call_table:
336 .word sys_ni_syscall, sys_clock_settime, sys_clock_gettime, sys_clock_getres, sys_clock_nanosleep
337 /*260*/ .word sys_sched_getaffinity, sys_sched_setaffinity, sys_timer_settime, sys_timer_gettime, sys_timer_getoverrun
338 .word sys_timer_delete, sys_timer_create, sys_ni_syscall, sys_io_setup, sys_io_destroy
339-/*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_ni_syscall
340+/*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_vserver
341
342 #if defined(CONFIG_SUNOS_EMUL) || defined(CONFIG_SOLARIS_EMUL) || \
343 defined(CONFIG_SOLARIS_EMUL_MODULE)
344diff -NurpP --minimal linux-2.6.2-rc1/arch/x86_64/ia32/ia32entry.S linux-2.6.2-rc1-vs0.05/arch/x86_64/ia32/ia32entry.S
345--- linux-2.6.2-rc1/arch/x86_64/ia32/ia32entry.S Fri Jan 9 07:59:27 2004
346+++ linux-2.6.2-rc1-vs0.05/arch/x86_64/ia32/ia32entry.S Sat Jan 24 06:45:48 2004
347@@ -448,34 +448,35 @@ ia32_sys_call_table:
348 .quad compat_sys_sched_getaffinity
349 .quad sys32_set_thread_area
350 .quad sys32_get_thread_area
351- .quad sys32_io_setup
352+ .quad sys32_io_setup /* 245 */
353 .quad sys_io_destroy
354 .quad sys32_io_getevents
355 .quad sys32_io_submit
356 .quad sys_io_cancel
357- .quad sys_fadvise64
358+ .quad sys_fadvise64 /* 250 */
359 .quad sys_ni_syscall /* free_huge_pages */
360 .quad sys_exit_group /* exit_group */
361 .quad sys_lookup_dcookie
362 .quad sys_epoll_create
363- .quad sys_epoll_ctl
364+ .quad sys_epoll_ctl /* 255 */
365 .quad sys_epoll_wait
366 .quad sys_remap_file_pages
367 .quad sys_set_tid_address
368 .quad sys32_timer_create
369- .quad compat_timer_settime
370+ .quad compat_timer_settime /* 260 */
371 .quad compat_timer_gettime
372 .quad sys_timer_getoverrun
373 .quad sys_timer_delete
374 .quad compat_clock_settime
375- .quad compat_clock_gettime
376+ .quad compat_clock_gettime /* 265 */
377 .quad compat_clock_getres
378 .quad compat_clock_nanosleep
379 .quad compat_statfs64 /* statfs64 */
380 .quad compat_fstatfs64 /* fstatfs64 */
381- .quad sys_tgkill
382+ .quad sys_tgkill /* 270 */
383 .quad compat_sys_utimes
384 .quad sys32_fadvise64_64
385+ .quad sys_vserver /* 273 sys_vserver */
386 /* don't forget to change IA32_NR_syscalls */
387 ia32_syscall_end:
388 .rept IA32_NR_syscalls-(ia32_syscall_end-ia32_sys_call_table)/8
389diff -NurpP --minimal linux-2.6.2-rc1/arch/x86_64/kernel/ptrace.c linux-2.6.2-rc1-vs0.05/arch/x86_64/kernel/ptrace.c
390--- linux-2.6.2-rc1/arch/x86_64/kernel/ptrace.c Fri Jan 9 07:59:19 2004
391+++ linux-2.6.2-rc1-vs0.05/arch/x86_64/kernel/ptrace.c Sat Jan 24 06:45:48 2004
392@@ -9,6 +9,7 @@
393
394 #include <linux/kernel.h>
395 #include <linux/sched.h>
396+#include <linux/vinline.h>
397 #include <linux/mm.h>
398 #include <linux/smp.h>
399 #include <linux/smp_lock.h>
400@@ -205,7 +206,7 @@ asmlinkage long sys_ptrace(long request,
401 if (child)
402 get_task_struct(child);
403 read_unlock(&tasklist_lock);
404- if (!child)
405+ if (!child || !vx_check(vx_task_xid(child), VX_WATCH|VX_IDENT))
406 goto out;
407
408 ret = -EPERM;
409diff -NurpP --minimal linux-2.6.2-rc1/fs/ext2/ialloc.c linux-2.6.2-rc1-vs0.05/fs/ext2/ialloc.c
410--- linux-2.6.2-rc1/fs/ext2/ialloc.c Sat Jan 24 03:18:15 2004
411+++ linux-2.6.2-rc1-vs0.05/fs/ext2/ialloc.c Sat Jan 24 06:14:24 2004
412@@ -581,7 +581,7 @@ got:
413 memset(ei->i_data, 0, sizeof(ei->i_data));
414 ei->i_flags = EXT2_I(dir)->i_flags & ~EXT2_BTREE_FL;
415 if (S_ISLNK(mode))
416- ei->i_flags &= ~(EXT2_IMMUTABLE_FL|EXT2_APPEND_FL);
417+ ei->i_flags &= ~(EXT2_IMMUTABLE_FL|EXT2_IUNLINK_FL|EXT2_APPEND_FL);
418 /* dirsync is only applied to directories */
419 if (!S_ISDIR(mode))
420 ei->i_flags &= ~EXT2_DIRSYNC_FL;
421diff -NurpP --minimal linux-2.6.2-rc1/fs/ext2/inode.c linux-2.6.2-rc1-vs0.05/fs/ext2/inode.c
422--- linux-2.6.2-rc1/fs/ext2/inode.c Sat Jan 24 03:18:15 2004
423+++ linux-2.6.2-rc1-vs0.05/fs/ext2/inode.c Sat Jan 24 06:28:27 2004
424@@ -64,6 +64,8 @@ void ext2_put_inode(struct inode *inode)
425 ext2_discard_prealloc(inode);
426 }
427
428+static void ext2_truncate_nocheck (struct inode * inode);
429+
430 /*
431 * Called at the last iput() if i_nlink is zero.
432 */
433@@ -77,7 +79,7 @@ void ext2_delete_inode (struct inode * i
434
435 inode->i_size = 0;
436 if (inode->i_blocks)
437- ext2_truncate (inode);
438+ ext2_truncate_nocheck(inode);
439 ext2_free_inode (inode);
440
441 return;
442@@ -876,7 +878,7 @@ static void ext2_free_branches(struct in
443 ext2_free_data(inode, p, q);
444 }
445
446-void ext2_truncate (struct inode * inode)
447+static void ext2_truncate_nocheck(struct inode * inode)
448 {
449 u32 *i_data = EXT2_I(inode)->i_data;
450 int addr_per_block = EXT2_ADDR_PER_BLOCK(inode->i_sb);
451@@ -893,8 +895,6 @@ void ext2_truncate (struct inode * inode
452 return;
453 if (ext2_inode_is_fast_symlink(inode))
454 return;
455- if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
456- return;
457
458 ext2_discard_prealloc(inode);
459
460@@ -1016,17 +1016,26 @@ Egdp:
461 return ERR_PTR(-EIO);
462 }
463
464+void ext2_truncate (struct inode * inode)
465+{
466+ if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
467+ return;
468+ ext2_truncate_nocheck(inode);
469+}
470+
471 void ext2_set_inode_flags(struct inode *inode)
472 {
473 unsigned int flags = EXT2_I(inode)->i_flags;
474
475- inode->i_flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC);
476+ inode->i_flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_IUNLINK|S_NOATIME|S_DIRSYNC);
477 if (flags & EXT2_SYNC_FL)
478 inode->i_flags |= S_SYNC;
479 if (flags & EXT2_APPEND_FL)
480 inode->i_flags |= S_APPEND;
481 if (flags & EXT2_IMMUTABLE_FL)
482 inode->i_flags |= S_IMMUTABLE;
483+ if (flags & EXT2_IUNLINK_FL)
484+ inode->i_flags |= S_IUNLINK;
485 if (flags & EXT2_NOATIME_FL)
486 inode->i_flags |= S_NOATIME;
487 if (flags & EXT2_DIRSYNC_FL)
488diff -NurpP --minimal linux-2.6.2-rc1/fs/ext3/ialloc.c linux-2.6.2-rc1-vs0.05/fs/ext3/ialloc.c
489--- linux-2.6.2-rc1/fs/ext3/ialloc.c Sat Jan 24 03:18:15 2004
490+++ linux-2.6.2-rc1-vs0.05/fs/ext3/ialloc.c Sat Jan 24 06:14:24 2004
491@@ -569,7 +569,7 @@ got:
492
493 ei->i_flags = EXT3_I(dir)->i_flags & ~EXT3_INDEX_FL;
494 if (S_ISLNK(mode))
495- ei->i_flags &= ~(EXT3_IMMUTABLE_FL|EXT3_APPEND_FL);
496+ ei->i_flags &= ~(EXT3_IMMUTABLE_FL|EXT3_IUNLINK_FL|EXT3_APPEND_FL);
497 /* dirsync only applies to directories */
498 if (!S_ISDIR(mode))
499 ei->i_flags &= ~EXT3_DIRSYNC_FL;
500diff -NurpP --minimal linux-2.6.2-rc1/fs/ext3/inode.c linux-2.6.2-rc1-vs0.05/fs/ext3/inode.c
501--- linux-2.6.2-rc1/fs/ext3/inode.c Sat Jan 24 03:18:15 2004
502+++ linux-2.6.2-rc1-vs0.05/fs/ext3/inode.c Sat Jan 24 06:14:24 2004
503@@ -2443,17 +2443,26 @@ has_buffer:
504 return 0;
505 }
506
507+void ext3_truncate(struct inode * inode)
508+{
509+ if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
510+ return;
511+ ext3_truncate_nocheck(inode);
512+}
513+
514 void ext3_set_inode_flags(struct inode *inode)
515 {
516 unsigned int flags = EXT3_I(inode)->i_flags;
517
518- inode->i_flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC);
519+ inode->i_flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_IUNLINK|S_NOATIME|S_DIRSYNC);
520 if (flags & EXT3_SYNC_FL)
521 inode->i_flags |= S_SYNC;
522 if (flags & EXT3_APPEND_FL)
523 inode->i_flags |= S_APPEND;
524 if (flags & EXT3_IMMUTABLE_FL)
525 inode->i_flags |= S_IMMUTABLE;
526+ if (flags & EXT3_IUNLINK_FL)
527+ inode->i_flags |= S_IUNLINK;
528 if (flags & EXT3_NOATIME_FL)
529 inode->i_flags |= S_NOATIME;
530 if (flags & EXT3_DIRSYNC_FL)
531diff -NurpP --minimal linux-2.6.2-rc1/fs/inode.c linux-2.6.2-rc1-vs0.05/fs/inode.c
532--- linux-2.6.2-rc1/fs/inode.c Fri Jan 9 08:00:12 2004
533+++ linux-2.6.2-rc1-vs0.05/fs/inode.c Sat Jan 24 06:23:57 2004
534@@ -131,6 +131,7 @@ static struct inode *alloc_inode(struct
535 inode->i_bdev = NULL;
536 inode->i_cdev = NULL;
537 inode->i_rdev = 0;
538+ // inode->i_xid = 0; /* maybe not too wise ... */
539 inode->i_security = NULL;
540 if (security_inode_alloc(inode)) {
541 if (inode->i_sb->s_op->destroy_inode)
542diff -NurpP --minimal linux-2.6.2-rc1/fs/ioctl.c linux-2.6.2-rc1-vs0.05/fs/ioctl.c
543--- linux-2.6.2-rc1/fs/ioctl.c Sat Jan 24 03:18:15 2004
544+++ linux-2.6.2-rc1-vs0.05/fs/ioctl.c Sat Jan 24 07:49:20 2004
545@@ -9,10 +9,15 @@
546 #include <linux/file.h>
547 #include <linux/fs.h>
548 #include <linux/security.h>
549+#include <linux/proc_fs.h>
550+#include <linux/vserver/inode.h>
551
552 #include <asm/uaccess.h>
553 #include <asm/ioctls.h>
554
555+extern int vx_proc_ioctl(struct inode *, struct file *,
556+ unsigned int, unsigned long);
557+
558 static int file_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)
559 {
560 int error;
561@@ -118,6 +123,12 @@ asmlinkage long sys_ioctl(unsigned int f
562 }
563 else
564 error = -ENOTTY;
565+ break;
566+ case FIOC_GETXFLG:
567+ case FIOC_SETXFLG:
568+ error = -ENOTTY;
569+ if (filp->f_dentry->d_inode->i_sb->s_magic == PROC_SUPER_MAGIC)
570+ error = vx_proc_ioctl(filp->f_dentry->d_inode, filp, cmd, arg);
571 break;
572 default:
573 error = -ENOTTY;
574diff -NurpP --minimal linux-2.6.2-rc1/fs/namei.c linux-2.6.2-rc1-vs0.05/fs/namei.c
575--- linux-2.6.2-rc1/fs/namei.c Fri Jan 9 07:59:26 2004
576+++ linux-2.6.2-rc1-vs0.05/fs/namei.c Sat Jan 24 06:14:24 2004
577@@ -1021,7 +1021,7 @@ static inline int may_delete(struct inod
578 if (IS_APPEND(dir))
579 return -EPERM;
580 if (check_sticky(dir, victim->d_inode)||IS_APPEND(victim->d_inode)||
581- IS_IMMUTABLE(victim->d_inode))
582+ IS_IXUNLINK(victim->d_inode))
583 return -EPERM;
584 if (isdir) {
585 if (!S_ISDIR(victim->d_inode->i_mode))
586@@ -1816,7 +1816,7 @@ int vfs_link(struct dentry *old_dentry,
587 /*
588 * A link to an append-only or immutable file cannot be created.
589 */
590- if (IS_APPEND(inode) || IS_IMMUTABLE(inode))
591+ if (IS_APPEND(inode) || IS_IXUNLINK(inode))
592 return -EPERM;
593 if (!dir->i_op || !dir->i_op->link)
594 return -EPERM;
595diff -NurpP --minimal linux-2.6.2-rc1/fs/proc/Makefile linux-2.6.2-rc1-vs0.05/fs/proc/Makefile
596--- linux-2.6.2-rc1/fs/proc/Makefile Fri Jan 9 07:59:07 2004
597+++ linux-2.6.2-rc1-vs0.05/fs/proc/Makefile Sat Jan 24 05:45:59 2004
598@@ -8,7 +8,7 @@ proc-y := task_nommu.o
599 proc-$(CONFIG_MMU) := task_mmu.o
600
601 proc-y += inode.o root.o base.o generic.o array.o \
602- kmsg.o proc_tty.o proc_misc.o
603+ kmsg.o proc_tty.o proc_misc.o virtual.o
604
605 proc-$(CONFIG_PROC_KCORE) += kcore.o
606 proc-$(CONFIG_PROC_DEVICETREE) += proc_devtree.o
607diff -NurpP --minimal linux-2.6.2-rc1/fs/proc/array.c linux-2.6.2-rc1-vs0.05/fs/proc/array.c
608--- linux-2.6.2-rc1/fs/proc/array.c Fri Jan 9 07:59:44 2004
609+++ linux-2.6.2-rc1-vs0.05/fs/proc/array.c Sat Jan 24 07:01:35 2004
610@@ -73,6 +73,7 @@
611 #include <linux/highmem.h>
612 #include <linux/file.h>
613 #include <linux/times.h>
614+#include <linux/vinline.h>
615
616 #include <asm/uaccess.h>
617 #include <asm/pgtable.h>
618@@ -150,8 +151,13 @@ static inline const char * get_task_stat
619 static inline char * task_state(struct task_struct *p, char *buffer)
620 {
621 int g;
622-
623+ pid_t ppid;
624 read_lock(&tasklist_lock);
625+ ppid = p->real_parent->pid;
626+ if (ppid != 0
627+ && current->vx_info
628+ && current->vx_info->vx_initpid == ppid)
629+ ppid = 1;
630 buffer += sprintf(buffer,
631 "State:\t%s\n"
632 "SleepAVG:\t%lu%%\n"
633@@ -164,7 +170,7 @@ static inline char * task_state(struct t
634 get_task_state(p),
635 (p->sleep_avg/1024)*100/(1000000000/1024),
636 p->tgid,
637- p->pid, p->pid ? p->real_parent->pid : 0,
638+ p->pid, p->pid ? ppid : 0,
639 p->pid && p->ptrace ? p->parent->pid : 0,
640 p->uid, p->euid, p->suid, p->fsuid,
641 p->gid, p->egid, p->sgid, p->fsgid);
642@@ -263,16 +269,20 @@ static inline char *task_cap(struct task
643 {
644 return buffer + sprintf(buffer, "CapInh:\t%016x\n"
645 "CapPrm:\t%016x\n"
646- "CapEff:\t%016x\n",
647+ "CapEff:\t%016x\n"
648+ "CapBset:\t%016x\n",
649 cap_t(p->cap_inheritable),
650 cap_t(p->cap_permitted),
651- cap_t(p->cap_effective));
652+ cap_t(p->cap_effective),
653+ cap_t(p->cap_bset));
654 }
655
656 extern char *task_mem(struct mm_struct *, char *);
657 int proc_pid_status(struct task_struct *task, char * buffer)
658 {
659 char * orig = buffer;
660+ struct vx_info *vxi;
661+ struct ip_info *ipi;
662 struct mm_struct *mm = get_task_mm(task);
663
664 buffer = task_name(task, buffer);
665@@ -284,6 +294,39 @@ int proc_pid_status(struct task_struct *
666 }
667 buffer = task_sig(task, buffer);
668 buffer = task_cap(task, buffer);
669+
670+ buffer += sprintf (buffer,"s_context: %d\n", vx_task_xid(task));
671+ vxi = task_get_vx_info(task);
672+ if (vxi) {
673+ buffer += sprintf (buffer,"ctxflags: %d\n"
674+ ,vxi->vx_flags);
675+ buffer += sprintf (buffer,"initpid: %d\n"
676+ ,vxi->vx_initpid);
677+ } else {
678+ buffer += sprintf (buffer,"ctxflags: none\n");
679+ buffer += sprintf (buffer,"initpid: none\n");
680+ }
681+ put_vx_info(vxi);
682+ ipi = task_get_ip_info(task);
683+ if (ipi) {
684+ int i;
685+
686+ buffer += sprintf (buffer,"ipv4root:");
687+ for (i=0; i<ipi->nbipv4; i++){
688+ buffer += sprintf (buffer," %08x/%08x"
689+ ,ipi->ipv4[i]
690+ ,ipi->mask[i]);
691+ }
692+ *buffer++ = '\n';
693+ buffer += sprintf (buffer,"ipv4root_bcast: %08x\n"
694+ ,ipi->v4_bcast);
695+ buffer += sprintf (buffer,"ipv4root_refcnt: %d\n"
696+ ,atomic_read(&ipi->ip_refcount));
697+ } else {
698+ buffer += sprintf (buffer,"ipv4root: 0\n");
699+ buffer += sprintf (buffer,"ipv4root_bcast: 0\n");
700+ }
701+ put_ip_info(ipi);
702 #if defined(CONFIG_ARCH_S390)
703 buffer = task_show_regs(task, buffer);
704 #endif
705diff -NurpP --minimal linux-2.6.2-rc1/fs/proc/base.c linux-2.6.2-rc1-vs0.05/fs/proc/base.c
706--- linux-2.6.2-rc1/fs/proc/base.c Sat Jan 24 03:18:15 2004
707+++ linux-2.6.2-rc1-vs0.05/fs/proc/base.c Sat Jan 24 06:29:01 2004
708@@ -32,6 +32,7 @@
709 #include <linux/mount.h>
710 #include <linux/security.h>
711 #include <linux/ptrace.h>
712+#include <linux/vinline.h>
713
714 /*
715 * For hysterical raisins we keep the same inumbers as in the old procfs.
716@@ -67,6 +68,7 @@ enum pid_directory_inos {
717 PROC_TGID_ATTR_EXEC,
718 PROC_TGID_ATTR_FSCREATE,
719 #endif
720+ PROC_TGID_VINFO,
721 PROC_TGID_FD_DIR,
722 PROC_TID_INO,
723 PROC_TID_STATUS,
724@@ -90,6 +92,7 @@ enum pid_directory_inos {
725 PROC_TID_ATTR_EXEC,
726 PROC_TID_ATTR_FSCREATE,
727 #endif
728+ PROC_TID_VINFO,
729 PROC_TID_FD_DIR = 0x8000, /* 0x8000-0xffff */
730 };
731
732@@ -123,6 +126,7 @@ static struct pid_entry tgid_base_stuff[
733 #ifdef CONFIG_KALLSYMS
734 E(PROC_TGID_WCHAN, "wchan", S_IFREG|S_IRUGO),
735 #endif
736+ E(PROC_TGID_VINFO, "vinfo", S_IFREG|S_IRUGO),
737 {0,0,NULL,0}
738 };
739 static struct pid_entry tid_base_stuff[] = {
740@@ -145,6 +149,7 @@ static struct pid_entry tid_base_stuff[]
741 #ifdef CONFIG_KALLSYMS
742 E(PROC_TID_WCHAN, "wchan", S_IFREG|S_IRUGO),
743 #endif
744+ E(PROC_TID_VINFO, "vinfo", S_IFREG|S_IRUGO),
745 {0,0,NULL,0}
746 };
747
748@@ -181,6 +186,7 @@ int proc_pid_stat(struct task_struct*,ch
749 int proc_pid_status(struct task_struct*,char*);
750 int proc_pid_statm(struct task_struct*,char*);
751 int proc_pid_cpu(struct task_struct*,char*);
752+// int proc_pid_vinfo(struct task_struct*,char*);
753
754 static int proc_fd_link(struct inode *inode, struct dentry **dentry, struct vfsmount **mnt)
755 {
756@@ -963,6 +969,7 @@ static struct inode *proc_pid_make_inode
757 inode->i_uid = task->euid;
758 inode->i_gid = task->egid;
759 }
760+ // inode->i_xid = vx_task_xid(task);
761 security_task_to_inode(task, inode);
762
763 out:
764@@ -1392,6 +1399,11 @@ static struct dentry *proc_pident_lookup
765 ei->op.proc_read = proc_pid_wchan;
766 break;
767 #endif
768+ case PROC_TID_VINFO:
769+ case PROC_TGID_VINFO:
770+ inode->i_fop = &proc_info_file_operations;
771+ ei->op.proc_read = proc_pid_vinfo;
772+ break;
773 default:
774 printk("procfs: impossible type (%d)",p->type);
775 iput(inode);
776@@ -1584,6 +1596,10 @@ struct dentry *proc_pid_lookup(struct in
777 if (!task)
778 goto out;
779
780+ if (tgid != 1 && !vx_check(vx_task_xid(task), VX_WATCH|VX_IDENT)) {
781+ put_task_struct(task);
782+ goto out;
783+ }
784 inode = proc_pid_make_inode(dir->i_sb, task, PROC_TGID_INO);
785
786
787@@ -1691,6 +1707,10 @@ static int get_tgid_list(int index, unsi
788 for ( ; p != &init_task; p = next_task(p)) {
789 int tgid = p->pid;
790 if (!pid_alive(p))
791+ continue;
792+ if (tgid != 1 && !vx_check(vx_task_xid(p), VX_WATCH|VX_IDENT))
793+ continue;
794+ if (current->vx_info && current->vx_info->vx_initpid == tgid)
795 continue;
796 if (--index >= 0)
797 continue;
798diff -NurpP --minimal linux-2.6.2-rc1/fs/proc/generic.c linux-2.6.2-rc1-vs0.05/fs/proc/generic.c
799--- linux-2.6.2-rc1/fs/proc/generic.c Fri Jan 9 08:00:12 2004
800+++ linux-2.6.2-rc1-vs0.05/fs/proc/generic.c Sat Jan 24 05:45:59 2004
801@@ -15,6 +15,7 @@
802 #include <linux/module.h>
803 #include <linux/mount.h>
804 #include <linux/smp_lock.h>
805+#include <linux/vinline.h>
806 #include <asm/uaccess.h>
807 #include <asm/bitops.h>
808
809@@ -349,6 +350,8 @@ struct dentry *proc_lookup(struct inode
810 for (de = de->subdir; de ; de = de->next) {
811 if (de->namelen != dentry->d_name.len)
812 continue;
813+ if (!vx_weak_check(0, de->vx_flags))
814+ continue;
815 if (!memcmp(dentry->d_name.name, de->name, de->namelen)) {
816 int ino = de->low_ino;
817 error = -EINVAL;
818@@ -424,9 +427,12 @@ int proc_readdir(struct file * filp,
819 }
820
821 do {
822+ if (!vx_weak_check(0, de->vx_flags))
823+ goto skip;
824 if (filldir(dirent, de->name, de->namelen, filp->f_pos,
825 de->low_ino, de->mode >> 12) < 0)
826 goto out;
827+ skip:
828 filp->f_pos++;
829 de = de->next;
830 } while (de);
831@@ -538,6 +544,7 @@ static struct proc_dir_entry *proc_creat
832 ent->namelen = len;
833 ent->mode = mode;
834 ent->nlink = nlink;
835+ ent->vx_flags = VX_ADMIN;
836 out:
837 return ent;
838 }
839@@ -558,7 +565,8 @@ struct proc_dir_entry *proc_symlink(cons
840 kfree(ent->data);
841 kfree(ent);
842 ent = NULL;
843- }
844+ } else
845+ ent->vx_flags = 0;
846 } else {
847 kfree(ent);
848 ent = NULL;
849diff -NurpP --minimal linux-2.6.2-rc1/fs/proc/inode.c linux-2.6.2-rc1-vs0.05/fs/proc/inode.c
850--- linux-2.6.2-rc1/fs/proc/inode.c Fri Jan 9 08:00:02 2004
851+++ linux-2.6.2-rc1-vs0.05/fs/proc/inode.c Sat Jan 24 05:45:59 2004
852@@ -207,6 +207,8 @@ printk("proc_iget: using deleted entry %
853 inode->i_uid = de->uid;
854 inode->i_gid = de->gid;
855 }
856+ if (de->vx_flags)
857+ PROC_I(inode)->vx_flags = de->vx_flags;
858 if (de->size)
859 inode->i_size = de->size;
860 if (de->nlink)
861diff -NurpP --minimal linux-2.6.2-rc1/fs/proc/root.c linux-2.6.2-rc1-vs0.05/fs/proc/root.c
862--- linux-2.6.2-rc1/fs/proc/root.c Fri Jan 9 07:59:55 2004
863+++ linux-2.6.2-rc1-vs0.05/fs/proc/root.c Sat Jan 24 05:45:59 2004
864@@ -23,6 +23,9 @@ struct proc_dir_entry *proc_net, *proc_b
865 #ifdef CONFIG_SYSCTL
866 struct proc_dir_entry *proc_sys_root;
867 #endif
868+struct proc_dir_entry *proc_virtual;
869+
870+extern void proc_vx_init(void);
871
872 static struct super_block *proc_get_sb(struct file_system_type *fs_type,
873 int flags, const char *dev_name, void *data)
874@@ -78,6 +81,7 @@ void __init proc_root_init(void)
875 proc_rtas_init();
876 #endif
877 proc_bus = proc_mkdir("bus", 0);
878+ proc_vx_init();
879 }
880
881 static struct dentry *proc_root_lookup(struct inode * dir, struct dentry * dentry, struct nameidata *nd)
882diff -NurpP --minimal linux-2.6.2-rc1/fs/proc/virtual.c linux-2.6.2-rc1-vs0.05/fs/proc/virtual.c
883--- linux-2.6.2-rc1/fs/proc/virtual.c Thu Jan 1 01:00:00 1970
884+++ linux-2.6.2-rc1-vs0.05/fs/proc/virtual.c Sat Jan 24 06:42:17 2004
885@@ -0,0 +1,548 @@
886+/*
887+ * linux/fs/proc/virtual.c
888+ *
889+ * Virtual Context Support
890+ *
891