From: Gabriel Krisman Bertazi <krisman@suse.de>
To: "André Almeida" <andrealmeid@igalia.com>
Cc: Hugh Dickins <hughd@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
krisman@kernel.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
kernel-dev@igalia.com, Daniel Rosenberg <drosen@google.com>,
smcv@collabora.com, Christoph Hellwig <hch@lst.de>,
Gabriel Krisman Bertazi <gabriel@krisman.be>
Subject: Re: [PATCH v2 2/8] unicode: Create utf8_check_strict_name
Date: Tue, 03 Sep 2024 11:34:34 -0400 [thread overview]
Message-ID: <87y148hhth.fsf@mailhost.krisman.be> (raw)
In-Reply-To: <20240902225511.757831-3-andrealmeid@igalia.com> ("André Almeida"'s message of "Mon, 2 Sep 2024 19:55:04 -0300")
André Almeida <andrealmeid@igalia.com> writes:
> Create a helper function for filesystems do the checks required for
> casefold directories and strict enconding.
>
> Suggested-by: Gabriel Krisman Bertazi <gabriel@krisman.be>
> Signed-off-by: André Almeida <andrealmeid@igalia.com>
> ---
> fs/unicode/utf8-core.c | 26 ++++++++++++++++++++++++++
> include/linux/unicode.h | 2 ++
> 2 files changed, 28 insertions(+)
>
> diff --git a/fs/unicode/utf8-core.c b/fs/unicode/utf8-core.c
> index 0400824ef493..4966e175ed71 100644
> --- a/fs/unicode/utf8-core.c
> +++ b/fs/unicode/utf8-core.c
I don't think this belongs in fs/unicode. it is filesystem semantics whether
they don't allow invalid utf8 names and, while fs/unicode provides
utf8_validate to verify if a string is valid, it has no business looking
into superblock and inode flags.
It would be better placed as a libfs helper.
> @@ -214,3 +214,29 @@ void utf8_unload(struct unicode_map *um)
> }
> EXPORT_SYMBOL(utf8_unload);
>
> +/**
> + * utf8_check_strict_name - Check if a given name is suitable for a directory
To follow the namespace in libfs, we could call it
generic_ci_validate_strict_name
> + *
> + * This functions checks if the proposed filename is suitable for the parent
suitable => valid
> + * directory. That means that only valid UTF-8 filenames will be accepted for
> + * casefold directories from filesystems created with the strict enconding flags.
enconding flags => encoding flag
> + * That also means that any name will be accepted for directories that doesn't
> + * have casefold enabled, or aren't being strict with the enconding.
encoding
> + *
> + * @inode: inode of the directory where the new file will be created
> + * @d_name: name of the new file
d_name means 'dentry name'. just 'name' is enough here since it doesn't
matter if the qstr is coming from the dentry.
> + *
> + * Returns:
> + * * True if the filename is suitable for this directory. It can be true if a
> + * given name is not suitable for a strict enconding directory, but the
> + * directory being used isn't strict
> + * * False if the filename isn't suitable for this directory. This only happens
> + * when a directory is casefolded and is strict about its encoding.
> + */
> +bool utf8_check_strict_name(struct inode *dir, struct qstr *d_name)
> +{
> + return !(IS_CASEFOLDED(dir) && dir->i_sb->s_encoding &&
> + sb_has_strict_encoding(dir->i_sb) &&
> + utf8_validate(dir->i_sb->s_encoding, d_name));
> +}
Now that it is a helper, it could now be unfolded to something more
readable:
if (!IS_CASEFOLDED(dir) || !sb_has_strict_encoding(dir->i_sb)))
return true;
/* Should never happen. Unless the filesystem is corrupt. */
if (WARN_ON_ONCE(!dir->i_sb->s_encoding))
return true;
return utf8_validate(...)
> +EXPORT_SYMBOL(utf8_check_strict_name);
> diff --git a/include/linux/unicode.h b/include/linux/unicode.h
> index 4d39e6e11a95..fb56fb5e686c 100644
> --- a/include/linux/unicode.h
> +++ b/include/linux/unicode.h
> @@ -76,4 +76,6 @@ int utf8_casefold_hash(const struct unicode_map *um, const void *salt,
> struct unicode_map *utf8_load(unsigned int version);
> void utf8_unload(struct unicode_map *um);
>
> +bool utf8_check_strict_name(struct inode *dir, struct qstr *d_name);
> +
> #endif /* _LINUX_UNICODE_H */
--
Gabriel Krisman Bertazi
next prev parent reply other threads:[~2024-09-03 15:34 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-02 22:55 [PATCH v2 0/8] tmpfs: Add case-insesitive support for tmpfs André Almeida
2024-09-02 22:55 ` [PATCH v2 1/8] unicode: Fix utf8_load() error path André Almeida
2024-09-03 11:40 ` Theodore Ts'o
2024-09-03 16:48 ` Gabriel Krisman Bertazi
2024-09-02 22:55 ` [PATCH v2 2/8] unicode: Create utf8_check_strict_name André Almeida
2024-09-03 9:04 ` kernel test robot
2024-09-03 11:36 ` Theodore Ts'o
2024-09-03 15:34 ` Gabriel Krisman Bertazi [this message]
2024-09-02 22:55 ` [PATCH v2 3/8] ext4: Use utf8_check_strict_name helper André Almeida
2024-09-03 11:37 ` Theodore Ts'o
2024-09-02 22:55 ` [PATCH v2 4/8] unicode: Recreate utf8_parse_version() André Almeida
2024-09-03 11:41 ` Theodore Ts'o
2024-09-02 22:55 ` [PATCH v2 5/8] tmpfs: Add casefold lookup support André Almeida
2024-09-03 16:08 ` Gabriel Krisman Bertazi
2024-09-02 22:55 ` [PATCH v2 6/8] tmpfs: Add flag FS_CASEFOLD_FL support for tmpfs dirs André Almeida
2024-09-03 9:04 ` kernel test robot
2024-09-03 9:04 ` kernel test robot
2024-09-03 16:15 ` Gabriel Krisman Bertazi
2024-09-04 22:28 ` André Almeida
2024-09-02 22:55 ` [PATCH v2 7/8] tmpfs: Expose filesystem features via sysfs André Almeida
2024-09-02 22:55 ` [PATCH v2 8/8] docs: tmpfs: Add casefold options André Almeida
2024-09-03 16:38 ` Gabriel Krisman Bertazi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87y148hhth.fsf@mailhost.krisman.be \
--to=krisman@suse.de \
--cc=akpm@linux-foundation.org \
--cc=andrealmeid@igalia.com \
--cc=brauner@kernel.org \
--cc=drosen@google.com \
--cc=gabriel@krisman.be \
--cc=hch@lst.de \
--cc=hughd@google.com \
--cc=jack@suse.cz \
--cc=kernel-dev@igalia.com \
--cc=krisman@kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=smcv@collabora.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.