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;
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to