svn commit: r357461 - head/sys/kern

Kyle Evans kevans at FreeBSD.org
Mon Feb 3 18:59:08 UTC 2020


Author: kevans
Date: Mon Feb  3 18:59:07 2020
New Revision: 357461
URL: https://svnweb.freebsd.org/changeset/base/357461

Log:
  namei: preserve errors from fget_cap_locked
  
  Most notably, we want to make sure we don't clobber any capabilities-related
  errors. This is a regression from r357412 (O_SEARCH) that was picked up by
  the capsicum tests.
  
  PR:		243839
  Reviewed by:	kib (committed form recommended by)
  Tested by:	lwhsu
  Differential Revision:	https://reviews.freebsd.org/D23479

Modified:
  head/sys/kern/vfs_lookup.c

Modified: head/sys/kern/vfs_lookup.c
==============================================================================
--- head/sys/kern/vfs_lookup.c	Mon Feb  3 18:23:50 2020	(r357460)
+++ head/sys/kern/vfs_lookup.c	Mon Feb  3 18:59:07 2020	(r357461)
@@ -452,8 +452,15 @@ namei(struct nameidata *ndp)
 			 */
 			error = fget_cap_locked(fdp, ndp->ni_dirfd, &rights,
 			    &dfp, &ndp->ni_filecaps);
-			if (error != 0 || dfp->f_ops == &badfileops ||
-			    dfp->f_vnode == NULL) {
+			if (error != 0) {
+				/*
+				 * Preserve the error; it should either be EBADF
+				 * or capability-related, both of which can be
+				 * safely returned to the caller.
+				 */
+			} else if (dfp->f_ops == &badfileops) {
+				error = EBADF;
+			} else if (dfp->f_vnode == NULL) {
 				error = ENOTDIR;
 			} else {
 				dp = dfp->f_vnode;


More information about the svn-src-all mailing list