summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_process.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-05-04 18:13:11 +0000
committerjhb <jhb@FreeBSD.org>2001-05-04 18:13:11 +0000
commit79ebab510f5c7c1d61b1bc87210050d19929e4f5 (patch)
treecac8cc1ef14700df305b6800bdd7d3f39a9aa90c /sys/kern/sys_process.c
parent5ff7127b687a2093653fc1fdf9a466512cc763e6 (diff)
downloadFreeBSD-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.c7
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);
OpenPOWER on IntegriCloud