svn commit: r219677 - stable/8/sys/kern

Jilles Tjoelker jilles at FreeBSD.org
Tue Mar 15 20:24:21 UTC 2011


Author: jilles
Date: Tue Mar 15 20:24:21 2011
New Revision: 219677
URL: http://svn.freebsd.org/changeset/base/219677

Log:
  MFC r218019: Do not trip a KASSERT if /dev/null cannot be opened for a
  setuid program.
  
  The fdcheckstd() function makes sure fds 0, 1 and 2 are open by opening
  /dev/null. If this fails (e.g. missing devfs or wrong permissions),
  fdcheckstd() will return failure and the process will exit as if it received
  SIGABRT. The KASSERT is only to check that kern_open() returns the expected
  fd, given that it succeeded.
  
  Tripping the KASSERT is most likely if fd 0 is open but fd 1 or 2 are not.

Modified:
  stable/8/sys/kern/kern_descrip.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)

Modified: stable/8/sys/kern/kern_descrip.c
==============================================================================
--- stable/8/sys/kern/kern_descrip.c	Tue Mar 15 19:47:20 2011	(r219676)
+++ stable/8/sys/kern/kern_descrip.c	Tue Mar 15 20:24:21 2011	(r219677)
@@ -2024,10 +2024,10 @@ fdcheckstd(struct thread *td)
 			error = kern_open(td, "/dev/null", UIO_SYSSPACE,
 			    O_RDWR, 0);
 			devnull = td->td_retval[0];
-			KASSERT(devnull == i, ("oof, we didn't get our fd"));
 			td->td_retval[0] = save;
 			if (error)
 				break;
+			KASSERT(devnull == i, ("oof, we didn't get our fd"));
 		} else {
 			error = do_dup(td, DUP_FIXED, devnull, i, &retval);
 			if (error != 0)


More information about the svn-src-all mailing list