#include <linux/mount.h>
#include <linux/security.h>
#include <linux/ptrace.h>
-#include <linux/tracehook.h>
#include <linux/seccomp.h>
#include <linux/cpuset.h>
#include <linux/audit.h>
#include <linux/poll.h>
-#include <linux/vs_context.h>
-#include <linux/vs_network.h>
#include "internal.h"
return result;
}
+#define MAY_PTRACE(task) \
+ (task == current || \
+ (task->parent == current && \
+ (task->ptrace & PT_PTRACED) && \
+ (task->state == TASK_STOPPED || task->state == TASK_TRACED) && \
+ security_ptrace(current,task) == 0))
+
struct mm_struct *mm_for_maps(struct task_struct *task)
{
struct mm_struct *mm = get_task_mm(task);
if (!task)
goto out_no_task;
- if (!tracehook_allow_access_process_vm(task)
- || !ptrace_may_attach(task))
+ if (!MAY_PTRACE(task) || !ptrace_may_attach(task))
goto out;
ret = -ENOMEM;
this_len = (count > PAGE_SIZE) ? PAGE_SIZE : count;
retval = access_process_vm(task, src, page, this_len, 0);
- if (!retval || !tracehook_allow_access_process_vm(task)
- || !ptrace_may_attach(task)) {
+ if (!retval || !MAY_PTRACE(task) || !ptrace_may_attach(task)) {
if (!ret)
ret = -EIO;
break;
if (!task)
goto out_no_task;
- if (!tracehook_allow_access_process_vm(task)
- || !ptrace_may_attach(task))
+ if (!MAY_PTRACE(task) || !ptrace_may_attach(task))
goto out;
copied = -ENOMEM;
if (task) {
int pid = (inode->i_ino >> 16) & 0xFFFF;
- if (!proc_pid_visible(task, pid))
+ if (!vx_proc_pid_visible(task, pid))
goto out_drop;
ret = 1;
extern int proc_pid_vx_info(struct task_struct *, char *);
extern int proc_pid_nx_info(struct task_struct *, char *);
+extern int proc_pid_vx_info(struct task_struct *, char *);
+extern int proc_pid_nx_info(struct task_struct *, char *);
+
/* SMP-safe */
static struct dentry *proc_pident_lookup(struct inode *dir,
struct dentry *dentry,
goto out;
rcu_read_lock();
- task = find_proc_task_by_pid(tgid);
+ task = vx_find_proc_task_by_pid(tgid);
if (task)
get_task_struct(task);
rcu_read_unlock();
goto out;
rcu_read_lock();
- task = find_proc_task_by_pid(tid);
+ task = vx_find_proc_task_by_pid(tid);
if (task)
get_task_struct(task);
rcu_read_unlock();
struct task_struct *pos;
rcu_read_lock();
if (tgid && nr) {
- pos = find_proc_task_by_pid(tgid);
+ pos = vx_find_proc_task_by_pid(tgid);
if (pos && thread_group_leader(pos))
goto found;
}
int len;
ino_t ino;
tgid = vx_map_tgid(task->pid);
- if (!proc_pid_visible(task, tgid))
+ if (!vx_proc_pid_visible(task, tgid))
continue;
len = snprintf(buf, sizeof(buf), "%d", tgid);
rcu_read_lock();
/* Attempt to start with the pid of a thread */
if (tid && (nr > 0)) {
- pos = find_proc_task_by_pid(tid);
+ pos = vx_find_proc_task_by_pid(tid);
if (pos && (pos->group_leader == leader))
goto found;
}
task = next_tid(task), pos++) {
int len;
tid = vx_map_pid(task->pid);
- if (!proc_pid_visible(task, tid))
+ if (!vx_proc_pid_visible(task, tid))
continue;
len = snprintf(buf, sizeof(buf), "%d", tid);