git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git]
/
kernel
/
vserver
/
legacy.c
diff --git
a/kernel/vserver/legacy.c
b/kernel/vserver/legacy.c
index
73efdaa
..
7ab0b1e
100644
(file)
--- a/
kernel/vserver/legacy.c
+++ b/
kernel/vserver/legacy.c
@@
-10,7
+10,6
@@
*
*/
*
*/
-#include <linux/config.h>
#include <linux/sched.h>
#include <linux/vs_context.h>
#include <linux/vs_network.h>
#include <linux/sched.h>
#include <linux/vs_context.h>
#include <linux/vs_network.h>
@@
-22,14
+21,18
@@
#include <asm/uaccess.h>
#include <asm/uaccess.h>
+extern int vx_set_init(struct vx_info *, struct task_struct *);
static int vx_set_initpid(struct vx_info *vxi, int pid)
{
static int vx_set_initpid(struct vx_info *vxi, int pid)
{
- if (vxi->vx_initpid)
- return -EPERM;
+ struct task_struct *init;
+
+ init = find_task_by_real_pid(pid);
+ if (!init)
+ return -ESRCH;
- vxi->vx_
initpid = pid
;
- return
0
;
+ vxi->vx_
flags &= ~VXF_STATE_INIT
;
+ return
vx_set_init(vxi, init)
;
}
int vc_new_s_context(uint32_t ctx, void __user *data)
}
int vc_new_s_context(uint32_t ctx, void __user *data)
@@
-74,9
+77,9
@@
int vc_new_s_context(uint32_t ctx, void __user *data)
return -EINVAL;
if ((ctx == VX_DYNAMIC_ID) || (ctx < MIN_D_CONTEXT))
return -EINVAL;
if ((ctx == VX_DYNAMIC_ID) || (ctx < MIN_D_CONTEXT))
- new_vxi = lo
cate
_or_create_vx_info(ctx);
+ new_vxi = lo
okup
_or_create_vx_info(ctx);
else
else
- new_vxi = lo
cate
_vx_info(ctx);
+ new_vxi = lo
okup
_vx_info(ctx);
if (!new_vxi)
return -EINVAL;
if (!new_vxi)
return -EINVAL;
@@
-86,7
+89,7
@@
int vc_new_s_context(uint32_t ctx, void __user *data)
vx_info_flags(new_vxi, VX_INFO_PRIVATE, 0))
goto out_put;
vx_info_flags(new_vxi, VX_INFO_PRIVATE, 0))
goto out_put;
- new_vxi->vx_flags &= ~
(VXF_STATE_SETUP|VXF_STATE_INIT)
;
+ new_vxi->vx_flags &= ~
VXF_STATE_SETUP
;
ret = vx_migrate_task(current, new_vxi);
if (ret == 0) {
ret = vx_migrate_task(current, new_vxi);
if (ret == 0) {
@@
-100,6
+103,9
@@
int vc_new_s_context(uint32_t ctx, void __user *data)
if (vc_data.flags & VX_INFO_NPROC)
new_vxi->limit.rlim[RLIMIT_NPROC] =
current->signal->rlim[RLIMIT_NPROC].rlim_max;
if (vc_data.flags & VX_INFO_NPROC)
new_vxi->limit.rlim[RLIMIT_NPROC] =
current->signal->rlim[RLIMIT_NPROC].rlim_max;
+
+ /* tweak some defaults for legacy */
+ new_vxi->vx_flags |= (VXF_HIDE_NETIF|VXF_INFO_INIT);
ret = new_vxi->vx_id;
}
out_put:
ret = new_vxi->vx_id;
}
out_put: