diff options
author | jhb <jhb@FreeBSD.org> | 2002-06-07 05:41:27 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2002-06-07 05:41:27 +0000 |
commit | eb29fde68b289c16b9ea94acea2342fc6d6042d7 (patch) | |
tree | 6661e3dca12190987133994438ecc89badab8f0d /sys/kern/kern_exec.c | |
parent | e277387a704340cabd0a8f106eee363613966b38 (diff) | |
download | FreeBSD-src-eb29fde68b289c16b9ea94acea2342fc6d6042d7.zip FreeBSD-src-eb29fde68b289c16b9ea94acea2342fc6d6042d7.tar.gz |
Properly lock accesses to p_tracep and p_traceflag. Also make a few
ktrace-only things #ifdef KTRACE that were not before.
Diffstat (limited to 'sys/kern/kern_exec.c')
-rw-r--r-- | sys/kern/kern_exec.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index f3a24c8..913f951 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -135,7 +135,10 @@ execve(td, uap) int (*img_first)(struct image_params *); struct pargs *oldargs, *newargs = NULL; struct procsig *oldprocsig, *newprocsig; - struct vnode *tracevp = NULL, *textvp = NULL; +#ifdef KTRACE + struct vnode *tracevp = NULL; +#endif + struct vnode *textvp = NULL; imgp = &image_params; @@ -369,11 +372,15 @@ interpret: * we do not regain any tracing during a possible block. */ setsugid(p); +#ifdef KTRACE if (p->p_tracep && suser_cred(oldcred, PRISON_ROOT)) { + mtx_lock(&ktrace_mtx); p->p_traceflag = 0; tracevp = p->p_tracep; p->p_tracep = NULL; + mtx_unlock(&ktrace_mtx); } +#endif /* Make sure file descriptors 0..2 are in use. */ error = fdcheckstd(td); if (error != 0) @@ -475,8 +482,10 @@ interpret: */ if (textvp != NULL) vrele(textvp); +#ifdef KTRACE if (tracevp != NULL) vrele(tracevp); +#endif pargs_drop(oldargs); exec_fail_dealloc: |