diff options
author | dillon <dillon@FreeBSD.org> | 2001-10-24 01:05:39 +0000 |
---|---|---|
committer | dillon <dillon@FreeBSD.org> | 2001-10-24 01:05:39 +0000 |
commit | 016be1f136b003c5977295befc796d712cf358db (patch) | |
tree | ed7e8fddba779e6ae62cdf79fa92de3ef165b5f4 /sys/kern/kern_fork.c | |
parent | 24245013268a99a0d94d53046ac8844b363fa0f8 (diff) | |
download | FreeBSD-src-016be1f136b003c5977295befc796d712cf358db.zip FreeBSD-src-016be1f136b003c5977295befc796d712cf358db.tar.gz |
Fix ktrace enablement/disablement races that can result in a vnode
ref count panic.
Bug noticed by: ps
Reviewed by: ps
MFC after: 1 day
Diffstat (limited to 'sys/kern/kern_fork.c')
-rw-r--r-- | sys/kern/kern_fork.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 592ff44..2d1ce60 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -585,10 +585,11 @@ again: PROC_LOCK(p1); #ifdef KTRACE /* - * Copy traceflag and tracefile if enabled. - * If not inherited, these were zeroed above. + * Copy traceflag and tracefile if enabled. If not inherited, + * these were zeroed above but we still could have a trace race + * so make sure p2's p_tracep is NULL. */ - if (p1->p_traceflag & KTRFAC_INHERIT) { + if ((p1->p_traceflag & KTRFAC_INHERIT) && p2->p_tracep == NULL) { p2->p_traceflag = p1->p_traceflag; if ((p2->p_tracep = p1->p_tracep) != NULL) { PROC_UNLOCK(p1); |