Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Feb 2020 18:59:07 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r357461 - head/sys/kern
Message-ID:  <202002031859.013Ix7HB042805@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202002031859.013Ix7HB042805>