diff -NurpP --minimal linux-2.6.38.7-vs2.3.0.37-rc16/include/linux/vserver/context.h linux-2.6.38.7-vs2.3.0.37-rc16.1/include/linux/vserver/context.h --- linux-2.6.38.7-vs2.3.0.37-rc16/include/linux/vserver/context.h 2011-01-31 22:46:21.000000000 +0100 +++ linux-2.6.38.7-vs2.3.0.37-rc16.1/include/linux/vserver/context.h 2011-05-31 14:33:19.000000000 +0200 @@ -118,8 +118,8 @@ struct vx_info { uint64_t vx_flags; /* context flags */ uint64_t vx_ccaps; /* context caps (vserver) */ + uint64_t vx_umask; /* unshare mask (guest) */ kernel_cap_t vx_bcaps; /* bounding caps (system) */ - unsigned long vx_umask; /* unshare mask (guest) */ struct task_struct *vx_reaper; /* guest reaper process */ pid_t vx_initpid; /* PID of guest init */ diff -NurpP --minimal linux-2.6.38.7-vs2.3.0.37-rc16/kernel/vserver/proc.c linux-2.6.38.7-vs2.3.0.37-rc16.1/kernel/vserver/proc.c --- linux-2.6.38.7-vs2.3.0.37-rc16/kernel/vserver/proc.c 2011-01-29 02:01:07.000000000 +0100 +++ linux-2.6.38.7-vs2.3.0.37-rc16.1/kernel/vserver/proc.c 2011-05-31 14:35:18.000000000 +0200 @@ -132,8 +132,10 @@ int proc_vxi_status(struct vx_info *vxi, buffer += sprintf(buffer, "CCaps:\t%016llx\n" + "Umask:\t%16llx\n" "Spaces:\t%08lx %08lx\n", (unsigned long long)vxi->vx_ccaps, + (unsigned long long)vxi->vx_umask, vxi->space[0].vx_nsmask, vxi->space[1].vx_nsmask); return buffer - orig; } diff -NurpP --minimal linux-2.6.38.7-vs2.3.0.37-rc16/kernel/vserver/switch.c linux-2.6.38.7-vs2.3.0.37-rc16.1/kernel/vserver/switch.c --- linux-2.6.38.7-vs2.3.0.37-rc16/kernel/vserver/switch.c 2011-04-15 16:09:19.000000000 +0200 +++ linux-2.6.38.7-vs2.3.0.37-rc16.1/kernel/vserver/switch.c 2011-05-31 14:38:34.000000000 +0200 @@ -109,6 +109,12 @@ long do_vcmd(uint32_t cmd, uint32_t id, case VCMD_get_space_default: return vc_get_space_mask(data, -1); + case VCMD_set_umask: + return vc_set_umask(vxi, data); + + case VCMD_get_umask: + return vc_get_umask(vxi, data); + #ifdef CONFIG_IA32_EMULATION case VCMD_get_rlimit: return __COMPAT(vc_get_rlimit, vxi, data, compat); @@ -325,6 +331,7 @@ long do_vserver(uint32_t cmd, uint32_t i __VCMD(get_bcaps, 3, VCA_VXI, VCF_INFO); __VCMD(get_ccaps, 3, VCA_VXI, VCF_INFO); __VCMD(get_cflags, 3, VCA_VXI, VCF_INFO); + __VCMD(get_umask, 3, VCA_VXI, VCF_INFO); __VCMD(get_badness, 3, VCA_VXI, VCF_INFO); __VCMD(get_vhi_name, 3, VCA_VXI, VCF_INFO); __VCMD(get_rlimit, 3, VCA_VXI, VCF_INFO); @@ -370,6 +377,7 @@ long do_vserver(uint32_t cmd, uint32_t i __VCMD(set_ccaps, 7, VCA_VXI, VCF_ARES | VCF_SETUP); __VCMD(set_bcaps, 7, VCA_VXI, VCF_ARES | VCF_SETUP); __VCMD(set_cflags, 7, VCA_VXI, VCF_ARES | VCF_SETUP); + __VCMD(set_umask, 7, VCA_VXI, VCF_ARES | VCF_SETUP); __VCMD(set_badness, 7, VCA_VXI, VCF_ARES | VCF_SETUP); __VCMD(set_vhi_name, 7, VCA_VXI, VCF_ARES | VCF_SETUP);