From: Eric Biggers <ebiggers@kernel.org> To: Daniel Rosenberg <drosen@google.com> Cc: kernel-team@android.com, Theodore Ts'o <tytso@mit.edu>, Jonathan Corbet <corbet@lwn.net>, Richard Weinberger <richard@nod.at>, Andreas Dilger <adilger.kernel@dilger.ca>, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, linux-fscrypt@vger.kernel.org, linux-mtd@lists.infradead.org, Alexander Viro <viro@zeniv.linux.org.uk>, linux-fsdevel@vger.kernel.org, Jaegeuk Kim <jaegeuk@kernel.org>, linux-ext4@vger.kernel.org, Gabriel Krisman Bertazi <krisman@collabora.com> Subject: Re: [f2fs-dev] [PATCH v7 6/8] f2fs: Handle casefolding with Encryption Date: Tue, 11 Feb 2020 21:47:20 -0800 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 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
next prev parent reply index Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-08 1:35 [f2fs-dev] [PATCH v7 0/8] Support fof Casefolding and Encryption Daniel Rosenberg via Linux-f2fs-devel 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 1/8] unicode: Add utf8_casefold_iter Daniel Rosenberg via Linux-f2fs-devel 2020-02-12 3:38 ` Eric Biggers 2020-02-14 21:47 ` Daniel Rosenberg via Linux-f2fs-devel 2020-02-17 19:02 ` Gabriel Krisman Bertazi 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 2/8] fs: Add standard casefolding support Daniel Rosenberg via Linux-f2fs-devel 2020-02-08 2:12 ` Al Viro 2020-02-10 23:11 ` Daniel Rosenberg via Linux-f2fs-devel 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 via Linux-f2fs-devel 2020-02-12 3:55 ` Eric Biggers 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 3/8] f2fs: Use generic " Daniel Rosenberg via Linux-f2fs-devel 2020-02-12 4:05 ` Eric Biggers 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 4/8] ext4: " Daniel Rosenberg via Linux-f2fs-devel 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 5/8] fscrypt: Have filesystems handle their d_ops Daniel Rosenberg via Linux-f2fs-devel 2020-02-12 4:33 ` Eric Biggers 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 6/8] f2fs: Handle casefolding with Encryption Daniel Rosenberg via Linux-f2fs-devel 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 ` [f2fs-dev] [PATCH v7 7/8] ext4: Hande casefolding with encryption Daniel Rosenberg via Linux-f2fs-devel 2020-02-12 5:59 ` Eric Biggers 2020-02-08 1:35 ` [f2fs-dev] [PATCH v7 8/8] ext4: Optimize match for casefolded encrypted dirs Daniel Rosenberg via Linux-f2fs-devel 2020-02-12 6:12 ` [f2fs-dev] [PATCH v7 0/8] Support fof Casefolding and Encryption Eric Biggers 2020-02-13 0:01 ` Daniel Rosenberg via Linux-f2fs-devel
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=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
Linux-f2fs-devel Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linux-f2fs-devel/0 linux-f2fs-devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linux-f2fs-devel linux-f2fs-devel/ https://lore.kernel.org/linux-f2fs-devel \ linux-f2fs-devel@lists.sourceforge.net public-inbox-index linux-f2fs-devel Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/net.sourceforge.lists.linux-f2fs-devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git