aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Rosenberg <drosen@google.com>2019-11-19 20:21:33 -0800
committerJaegeuk Kim <jaegeuk@kernel.org>2020-03-09 14:17:41 -0700
commit7f3767ee8dc5297faab48e131af380300c8c14c6 (patch)
treee0ae2e2826c8ccab05ac6b1e2221b79d3e73c96b
parent64750e90d63792ab457d7000b71aac62d6b9f6dd (diff)
downloadf2fs-tools-7f3767ee8dc5297faab48e131af380300c8c14c6.tar.gz
f2fs-tools: Casefolded Encryption support
This adds support for casefolded and encrypted directories. Fsck cannot check the hashes of such directories because it would require access to the encryption key to generate the siphash Signed-off-by: Daniel Rosenberg <drosen@google.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r--fsck/fsck.c4
-rw-r--r--fsck/mount.c6
-rw-r--r--mkfs/f2fs_format.c4
3 files changed, 4 insertions, 10 deletions
diff --git a/fsck/fsck.c b/fsck/fsck.c
index 4d8aff0..4d437e7 100644
--- a/fsck/fsck.c
+++ b/fsck/fsck.c
@@ -1303,6 +1303,10 @@ static int f2fs_check_hash_code(int encoding, int casefolded,
struct f2fs_dir_entry *dentry,
const unsigned char *name, u32 len, int enc_name)
{
+ /* Casefolded Encrypted names require a key to compute siphash */
+ if (enc_name && casefolded)
+ return 0;
+
f2fs_hash_t hash_code = f2fs_dentry_hash(encoding, casefolded, name, len);
/* fix hash_code made by old buggy code */
if (dentry->hash_code != hash_code) {
diff --git a/fsck/mount.c b/fsck/mount.c
index e4ba048..325fbaa 100644
--- a/fsck/mount.c
+++ b/fsck/mount.c
@@ -3052,12 +3052,6 @@ static int tune_sb_features(struct f2fs_sb_info *sbi)
int sb_changed = 0;
struct f2fs_super_block *sb = F2FS_RAW_SUPER(sbi);
- if (c.feature & cpu_to_le32(F2FS_FEATURE_ENCRYPT) &&
- c.feature & cpu_to_le32(F2FS_FEATURE_CASEFOLD)) {
- ERR_MSG("ERROR: Cannot set both encrypt and casefold. Skipping.\n");
- return -1;
- }
-
if (!(sb->feature & cpu_to_le32(F2FS_FEATURE_ENCRYPT)) &&
c.feature & cpu_to_le32(F2FS_FEATURE_ENCRYPT)) {
sb->feature |= cpu_to_le32(F2FS_FEATURE_ENCRYPT);
diff --git a/mkfs/f2fs_format.c b/mkfs/f2fs_format.c
index 0e9e7a9..44575e0 100644
--- a/mkfs/f2fs_format.c
+++ b/mkfs/f2fs_format.c
@@ -517,10 +517,6 @@ static int f2fs_prepare_super_block(void)
memcpy(sb->init_version, c.version, VERSION_LEN);
if (c.feature & cpu_to_le32(F2FS_FEATURE_CASEFOLD)) {
- if (c.feature & cpu_to_le32(F2FS_FEATURE_ENCRYPT)) {
- MSG(0, "\tError: Casefolding and encryption are not compatible\n");
- return -1;
- }
set_sb(s_encoding, c.s_encoding);
set_sb(s_encoding_flags, c.s_encoding_flags);
}