From 09258856910ae8a198a025ce342e7be621517c6b Mon Sep 17 00:00:00 2001 From: alfred Date: Sun, 14 Apr 2002 17:12:55 +0000 Subject: Don't allow one to trace an ancestor when already traced. PR: kern/29741 Submitted by: Dave Zarzycki Fix from: Tim J. Robbins MFC After: 2 weeks --- sys/kern/sys_process.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'sys/kern/sys_process.c') diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index 42cdebc..3561f6f 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -332,11 +332,13 @@ ptrace(struct thread *td, struct ptrace_args *uap) struct fpreg fpreg; struct reg reg; } r; - struct proc *p; + struct proc *curp, *p, *pp; struct thread *td2; int error, write; int proctree_locked = 0; + curp = td->td_proc; + /* * Do copyin() early before getting locks and lock proctree before * locking the process. @@ -422,6 +424,17 @@ ptrace(struct thread *td, struct ptrace_args *uap) goto fail; } + /* Can't trace an ancestor if you're being traced. */ + if (curp->p_flag & P_TRACED) { + for (pp = curp->p_pptr; pp != NULL; pp = pp->p_pptr) { + if (pp == p) { + error = EINVAL; + goto fail; + } + } + } + + /* OK */ break; -- cgit v1.1