Eric Biggers 6bde47f4e8 f2fs: don't use casefolded comparison for "." and ".."
commit b5639bb4313b9d455fc9fc4768d23a5e4ca8cb9d upstream.

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@vger.kernel.org> # v5.11+
Signed-off-by: Eric Biggers <ebiggers@google.com>
Reviewed-by: Gabriel Krisman Bertazi <krisman@collabora.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2022-06-09 10:23:17 +02:00
..
2022-02-08 18:34:04 +01:00
2021-08-19 09:02:55 +09:00
2022-06-09 10:22:43 +02:00
2021-08-26 22:28:02 +02:00
2022-06-09 10:22:55 +02:00
2021-12-29 12:28:59 +01:00
2021-09-03 15:33:47 -07:00
2021-08-16 10:50:32 -06:00
2022-05-15 20:18:52 +02:00
2021-08-19 09:02:55 +09:00
2021-11-25 09:48:46 +01:00
2022-06-09 10:23:09 +02:00
2021-09-09 13:25:49 -07:00
2021-11-25 09:49:08 +01:00
2021-08-18 22:08:24 +02:00
2021-12-14 10:57:15 +01:00
2021-08-10 17:57:22 +02:00