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>