aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPoul-Henning Kamp <phk@FreeBSD.org>2004-11-06 23:36:09 +0000
committerPoul-Henning Kamp <phk@FreeBSD.org>2004-11-06 23:36:09 +0000
commit3b19b5af3a84863824613d548b45c5b590dc230a (patch)
tree8476abc75fe2fb0976e165ef56c9d9560ec4c812
parentdad740e96713474752fcf188d34806d0e726d43b (diff)
downloadsrc-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.c8
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;