X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=kernel%2Fvserver%2Flegacy.c;h=51533ac5f9d1bd2bd65d4e697467b95df14f9a3b;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=7ab0b1ebafbdaf5cd4c9fa8eae49347d1214ef90;hpb=43bc926fffd92024b46cafaf7350d669ba9ca884;p=linux-2.6.git diff --git a/kernel/vserver/legacy.c b/kernel/vserver/legacy.c index 7ab0b1eba..51533ac5f 100644 --- a/kernel/vserver/legacy.c +++ b/kernel/vserver/legacy.c @@ -4,9 +4,10 @@ * Virtual Server: Legacy Funtions * * Copyright (C) 2001-2003 Jacques Gelinas - * Copyright (C) 2003-2005 Herbert Pötzl + * Copyright (C) 2003-2007 Herbert Pötzl * * V0.01 broken out from vcontext.c V0.05 + * V0.02 updated to spaces *sigh* * */ @@ -14,8 +15,8 @@ #include #include #include -#include -#include +#include +// #include #include #include @@ -30,8 +31,6 @@ static int vx_set_initpid(struct vx_info *vxi, int pid) init = find_task_by_real_pid(pid); if (!init) return -ESRCH; - - vxi->vx_flags &= ~VXF_STATE_INIT; return vx_set_init(vxi, init); } @@ -61,9 +60,9 @@ int vc_new_s_context(uint32_t ctx, void __user *data) return ret; } - if (!vx_check(0, VX_ADMIN) || !capable(CAP_SYS_ADMIN) + if (!vx_check(0, VS_ADMIN) || !capable(CAP_SYS_ADMIN) /* might make sense in the future, or not ... */ - || vx_flags(VX_INFO_LOCK, 0)) + || vx_flags(VX_INFO_PRIVATE, 0)) return -EPERM; /* ugly hack for Spectator */ @@ -89,20 +88,20 @@ int vc_new_s_context(uint32_t ctx, void __user *data) vx_info_flags(new_vxi, VX_INFO_PRIVATE, 0)) goto out_put; + ret = vx_migrate_task(current, new_vxi, + vx_info_flags(new_vxi, VXF_STATE_SETUP, 0)); new_vxi->vx_flags &= ~VXF_STATE_SETUP; - ret = vx_migrate_task(current, new_vxi); if (ret == 0) { current->vx_info->vx_bcaps &= (~vc_data.remove_cap); new_vxi->vx_flags |= vc_data.flags; if (vc_data.flags & VX_INFO_INIT) vx_set_initpid(new_vxi, current->tgid); if (vc_data.flags & VX_INFO_NAMESPACE) - vx_set_namespace(new_vxi, - current->namespace, current->fs); + vx_set_space(new_vxi, CLONE_NEWNS|CLONE_FS); if (vc_data.flags & VX_INFO_NPROC) - new_vxi->limit.rlim[RLIMIT_NPROC] = - current->signal->rlim[RLIMIT_NPROC].rlim_max; + __rlim_set(&new_vxi->limit, RLIMIT_NPROC, + current->signal->rlim[RLIMIT_NPROC].rlim_max); /* tweak some defaults for legacy */ new_vxi->vx_flags |= (VXF_HIDE_NETIF|VXF_INFO_INIT);