Fix fdcheckstd to pass the file descriptor along through vn_open. When

opening a device, devfs_open needs the file descriptor to install its
own fileops. Failing to pass the file descriptor causes the vnode to
be returned with the regular vnops, which will cause a panic on the
first read or write because devfs_specops is not meant to support
those operations.

This bug caused a panic after exec'ing any set[ug]id program with
fds 0..2 closed (i.e., if any action had to be taken by fdcheckstd, we
would panic if the exec'd program ever tried to use any of those
descriptors).

Reviewed by:	phk
Approved by:	re (scottl)
This commit is contained in:
Dima Dorfman 2005-06-25 03:34:49 +00:00
parent 758c41b8cc
commit 1ee6b74603

View File

@ -1803,7 +1803,7 @@ fdcheckstd(struct thread *td)
NDINIT(&nd, LOOKUP, FOLLOW | MPSAFE, UIO_SYSSPACE,
"/dev/null", td);
flags = FREAD | FWRITE;
error = vn_open(&nd, &flags, 0, -1);
error = vn_open(&nd, &flags, 0, fd);
if (error != 0) {
/*
* Someone may have closed the entry in the