summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_process.c
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2002-04-14 17:12:55 +0000
committeralfred <alfred@FreeBSD.org>2002-04-14 17:12:55 +0000
commit09258856910ae8a198a025ce342e7be621517c6b (patch)
tree86cf9a464fc95764601e09b652b83648c7a83ea5 /sys/kern/sys_process.c
parent1fd1b83baf376aa6cdbc4fee6c646c2e732250cd (diff)
downloadFreeBSD-src-09258856910ae8a198a025ce342e7be621517c6b.zip
FreeBSD-src-09258856910ae8a198a025ce342e7be621517c6b.tar.gz
Don't allow one to trace an ancestor when already traced.
PR: kern/29741 Submitted by: Dave Zarzycki <zarzycki@FreeBSD.org> Fix from: Tim J. Robbins <tim@robbins.dropbear.id.au> MFC After: 2 weeks
Diffstat (limited to 'sys/kern/sys_process.c')
-rw-r--r--sys/kern/sys_process.c15
1 files changed, 14 insertions, 1 deletions
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;
OpenPOWER on IntegriCloud