git: 4179f1d9deed - main - fusefs: only search for FREAD fufh in readdir

From: Alan Somers <asomers_at_FreeBSD.org>
Date: Fri, 12 Jun 2026 23:50:45 UTC
The branch main has been updated by asomers:

URL: https://cgit.FreeBSD.org/src/commit/?id=4179f1d9deed83977f159c8afea204293ef4c7d7

commit 4179f1d9deed83977f159c8afea204293ef4c7d7
Author:     CismonX <admin@cismon.net>
AuthorDate: 2025-06-20 09:41:46 +0000
Commit:     Alan Somers <asomers@FreeBSD.org>
CommitDate: 2026-06-12 23:48:50 +0000

    fusefs: only search for FREAD fufh in readdir
    
    The extra search for an FEXEC fufh shall be removed, since readdir
    is only supposed to be called on a directory opened with FREAD.  The
    sole exception is NFS, which will call VOP_READDIR with directories that
    aren't open at all.  fuse already has special code to handle that.
    
    Also remove the fuse_filehandle_get_dir() function, since it's not
    used anywhere else.
    
    Signed-off-by:  CismonX <admin@cismon.net>
    Reviewed by:    asomers
    MFC after:      2 weeks
    Pull Request:   https://github.com/freebsd/freebsd-src/pull/1729
---
 sys/fs/fuse/fuse_vnops.c | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/sys/fs/fuse/fuse_vnops.c b/sys/fs/fuse/fuse_vnops.c
index d1badd0700f8..242e023a38dd 100644
--- a/sys/fs/fuse/fuse_vnops.c
+++ b/sys/fs/fuse/fuse_vnops.c
@@ -266,16 +266,6 @@ fuse_extattr_check_cred(struct vnode *vp, int ns, struct ucred *cred,
 	}
 }
 
-/* Get a filehandle for a directory */
-static int
-fuse_filehandle_get_dir(struct vnode *vp, struct fuse_filehandle **fufhp,
-	struct ucred *cred, pid_t pid)
-{
-	if (fuse_filehandle_get(vp, FREAD, fufhp, cred, pid) == 0)
-		return 0;
-	return fuse_filehandle_get(vp, FEXEC, fufhp, cred, pid);
-}
-
 /* Send FUSE_FLUSH for this vnode */
 static int
 fuse_flush(struct vnode *vp, struct ucred *cred, pid_t pid, int fflag)
@@ -2063,7 +2053,7 @@ fuse_vnop_readdir(struct vop_readdir_args *ap)
 		return (EXTERROR(EINVAL, "Buffer is too small"));
 
 	tresid = uio->uio_resid;
-	err = fuse_filehandle_get_dir(vp, &fufh, cred, pid);
+	err = fuse_filehandle_get(vp, FREAD, &fufh, cred, pid);
 	if (err == EBADF && mp->mnt_flag & MNT_EXPORTED) {
 		KASSERT(!fsess_is_impl(mp, FUSE_OPENDIR),
 			("FUSE file systems that implement "