Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git] / include / linux / vs_cvirt.h
index 0901e73..3158d5a 100644 (file)
@@ -103,6 +103,54 @@ static inline void vx_uninterruptible_dec(struct task_struct *p)
 }
 
 
+struct inode;
+
+#define VXF_FAKE_INIT  (VXF_INFO_INIT|VXF_STATE_INIT)
+
+static inline
+int proc_pid_visible(struct task_struct *task, int pid)
+{
+       if ((pid == 1) &&
+               !vx_flags(VXF_FAKE_INIT, VXF_FAKE_INIT))
+               /* show a blend through init */
+               goto visible;
+       if (vx_check(vx_task_xid(task), VX_WATCH|VX_IDENT))
+               goto visible;
+       return 0;
+visible:
+       return 1;
+}
+
+static inline
+struct task_struct *find_proc_task_by_pid(int pid)
+{
+       struct task_struct *task = find_task_by_pid(pid);
+
+       if (task && !proc_pid_visible(task, pid)) {
+               vxdprintk(VXD_CBIT(misc, 6),
+                       "dropping task %p[#%u,%u] for %p[#%u,%u]",
+                       task, task->xid, task->pid,
+                       current, current->xid, current->pid);
+               task = NULL;
+       }
+       return task;
+}
+
+static inline
+struct task_struct *vx_get_proc_task(struct inode *inode, struct pid *pid)
+{
+       struct task_struct *task = get_pid_task(pid, PIDTYPE_PID);
+
+       if (task && !proc_pid_visible(task, pid->nr)) {
+               vxdprintk(VXD_CBIT(misc, 6),
+                       "dropping task %p[#%u,%u] for %p[#%u,%u]",
+                       task, task->xid, task->pid,
+                       current, current->xid, current->pid);
+               task = NULL;
+       }
+       return task;
+}
+
 #else
 #warning duplicate inclusion
 #endif