git: d22903d79b48 - stable/14 - namei: Fix cn_flags width in various places

From: Mark Johnston <markj_at_FreeBSD.org>
Date: Fri, 20 Jun 2025 13:52:22 UTC
The branch stable/14 has been updated by markj:

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

commit d22903d79b48b119388ebe5fd8c246da2237155b
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2025-05-27 13:29:14 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2025-06-20 12:46:09 +0000

    namei: Fix cn_flags width in various places
    
    This truncation is mostly harmless today, but fix it anyway to avoid
    pain later down the road.
    
    Reviewed by:    olce, kib
    MFC after:      2 weeks
    Differential Revision:  https://reviews.freebsd.org/D50417
    
    (cherry picked from commit 0d224af399a66f00a5b33e5512fc018062cabf1d)
---
 sys/fs/cd9660/cd9660_lookup.c | 2 +-
 sys/fs/fuse/fuse_vnops.c      | 9 ++++-----
 sys/fs/smbfs/smbfs_vnops.c    | 2 +-
 sys/fs/unionfs/union_vnops.c  | 2 +-
 sys/kern/uipc_mqueue.c        | 3 ++-
 sys/kern/vfs_cache.c          | 2 +-
 6 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/sys/fs/cd9660/cd9660_lookup.c b/sys/fs/cd9660/cd9660_lookup.c
index 02e9c6bb5aa6..ec177036acb1 100644
--- a/sys/fs/cd9660/cd9660_lookup.c
+++ b/sys/fs/cd9660/cd9660_lookup.c
@@ -129,7 +129,7 @@ cd9660_lookup(struct vop_cachedlookup_args *ap)
 	char *name;
 	struct vnode **vpp = ap->a_vpp;
 	struct componentname *cnp = ap->a_cnp;
-	int flags = cnp->cn_flags;
+	uint64_t flags = cnp->cn_flags;
 	int nameiop = cnp->cn_nameiop;
 
 	ep2 = ep = NULL;
diff --git a/sys/fs/fuse/fuse_vnops.c b/sys/fs/fuse/fuse_vnops.c
index 87e44051d9a9..423ce05a595f 100644
--- a/sys/fs/fuse/fuse_vnops.c
+++ b/sys/fs/fuse/fuse_vnops.c
@@ -1432,8 +1432,8 @@ fuse_vnop_lookup(struct vop_lookup_args *ap)
 	struct timespec now;
 
 	int nameiop = cnp->cn_nameiop;
-	int flags = cnp->cn_flags;
-	int islastcn = flags & ISLASTCN;
+	bool isdotdot = cnp->cn_flags & ISDOTDOT;
+	bool islastcn = cnp->cn_flags & ISLASTCN;
 	struct mount *mp = vnode_mount(dvp);
 	struct fuse_data *data = fuse_get_mpdata(mp);
 	int default_permissions = data->dataflags & FSESS_DEFAULT_PERMISSIONS;
@@ -1466,8 +1466,7 @@ fuse_vnop_lookup(struct vop_lookup_args *ap)
 		return err;
 
 	is_dot = cnp->cn_namelen == 1 && *(cnp->cn_nameptr) == '.';
-	if ((flags & ISDOTDOT) && !(data->dataflags & FSESS_EXPORT_SUPPORT))
-	{
+	if (isdotdot && !(data->dataflags & FSESS_EXPORT_SUPPORT)) {
 		if (!(VTOFUD(dvp)->flag & FN_PARENT_NID)) {
 			/*
 			 * Since the file system doesn't support ".." lookups,
@@ -1581,7 +1580,7 @@ fuse_vnop_lookup(struct vop_lookup_args *ap)
 		}
 	} else {
 		/* Entry was found */
-		if (flags & ISDOTDOT) {
+		if (isdotdot) {
 			struct fuse_lookup_alloc_arg flaa;
 
 			flaa.nid = nid;
diff --git a/sys/fs/smbfs/smbfs_vnops.c b/sys/fs/smbfs/smbfs_vnops.c
index 1e7dcafb1121..c30995508c00 100644
--- a/sys/fs/smbfs/smbfs_vnops.c
+++ b/sys/fs/smbfs/smbfs_vnops.c
@@ -1051,7 +1051,7 @@ smbfs_lookup(struct vop_lookup_args *ap)
 	struct smbfattr fattr, *fap;
 	struct smb_cred *scred;
 	char *name = cnp->cn_nameptr;
-	int flags = cnp->cn_flags;
+	uint64_t flags = cnp->cn_flags;
 	int nameiop = cnp->cn_nameiop;
 	int nmlen = cnp->cn_namelen;
 	int error, islastcn, isdot;
diff --git a/sys/fs/unionfs/union_vnops.c b/sys/fs/unionfs/union_vnops.c
index eff437fbcad3..7618e2575819 100644
--- a/sys/fs/unionfs/union_vnops.c
+++ b/sys/fs/unionfs/union_vnops.c
@@ -86,8 +86,8 @@ unionfs_lookup(struct vop_cachedlookup_args *ap)
 	struct vattr	va;
 	struct componentname *cnp;
 	struct thread  *td;
+	uint64_t	cnflags, cnflagsbk;
 	u_long		nameiop;
-	u_long		cnflags, cnflagsbk;
 	int		iswhiteout;
 	int		lockflag;
 	int		error , uerror, lerror;
diff --git a/sys/kern/uipc_mqueue.c b/sys/kern/uipc_mqueue.c
index 75daf94b9849..7f539ac94cf6 100644
--- a/sys/kern/uipc_mqueue.c
+++ b/sys/kern/uipc_mqueue.c
@@ -847,7 +847,8 @@ mqfs_lookupx(struct vop_cachedlookup_args *ap)
 	struct mqfs_node *pd;
 	struct mqfs_node *pn;
 	struct mqfs_info *mqfs;
-	int nameiop, flags, error, namelen;
+	uint64_t flags;
+	int nameiop, error, namelen;
 	char *pname;
 	struct thread *td;
 
diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c
index a61a684e396e..e25efe2986b2 100644
--- a/sys/kern/vfs_cache.c
+++ b/sys/kern/vfs_cache.c
@@ -4087,7 +4087,7 @@ SYSCTL_PROC(_vfs_cache_param, OID_AUTO, fast_lookup, CTLTYPE_INT|CTLFLAG_RW|CTLF
  */
 struct nameidata_outer {
 	size_t ni_pathlen;
-	int cn_flags;
+	uint64_t cn_flags;
 };
 
 struct nameidata_saved {