Commit 06d98473 authored by Tejun Heo's avatar Tejun Heo Committed by Oleg Nesterov

ptrace: s/tracehook_tracer_task()/ptrace_parent()/

tracehook.h is on the way out.  Rename tracehook_tracer_task() to
ptrace_parent() and move it from tracehook.h to ptrace.h.
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: John Johansen <john.johansen@canonical.com>
Cc: Stephen Smalley <sds@tycho.nsa.gov>
Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
parent 4b9d33e6
...@@ -172,7 +172,7 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns, ...@@ -172,7 +172,7 @@ static inline void task_state(struct seq_file *m, struct pid_namespace *ns,
task_tgid_nr_ns(rcu_dereference(p->real_parent), ns) : 0; task_tgid_nr_ns(rcu_dereference(p->real_parent), ns) : 0;
tpid = 0; tpid = 0;
if (pid_alive(p)) { if (pid_alive(p)) {
struct task_struct *tracer = tracehook_tracer_task(p); struct task_struct *tracer = ptrace_parent(p);
if (tracer) if (tracer)
tpid = task_pid_nr_ns(tracer, ns); tpid = task_pid_nr_ns(tracer, ns);
} }
......
...@@ -216,7 +216,7 @@ static struct mm_struct *__check_mem_permission(struct task_struct *task) ...@@ -216,7 +216,7 @@ static struct mm_struct *__check_mem_permission(struct task_struct *task)
if (task_is_stopped_or_traced(task)) { if (task_is_stopped_or_traced(task)) {
int match; int match;
rcu_read_lock(); rcu_read_lock();
match = (tracehook_tracer_task(task) == current); match = (ptrace_parent(task) == current);
rcu_read_unlock(); rcu_read_unlock();
if (match && ptrace_may_access(task, PTRACE_MODE_ATTACH)) if (match && ptrace_may_access(task, PTRACE_MODE_ATTACH))
return mm; return mm;
......
...@@ -150,6 +150,24 @@ int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr, ...@@ -150,6 +150,24 @@ int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr,
int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr, int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr,
unsigned long data); unsigned long data);
/**
* ptrace_parent - return the task that is tracing the given task
* @task: task to consider
*
* Returns %NULL if no one is tracing @task, or the &struct task_struct
* pointer to its tracer.
*
* Must called under rcu_read_lock(). The pointer returned might be kept
* live only by RCU. During exec, this may be called with task_lock() held
* on @task, still held from when check_unsafe_exec() was called.
*/
static inline struct task_struct *ptrace_parent(struct task_struct *task)
{
if (unlikely(task->ptrace))
return rcu_dereference(task->parent);
return NULL;
}
/** /**
* ptrace_event_enabled - test whether a ptrace event is enabled * ptrace_event_enabled - test whether a ptrace event is enabled
* @task: ptracee of interest * @task: ptracee of interest
......
...@@ -129,24 +129,6 @@ static inline void tracehook_report_syscall_exit(struct pt_regs *regs, int step) ...@@ -129,24 +129,6 @@ static inline void tracehook_report_syscall_exit(struct pt_regs *regs, int step)
ptrace_report_syscall(regs); ptrace_report_syscall(regs);
} }
/**
* tracehook_tracer_task - return the task that is tracing the given task
* @tsk: task to consider
*
* Returns NULL if no one is tracing @task, or the &struct task_struct
* pointer to its tracer.
*
* Must called under rcu_read_lock(). The pointer returned might be kept
* live only by RCU. During exec, this may be called with task_lock()
* held on @task, still held from when tracehook_unsafe_exec() was called.
*/
static inline struct task_struct *tracehook_tracer_task(struct task_struct *tsk)
{
if (tsk->ptrace & PT_PTRACED)
return rcu_dereference(tsk->parent);
return NULL;
}
/** /**
* tracehook_signal_handler - signal handler setup is complete * tracehook_signal_handler - signal handler setup is complete
* @sig: number of signal being delivered * @sig: number of signal being delivered
......
...@@ -67,7 +67,7 @@ static int may_change_ptraced_domain(struct task_struct *task, ...@@ -67,7 +67,7 @@ static int may_change_ptraced_domain(struct task_struct *task,
int error = 0; int error = 0;
rcu_read_lock(); rcu_read_lock();
tracer = tracehook_tracer_task(task); tracer = ptrace_parent(task);
if (tracer) { if (tracer) {
/* released below */ /* released below */
cred = get_task_cred(tracer); cred = get_task_cred(tracer);
......
...@@ -2048,7 +2048,7 @@ static int selinux_bprm_set_creds(struct linux_binprm *bprm) ...@@ -2048,7 +2048,7 @@ static int selinux_bprm_set_creds(struct linux_binprm *bprm)
u32 ptsid = 0; u32 ptsid = 0;
rcu_read_lock(); rcu_read_lock();
tracer = tracehook_tracer_task(current); tracer = ptrace_parent(current);
if (likely(tracer != NULL)) { if (likely(tracer != NULL)) {
sec = __task_cred(tracer)->security; sec = __task_cred(tracer)->security;
ptsid = sec->sid; ptsid = sec->sid;
...@@ -5314,7 +5314,7 @@ static int selinux_setprocattr(struct task_struct *p, ...@@ -5314,7 +5314,7 @@ static int selinux_setprocattr(struct task_struct *p,
Otherwise, leave SID unchanged and fail. */ Otherwise, leave SID unchanged and fail. */
ptsid = 0; ptsid = 0;
task_lock(p); task_lock(p);
tracer = tracehook_tracer_task(p); tracer = ptrace_parent(p);
if (tracer) if (tracer)
ptsid = task_sid(tracer); ptsid = task_sid(tracer);
task_unlock(p); task_unlock(p);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment