diff options
author | jhb <jhb@FreeBSD.org> | 2001-05-04 18:13:11 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2001-05-04 18:13:11 +0000 |
commit | 79ebab510f5c7c1d61b1bc87210050d19929e4f5 (patch) | |
tree | cac8cc1ef14700df305b6800bdd7d3f39a9aa90c /sys/kern/sys_process.c | |
parent | 5ff7127b687a2093653fc1fdf9a466512cc763e6 (diff) | |
download | FreeBSD-src-79ebab510f5c7c1d61b1bc87210050d19929e4f5.zip FreeBSD-src-79ebab510f5c7c1d61b1bc87210050d19929e4f5.tar.gz |
Fix a bug in the pfind() changes due to confusing the process returned by
pfind() ('pp') with the process being detached from ptrace.
Reported by: bde
Diffstat (limited to 'sys/kern/sys_process.c')
-rw-r--r-- | sys/kern/sys_process.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c index d08f342..03640cf 100644 --- a/sys/kern/sys_process.c +++ b/sys/kern/sys_process.c @@ -381,7 +381,12 @@ ptrace(curp, uap) struct proc *pp; pp = pfind(p->p_oppid); - proc_reparent(p, pp ? pp : initproc); + if (pp != NULL) + PROC_UNLOCK(pp); + else + pp = initproc; + PROC_LOCK(p); + proc_reparent(p, pp); } else PROC_LOCK(p); p->p_flag &= ~(P_TRACED | P_WAITED); |