diff -NurpP linux-2.6.17.8-vs2.1.1-rc29.2.4/fs/proc/array.c linux-2.6.17.8-vs2.1.1-rc29.3.1/fs/proc/array.c --- linux-2.6.17.8-vs2.1.1-rc29.2.4/fs/proc/array.c 2006-07-09 17:06:49 +0200 +++ linux-2.6.17.8-vs2.1.1-rc29.3.1/fs/proc/array.c 2006-08-19 19:46:49 +0200 @@ -328,7 +328,7 @@ int proc_pid_status(struct task_struct * buffer = task_cap(task, buffer); buffer = cpuset_task_status_allowed(task, buffer); - if (task_vx_flags(task, VXF_INFO_HIDE, 0)) + if (task_vx_flags(task, VXF_HIDE_VINFO, 0)) goto skip; #ifdef CONFIG_VSERVER_LEGACY buffer += sprintf (buffer,"s_context: %d\n", vx_task_xid(task)); diff -NurpP linux-2.6.17.8-vs2.1.1-rc29.2.4/fs/proc/base.c linux-2.6.17.8-vs2.1.1-rc29.3.1/fs/proc/base.c --- linux-2.6.17.8-vs2.1.1-rc29.2.4/fs/proc/base.c 2006-08-17 00:42:17 +0200 +++ linux-2.6.17.8-vs2.1.1-rc29.3.1/fs/proc/base.c 2006-08-22 19:02:39 +0200 @@ -72,6 +72,7 @@ #include #include #include +#include #include #include #include "internal.h" @@ -1332,7 +1333,7 @@ static int proc_pident_readdir(struct fi goto out; } p = ents + i; - hide = vx_flags(VXF_INFO_HIDE, 0); + hide = vx_flags(VXF_HIDE_VINFO, 0); while (p->name) { if (hide) { switch (p->type) { @@ -1448,11 +1479,10 @@ static int pid_revalidate(struct dentry struct inode *inode = dentry->d_inode; struct task_struct *task = proc_task(inode); - if (!vx_check(vx_task_xid(task), VX_IDENT)) - goto out_drop; - /* discard wrong fakeinit */ - if (pid_alive(task)) { + if (!vx_check(vx_task_xid(task), VX_IDENT)) + goto out_drop; + if (proc_type(inode) == PROC_TGID_INO || proc_type(inode) == PROC_TID_INO || task_dumpable(task)) { inode->i_uid = task->euid; inode->i_gid = task->egid; @@ -1903,14 +1933,14 @@ static struct dentry *proc_pident_lookup #endif case PROC_TID_VX_INFO: case PROC_TGID_VX_INFO: - if (task_vx_flags(task, VXF_INFO_HIDE, 0)) + if (task_vx_flags(task, VXF_HIDE_VINFO, 0)) goto out_noent; inode->i_fop = &proc_info_file_operations; ei->op.proc_read = proc_pid_vx_info; break; case PROC_TID_IP_INFO: case PROC_TGID_IP_INFO: - if (task_vx_flags(task, VXF_INFO_HIDE, 0)) + if (task_vx_flags(task, VXF_HIDE_VINFO, 0)) goto out_noent; inode->i_fop = &proc_info_file_operations; ei->op.proc_read = proc_pid_nx_info; diff -NurpP linux-2.6.17.8-vs2.1.1-rc29.2.4/include/linux/vserver/context.h linux-2.6.17.8-vs2.1.1-rc29.3.1/include/linux/vserver/context.h --- linux-2.6.17.8-vs2.1.1-rc29.2.4/include/linux/vserver/context.h 2006-08-06 06:56:07 +0200 +++ linux-2.6.17.8-vs2.1.1-rc29.3.1/include/linux/vserver/context.h 2006-08-19 19:46:02 +0200 @@ -39,6 +39,7 @@ #define VXF_HIDE_MOUNT 0x01000000 #define VXF_HIDE_NETIF 0x02000000 +#define VXF_HIDE_VINFO 0x04000000 #define VXF_STATE_SETUP (1ULL<<32) #define VXF_STATE_INIT (1ULL<<33) diff -NurpP linux-2.6.17.8-vs2.1.1-rc29.2.4/kernel/vserver/proc.c linux-2.6.17.8-vs2.1.1-rc29.3.1/kernel/vserver/proc.c --- linux-2.6.17.8-vs2.1.1-rc29.2.4/kernel/vserver/proc.c 2006-07-30 17:07:36 +0200 +++ linux-2.6.17.8-vs2.1.1-rc29.3.1/kernel/vserver/proc.c 2006-08-19 19:56:39 +0200 @@ -870,8 +870,6 @@ int proc_pid_vx_info(struct task_struct char * orig = buffer; buffer += sprintf (buffer,"XID:\t%d\n", vx_task_xid(p)); - if (vx_flags(VXF_INFO_HIDE, 0)) - goto out; vxi = task_get_vx_info(p); if (!vxi) @@ -899,8 +897,7 @@ int proc_pid_nx_info(struct task_struct int i; buffer += sprintf (buffer,"NID:\t%d\n", nx_task_nid(p)); - if (vx_flags(VXF_INFO_HIDE, 0)) - goto out; + nxi = task_get_nx_info(p); if (!nxi) goto out;