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_exec.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_exec.c')
-rw-r--r-- | sys/kern/kern_exec.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index 32df1c2..0e5fb94 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -335,9 +335,13 @@ interpret: */ setsugid(p); if (p->p_tracep && suser_xxx(oldcred, NULL, PRISON_ROOT)) { - p->p_traceflag = 0; - vrele(p->p_tracep); - p->p_tracep = NULL; + struct vnode *vtmp; + + if ((vtmp = p->p_tracep) != NULL) { + p->p_tracep = NULL; + p->p_traceflag = 0; + vrele(vtmp); + } } /* * Set the new credentials. |