diff -NurpP --minimal linux-2.6.32-rc8-vs2.3.0.36.25.1/include/linux/vserver/context_cmd.h linux-2.6.32-rc8-vs2.3.0.36.25.2/include/linux/vserver/context_cmd.h --- linux-2.6.32-rc8-vs2.3.0.36.25.1/include/linux/vserver/context_cmd.h 2009-11-22 22:24:43.000000000 +0100 +++ linux-2.6.32-rc8-vs2.3.0.36.25.2/include/linux/vserver/context_cmd.h 2009-11-23 07:41:03.000000000 +0100 @@ -111,6 +111,23 @@ extern int vc_set_bcaps(struct vx_info * #endif /* __KERNEL__ */ +/* umask commands */ + +#define VCMD_get_umask VC_CMD(FLAGS, 13, 0) +#define VCMD_set_umask VC_CMD(FLAGS, 14, 0) + +struct vcmd_umask { + uint64_t umask; + uint64_t mask; +}; + +#ifdef __KERNEL__ +extern int vc_get_umask(struct vx_info *, void __user *); +extern int vc_set_umask(struct vx_info *, void __user *); + +#endif /* __KERNEL__ */ + + /* OOM badness */ #define VCMD_get_badness VC_CMD(MEMCTRL, 5, 0) diff -NurpP --minimal linux-2.6.32-rc8-vs2.3.0.36.25.1/kernel/vserver/context.c linux-2.6.32-rc8-vs2.3.0.36.25.2/kernel/vserver/context.c --- linux-2.6.32-rc8-vs2.3.0.36.25.1/kernel/vserver/context.c 2009-11-23 05:38:01.000000000 +0100 +++ linux-2.6.32-rc8-vs2.3.0.36.25.2/kernel/vserver/context.c 2009-11-23 07:45:45.000000000 +0100 @@ -1004,6 +1004,31 @@ int vc_set_bcaps(struct vx_info *vxi, vo } +int vc_get_umask(struct vx_info *vxi, void __user *data) +{ + struct vcmd_umask vc_data; + + vc_data.umask = vxi->vx_umask; + vc_data.mask = ~0ULL; + + if (copy_to_user(data, &vc_data, sizeof(vc_data))) + return -EFAULT; + return 0; +} + +int vc_set_umask(struct vx_info *vxi, void __user *data) +{ + struct vcmd_umask vc_data; + + if (copy_from_user(&vc_data, data, sizeof(vc_data))) + return -EFAULT; + + vxi->vx_umask = vs_mask_flags(vxi->vx_umask, + vc_data.umask, vc_data.mask); + return 0; +} + + int vc_get_badness(struct vx_info *vxi, void __user *data) { struct vcmd_badness_v0 vc_data;