Re: [PATCH] ovl: restrict casefold consistency checks to directories

From: Amir Goldstein

Date: Thu Oct 29 2026 - 07:03:56 EST


On Wed, Oct 28, 2026 at 4:40 PM Hungyu Lin <dennylin0707@xxxxxxxxx> wrote:
>
> ovl_lookup_single() compares every positive child's casefold flag with
> that of the overlay. On casefolded ext4, regular files do not inherit
> the casefold flag from their parent directory. Looking up an existing
> regular file on a casefolded overlay therefore fails with EREMOTE.
> Symlinks, FIFOs and whiteouts are rejected by the same check.
>
> Restrict the child consistency check to directories, along with the
> corresponding assertion in ovl_get_inode(). This allows nondirectory
> objects to be looked up without rejecting them or warning about their
> flags, while directories with inconsistent casefold settings are still
> rejected.
>
> Fixes: 16754d61dc69 ("ovl: Support mounting case-insensitive enabled layers")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Hungyu Lin <dennylin0707@xxxxxxxxx>
> ---
> fs/overlayfs/inode.c | 2 +-
> fs/overlayfs/namei.c | 2 +-
> 2 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
> index 63906b3dafcb..4428c50c3185 100644
> --- a/fs/overlayfs/inode.c
> +++ b/fs/overlayfs/inode.c
> @@ -1278,7 +1278,7 @@ struct inode *ovl_get_inode(struct super_block *sb,
> }
> ovl_fill_inode(inode, realinode->i_mode, realinode->i_rdev);
> ovl_inode_init(inode, oip, ino, fsid);
> - WARN_ON_ONCE(!!IS_CASEFOLDED(inode) != ofs->casefold);
> + WARN_ON_ONCE(is_dir && !!IS_CASEFOLDED(inode) != ofs->casefold);
>
> if (upperdentry && ovl_is_impuredir(sb, upperdentry))
> ovl_set_flag(OVL_IMPURE, inode);
> diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c
> index ca899fdfaafd..023966d89f74 100644
> --- a/fs/overlayfs/namei.c
> +++ b/fs/overlayfs/namei.c
> @@ -266,7 +266,7 @@ static int ovl_lookup_single(struct dentry *base, struct ovl_lookup_data *d,
> goto out_err;
> }
>
> - if (ofs->casefold != ovl_dentry_casefolded(this)) {
> + if (d_is_dir(this) && ofs->casefold != ovl_dentry_casefolded(this)) {
> warn = "child wrong casefold";
> err = -EREMOTE;
> goto out_warn;
> --
> 2.43.0
>

Applied to ovl-fixes.

Hungyu,

Thank you for the overlayfs patches.

I see that you are sending patches to several subsystem, so I assume that you
do not have any specific interest in overlayfs casefold issues particularly?

I am asking because I got some patches for overlayfs casefold which I do not
prioritize because I do not know how widely the feature is really in use.

If you are interested in reviewing or testing said patches, let me know
and I will send them to you.

Thanks,
Amir.