diff options
author | Poul-Henning Kamp <phk@FreeBSD.org> | 2004-11-06 23:36:09 +0000 |
---|---|---|
committer | Poul-Henning Kamp <phk@FreeBSD.org> | 2004-11-06 23:36:09 +0000 |
commit | 3b19b5af3a84863824613d548b45c5b590dc230a (patch) | |
tree | 8476abc75fe2fb0976e165ef56c9d9560ec4c812 | |
parent | dad740e96713474752fcf188d34806d0e726d43b (diff) | |
download | src-3b19b5af3a84863824613d548b45c5b590dc230a.tar.gz src-3b19b5af3a84863824613d548b45c5b590dc230a.zip |
When we open /dev/null for stdin/out/err for safety reasons, do it right:
we should preserve f_data and f_ops if they are already set.
Notes
Notes:
svn path=/head/; revision=137325
-rw-r--r-- | sys/kern/kern_descrip.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c index 9a448b4e938f..132f326cbda7 100644 --- a/sys/kern/kern_descrip.c +++ b/sys/kern/kern_descrip.c @@ -1791,10 +1791,12 @@ fdcheckstd(td) break; } NDFREE(&nd, NDF_ONLY_PNBUF); - fp->f_vnode = nd.ni_vp; - fp->f_data = nd.ni_vp; fp->f_flag = flags; - fp->f_ops = &vnops; + fp->f_vnode = nd.ni_vp; + if (fp->f_data == NULL) + fp->f_data = nd.ni_vp; + if (fp->f_ops == &badfileops) + fp->f_ops = &vnops; fp->f_type = DTYPE_VNODE; VOP_UNLOCK(nd.ni_vp, 0, td); devnull = fd; |