aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2023-05-02 15:11:39 +0000
committerDmitry Chagin <dchagin@FreeBSD.org>2023-06-29 08:15:50 +0000
commit4d1134a54c85ae8926eb43b7e51aee6e65b71816 (patch)
tree27495bfd809b466c67fd18475c0aeb28886dd1e5
parent5e424fec72aafe1154ae23cd0674193e757a4d2a (diff)
downloadsrc-4d1134a54c85ae8926eb43b7e51aee6e65b71816.tar.gz
src-4d1134a54c85ae8926eb43b7e51aee6e65b71816.zip
fstatat(2): restore AT_EMPTY_PATH handling
Fixes: cb858340dcbf214cc4c4d78dbb741620d7b3a252 Reported by: markj Sponsored by: The FreeBSD Foundation (cherry picked from commit a1d71cebc05ccfeedf95f2db3e94b17270167888)
-rw-r--r--sys/kern/vfs_syscalls.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 89f45e898d8e..7f7836450811 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -2432,8 +2432,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);
NDFREE_NOTHING(&nd);
vput(nd.ni_vp);