Date: Thu, 19 Aug 2021 11:22:58 GMT From: Konstantin Belousov <kib@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: 2c5f0480c211 - stable/13 - fstatat(2): handle non-vnode file descriptors for AT_EMPTY_PATH Message-ID: <202108191122.17JBMwu7037072@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=2c5f0480c211ef1373a0e01aa4ce1b64d8e2e10e commit 2c5f0480c211ef1373a0e01aa4ce1b64d8e2e10e Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2021-08-13 17:40:10 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2021-08-19 11:21:57 +0000 fstatat(2): handle non-vnode file descriptors for AT_EMPTY_PATH (cherry picked from commit 9446d9e88fd7b203fa50c015f29b636db5b1d52b) --- sys/kern/vfs_lookup.c | 2 +- sys/kern/vfs_syscalls.c | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/sys/kern/vfs_lookup.c b/sys/kern/vfs_lookup.c index e0b98c9f5661..a827c87538b8 100644 --- a/sys/kern/vfs_lookup.c +++ b/sys/kern/vfs_lookup.c @@ -489,6 +489,7 @@ namei_emptypath(struct nameidata *ndp) MPASS((cnp->cn_flags & EMPTYPATH) != 0); MPASS((cnp->cn_flags & (LOCKPARENT | WANTPARENT)) == 0); + ndp->ni_resflags |= NIRES_EMPTYPATH; error = namei_setup(ndp, &dp, &pwd); if (error != 0) { namei_cleanup_cnp(cnp); @@ -501,7 +502,6 @@ namei_emptypath(struct nameidata *ndp) ndp->ni_vp = dp; namei_cleanup_cnp(cnp); pwd_drop(pwd); - ndp->ni_resflags |= NIRES_EMPTYPATH; NDVALIDATE(ndp); if ((cnp->cn_flags & LOCKLEAF) != 0) { VOP_LOCK(dp, (cnp->cn_flags & LOCKSHARED) != 0 ? diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c index 855943adecef..8fae55c2862d 100644 --- a/sys/kern/vfs_syscalls.c +++ b/sys/kern/vfs_syscalls.c @@ -2426,8 +2426,12 @@ kern_statat(struct thread *td, int flag, int fd, const char *path, AT_SYMLINK_NOFOLLOW | AT_EMPTY_PATH) | LOCKSHARED | LOCKLEAF | AUDITVNODE1, pathseg, path, fd, &cap_fstat_rights, td); - if ((error = namei(&nd)) != 0) + if ((error = namei(&nd)) != 0) { + if (error == ENOTDIR && + (nd.ni_resflags & NIRES_EMPTYPATH) != 0) + error = kern_fstat(td, fd, sbp); return (error); + } error = VOP_STAT(nd.ni_vp, sbp, td->td_ucred, NOCRED, td); if (error == 0) { if (__predict_false(hook != NULL))
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202108191122.17JBMwu7037072>