From: Eric Biggers <ebiggers@kernel.org>
To: Daniel Rosenberg <drosen@google.com>
Cc: Theodore Ts'o <tytso@mit.edu>,
linux-ext4@vger.kernel.org, Jaegeuk Kim <jaegeuk@kernel.org>,
Chao Yu <chao@kernel.org>,
linux-f2fs-devel@lists.sourceforge.net,
linux-fscrypt@vger.kernel.org,
Alexander Viro <viro@zeniv.linux.org.uk>,
Richard Weinberger <richard@nod.at>,
linux-mtd@lists.infradead.org,
Andreas Dilger <adilger.kernel@dilger.ca>,
Jonathan Corbet <corbet@lwn.net>,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org,
Gabriel Krisman Bertazi <krisman@collabora.com>,
kernel-team@android.com
Subject: Re: [PATCH v7 6/8] f2fs: Handle casefolding with Encryption
Date: Tue, 11 Feb 2020 21:47:20 -0800 [thread overview]
Message-ID: <20200212054720.GH870@sol.localdomain> (raw)
In-Reply-To: <20200208013552.241832-7-drosen@google.com>
On Fri, Feb 07, 2020 at 05:35:50PM -0800, Daniel Rosenberg wrote:
> @@ -173,24 +193,24 @@ static inline bool f2fs_match_name(struct f2fs_dentry_ptr *d,
> {
> #ifdef CONFIG_UNICODE
> struct inode *parent = d->inode;
> - struct super_block *sb = parent->i_sb;
> - struct qstr entry;
> + unsigned char *name;
> + int len;
> #endif
>
> if (de->hash_code != namehash)
> return false;
>
> #ifdef CONFIG_UNICODE
> - entry.name = d->filename[bit_pos];
> - entry.len = de->name_len;
> + name = d->filename[bit_pos];
> + len = de->name_len;
This is missing le16_to_cpu().
> int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
> const struct qstr *orig_name,
> + f2fs_hash_t dentry_hash,
> struct inode *inode, nid_t ino, umode_t mode)
> {
> unsigned int bit_pos;
> unsigned int level;
> unsigned int current_depth;
> unsigned long bidx, block;
> - f2fs_hash_t dentry_hash;
> unsigned int nbucket, nblock;
> struct page *dentry_page = NULL;
> struct f2fs_dentry_block *dentry_blk = NULL;
> @@ -632,7 +652,6 @@ int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
>
> level = 0;
> slots = GET_DENTRY_SLOTS(new_name->len);
> - dentry_hash = f2fs_dentry_hash(dir, new_name, NULL);
Why was the call to f2fs_dentry_hash() moved to the caller, but for
f2fs_add_inline_entry() a different approach was taken?
> @@ -718,17 +737,19 @@ int f2fs_add_dentry(struct inode *dir, struct fscrypt_name *fname,
> struct inode *inode, nid_t ino, umode_t mode)
> {
> struct qstr new_name;
> + f2fs_hash_t dentry_hash;
> int err = -EAGAIN;
>
> new_name.name = fname_name(fname);
> new_name.len = fname_len(fname);
>
> if (f2fs_has_inline_dentry(dir))
> - err = f2fs_add_inline_entry(dir, &new_name, fname->usr_fname,
> + err = f2fs_add_inline_entry(dir, &new_name, fname,
> inode, ino, mode);
I'm really confused. Why are you passing around both new_name and fname?
We already have new_name == fname.disk_name. So isn't just the
'struct fscrypt_name' sufficient?
> +static f2fs_hash_t __f2fs_dentry_hash(const struct inode *dir,
> + const struct qstr *name_info,
> + const struct fscrypt_name *fname)
> {
> __u32 hash;
> f2fs_hash_t f2fs_hash;
> @@ -85,6 +86,11 @@ static f2fs_hash_t __f2fs_dentry_hash(const struct qstr *name_info,
> if (is_dot_dotdot(name_info))
> return 0;
>
> + if (IS_CASEFOLDED(dir) && IS_ENCRYPTED(dir)) {
> + f2fs_hash = fscrypt_fname_siphash(dir, name_info);
> + return f2fs_hash;
> + }
This is missing cpu_to_le32().
Also, above we have:
/* encrypted bigname case */
if (fname && !fname->disk_name.name)
return cpu_to_le32(fname->hash);
That won't work with encrypted+casefolded directories without the key, because
now sometimes the hash from the no-key name is needed even when the disk_name is
available. This will cause a crash in fscrypt_fname_siphash() being called
without the key. I think you want:
if (fname && fname->is_ciphertext_name)
return cpu_to_le32(fname->hash);
Can you please write xfstests for encrypt+casefold?
- Eric
next prev parent reply other threads:[~2020-02-12 5:47 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-08 1:35 [PATCH v7 0/8] Support fof Casefolding and Encryption Daniel Rosenberg
2020-02-08 1:35 ` [PATCH v7 1/8] unicode: Add utf8_casefold_iter Daniel Rosenberg
2020-02-12 3:38 ` Eric Biggers
2020-02-14 21:47 ` Daniel Rosenberg
2020-02-17 19:02 ` Gabriel Krisman Bertazi
2020-02-08 1:35 ` [PATCH v7 2/8] fs: Add standard casefolding support Daniel Rosenberg
2020-02-08 2:12 ` Al Viro
2020-02-10 23:11 ` Daniel Rosenberg
2020-02-10 23:42 ` Al Viro
2020-02-12 6:34 ` Eric Biggers
2020-02-12 6:57 ` Eric Biggers
2020-02-20 2:27 ` Daniel Rosenberg
2020-02-12 3:55 ` Eric Biggers
2020-02-08 1:35 ` [PATCH v7 3/8] f2fs: Use generic " Daniel Rosenberg
2020-02-12 4:05 ` Eric Biggers
2020-02-08 1:35 ` [PATCH v7 4/8] ext4: " Daniel Rosenberg
2020-02-08 1:35 ` [PATCH v7 5/8] fscrypt: Have filesystems handle their d_ops Daniel Rosenberg
2020-02-12 4:33 ` Eric Biggers
2020-02-08 1:35 ` [PATCH v7 6/8] f2fs: Handle casefolding with Encryption Daniel Rosenberg
2020-02-12 5:10 ` Eric Biggers
2020-02-12 5:55 ` Al Viro
2020-02-12 6:06 ` Eric Biggers
2020-02-12 5:47 ` Eric Biggers [this message]
2020-02-08 1:35 ` [PATCH v7 7/8] ext4: Hande casefolding with encryption Daniel Rosenberg
2020-02-12 5:59 ` Eric Biggers
2020-02-08 1:35 ` [PATCH v7 8/8] ext4: Optimize match for casefolded encrypted dirs Daniel Rosenberg
2020-02-12 6:12 ` [PATCH v7 0/8] Support fof Casefolding and Encryption Eric Biggers
2020-02-13 0:01 ` Daniel Rosenberg
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=20200212054720.GH870@sol.localdomain \
--to=ebiggers@kernel.org \
--cc=adilger.kernel@dilger.ca \
--cc=chao@kernel.org \
--cc=corbet@lwn.net \
--cc=drosen@google.com \
--cc=jaegeuk@kernel.org \
--cc=kernel-team@android.com \
--cc=krisman@collabora.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-fscrypt@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=richard@nod.at \
--cc=tytso@mit.edu \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).