lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <06a7d9562b84354eb72bd67c9d4b7262dac53457.camel@kernel.org> Date: Mon, 24 Aug 2020 14:47:07 -0400 From: Jeff Layton <jlayton@...nel.org> To: Eric Biggers <ebiggers@...nel.org> Cc: linux-fscrypt@...r.kernel.org, linux-ext4@...r.kernel.org, linux-f2fs-devel@...ts.sourceforge.net, linux-mtd@...ts.infradead.org, ceph-devel@...r.kernel.org Subject: Re: [RFC PATCH 1/8] fscrypt: add fscrypt_prepare_new_inode() and fscrypt_set_context() On Mon, 2020-08-24 at 11:21 -0700, Eric Biggers wrote: > On Mon, Aug 24, 2020 at 12:48:48PM -0400, Jeff Layton wrote: > > > +void fscrypt_hash_inode_number(struct fscrypt_info *ci, > > > + const struct fscrypt_master_key *mk) > > > +{ > > > + WARN_ON(ci->ci_inode->i_ino == 0); > > > + WARN_ON(!mk->mk_ino_hash_key_initialized); > > > + > > > + ci->ci_hashed_ino = (u32)siphash_1u64(ci->ci_inode->i_ino, > > > + &mk->mk_ino_hash_key); > > > > i_ino is an unsigned long. Will this produce a consistent results on > > arches with 32 and 64 bit long values? I think it'd be nice to ensure > > that we can access an encrypted directory created on a 32-bit host from > > (e.g.) a 64-bit host. > > The result is the same regardless of word size and endianness. > siphash_1u64(v, k) is equivalent to: > > __le64 x = cpu_to_le64(v); > siphash(&x, 8, k); > In the case where you have an (on-storage) inode number that is larger than 2^32, x will almost certainly be different on a 32 vs. 64-bit wordsize. On the box with the 32-bit wordsize, you'll end up promoting i_ino to a 64-bit word and the upper 32 bits will be zeroed out. So it seems like this means that if you're using inline hardware you're going to end up with a result that won't work correctly across different wordsizes. Maybe that's ok, but it seems like something that could be handled by hashing a different value. > > It may be better to base this on something besides i_ino > > This code that hashes the inode number is only used when userspace used > FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32 for the directory. IV_INO_LBLK_32 modifies > the encryption to be optimized for eMMC inline encryption hardware. For more > details, see commit e3b1078bedd3 which added this feature. > > We actually could have hashed the file nonce instead of the inode number. But I > wanted to make the eMMC-optimized format similar to IV_INO_LBLK_64, which is the > format optimized for UFS inline encryption hardware. > > Both of these flags have very specific use cases; they make it feasible to use > inline encryption hardware > (https://www.kernel.org/doc/html/latest/block/inline-encryption.html) > that only supports a small number of keyslots and that limits the IV length. > > You don't need to worry about these flags at all for ceph, since there won't be > any use case to use them on ceph, and ceph won't be declaring support for them. Ahh, good to know. Thanks! -- Jeff Layton <jlayton@...nel.org>
Powered by blists - more mailing lists