lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20260116162837.GX15551@frogsfrogsfrogs>
Date: Fri, 16 Jan 2026 08:28:37 -0800
From: "Darrick J. Wong" <djwong@...nel.org>
To: Chuck Lever <cel@...nel.org>
Cc: Al Viro <viro@...iv.linux.org.uk>,
	Christian Brauner <brauner@...nel.org>, Jan Kara <jack@...e.cz>,
	linux-fsdevel@...r.kernel.org, linux-ext4@...r.kernel.org,
	linux-xfs@...r.kernel.org, linux-cifs@...r.kernel.org,
	linux-nfs@...r.kernel.org, linux-f2fs-devel@...ts.sourceforge.net,
	hirofumi@...l.parknet.co.jp, linkinjeon@...nel.org,
	sj1557.seo@...sung.com, yuezhang.mo@...y.com,
	almaz.alexandrovich@...agon-software.com, slava@...eyko.com,
	glaubitz@...sik.fu-berlin.de, frank.li@...o.com, tytso@....edu,
	adilger.kernel@...ger.ca, cem@...nel.org, sfrench@...ba.org,
	pc@...guebit.org, ronniesahlberg@...il.com, sprasad@...rosoft.com,
	trondmy@...nel.org, anna@...nel.org, jaegeuk@...nel.org,
	chao@...nel.org, hansg@...nel.org, senozhatsky@...omium.org,
	Chuck Lever <chuck.lever@...cle.com>
Subject: Re: [PATCH v5 01/16] fs: Add case sensitivity info to file_kattr

On Fri, Jan 16, 2026 at 09:46:00AM -0500, Chuck Lever wrote:
> From: Chuck Lever <chuck.lever@...cle.com>
> 
> Enable upper layers such as NFSD to retrieve case sensitivity
> information from file systems by adding case_insensitive and
> case_nonpreserving boolean fields to struct file_kattr.
> 
> The case_insensitive and case_nonpreserving fields in struct
> file_kattr default to false (POSIX semantics: case-sensitive and
> case-preserving), allowing filesystems to set them only when
> behavior differs from the default.
> 
> Case sensitivity information is exported to userspace via the
> existing fa_xflags field using the new FS_XFLAG_CASEFOLD and
> FS_XFLAG_CASENONPRESERVING flags.
> 
> Signed-off-by: Chuck Lever <chuck.lever@...cle.com>
> ---
>  fs/file_attr.c           | 6 ++++++
>  include/linux/fileattr.h | 6 +++++-
>  include/uapi/linux/fs.h  | 2 ++
>  3 files changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/file_attr.c b/fs/file_attr.c
> index 13cdb31a3e94..2f83f3c6a170 100644
> --- a/fs/file_attr.c
> +++ b/fs/file_attr.c
> @@ -84,6 +84,8 @@ int vfs_fileattr_get(struct dentry *dentry, struct file_kattr *fa)
>  	struct inode *inode = d_inode(dentry);
>  	int error;
>  
> +	memset(fa, 0, sizeof(*fa));

Hrm.  If you're going to memset the file_kattr here, then you might as
well remove the memset calls from fileattr_fill_*.  It's not great
that filesystems have to know that a "fill_xflags" function assigns to
more than just xflags.

> +
>  	if (!inode->i_op->fileattr_get)
>  		return -ENOIOCTLCMD;
>  
> @@ -106,6 +108,10 @@ static void fileattr_to_file_attr(const struct file_kattr *fa,
>  	fattr->fa_nextents = fa->fsx_nextents;
>  	fattr->fa_projid = fa->fsx_projid;
>  	fattr->fa_cowextsize = fa->fsx_cowextsize;
> +	if (fa->case_insensitive)
> +		fattr->fa_xflags |= FS_XFLAG_CASEFOLD;
> +	if (fa->case_nonpreserving)
> +		fattr->fa_xflags |= FS_XFLAG_CASENONPRESERVING;
>  }
>  
>  /**
> diff --git a/include/linux/fileattr.h b/include/linux/fileattr.h
> index f89dcfad3f8f..7f2e557255ce 100644
> --- a/include/linux/fileattr.h
> +++ b/include/linux/fileattr.h
> @@ -16,7 +16,8 @@
>  
>  /* Read-only inode flags */
>  #define FS_XFLAG_RDONLY_MASK \
> -	(FS_XFLAG_PREALLOC | FS_XFLAG_HASATTR)
> +	(FS_XFLAG_PREALLOC | FS_XFLAG_HASATTR | \
> +	 FS_XFLAG_CASEFOLD | FS_XFLAG_CASENONPRESERVING)
>  
>  /* Flags to indicate valid value of fsx_ fields */
>  #define FS_XFLAG_VALUES_MASK \
> @@ -51,6 +52,9 @@ struct file_kattr {
>  	/* selectors: */
>  	bool	flags_valid:1;
>  	bool	fsx_valid:1;
> +	/* case sensitivity behavior: */
> +	bool	case_insensitive:1;
> +	bool	case_nonpreserving:1;

Er... if you're encoding fs name handling qualities through FS_XFLAG_*,
then filesystems can set them in fsx_xflags directly.  No need for
separate bitfields here.

--D

>  };
>  
>  int copy_fsxattr_to_user(const struct file_kattr *fa, struct fsxattr __user *ufa);
> diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h
> index 66ca526cf786..919148beaa8c 100644
> --- a/include/uapi/linux/fs.h
> +++ b/include/uapi/linux/fs.h
> @@ -253,6 +253,8 @@ struct file_attr {
>  #define FS_XFLAG_FILESTREAM	0x00004000	/* use filestream allocator */
>  #define FS_XFLAG_DAX		0x00008000	/* use DAX for IO */
>  #define FS_XFLAG_COWEXTSIZE	0x00010000	/* CoW extent size allocator hint */
> +#define FS_XFLAG_CASEFOLD	0x00020000	/* case-insensitive lookups */
> +#define FS_XFLAG_CASENONPRESERVING 0x00040000	/* case not preserved */
>  #define FS_XFLAG_HASATTR	0x80000000	/* no DIFLAG for this	*/
>  
>  /* the read-only stuff doesn't really belong here, but any other place is
> -- 
> 2.52.0
> 
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ