Eric Biggers <ebiggers@xxxxxxxxxx> writes: > From: Eric Biggers <ebiggers@xxxxxxxxxx> > > Tryng to rename a directory that has all following properties fails with > EINVAL and triggers the 'WARN_ON_ONCE(!fscrypt_has_encryption_key(dir))' > in f2fs_match_ci_name(): > > - The directory is casefolded > - The directory is encrypted > - The directory's encryption key is not yet set up > - The parent directory is *not* encrypted > > The problem is incorrect handling of the lookup of ".." to get the > parent reference to update. fscrypt_setup_filename() treats ".." (and > ".") specially, as it's never encrypted. It's passed through as-is, and > setting up the directory's key is not attempted. As the name isn't a > no-key name, f2fs treats it as a "normal" name and attempts a casefolded > comparison. That breaks the assumption of the WARN_ON_ONCE() in > f2fs_match_ci_name() which assumes that for encrypted directories, > casefolded comparisons only happen when the directory's key is set up. > > We could just remove this WARN_ON_ONCE(). However, since casefolding is > always a no-op on "." and ".." anyway, let's instead just not casefold > these names. This results in the standard bytewise comparison. > > Fixes: 7ad08a58bf67 ("f2fs: Handle casefolding with Encryption") > Cc: <stable@xxxxxxxxxxxxxxx> # v5.11+ > Signed-off-by: Eric Biggers <ebiggers@xxxxxxxxxx> > --- > fs/f2fs/dir.c | 3 ++- > fs/f2fs/f2fs.h | 10 +++++----- > fs/f2fs/hash.c | 11 ++++++----- > 3 files changed, 13 insertions(+), 11 deletions(-) Hi Eric, This looks good to me: Reviewed-by: Gabriel Krisman Bertazi <krisman@xxxxxxxxxxxxx> Thanks, -- Gabriel Krisman Bertazi