[PATCH] ecryptfs: streamline offset formatting in ecryptfs_derive_iv
Thorsten Blum <[email protected]> Sun, 29 Mar 2026 23:23:25 +0200
| Newsgroups | org.kernel.vger.ecryptfs,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Use the number of characters written by scnprintf() to zero-pad the remaining bytes, instead of clearing the buffer first and then writing the offset. Fix a typo in the kernel-doc and remove the TODO from 2006 while at it. Signed-off-by: Thorsten Blum <[email protected]> --- fs/ecryptfs/crypto.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/fs/ecryptfs/crypto.c b/fs/ecryptfs/crypto.c index 3b59346d68c5..7fac3ec1a8cd 100644 --- a/fs/ecryptfs/crypto.c +++ b/fs/ecryptfs/crypto.c @@ -72,7 +72,7 @@ static int ecryptfs_crypto_api_algify_cipher_name(char **algified_name, /** * ecryptfs_derive_iv - * @iv: destination for the derived iv vale + * @iv: destination for the derived iv value * @crypt_stat: Pointer to crypt_stat struct for the current inode * @offset: Offset of the extent whose IV we are to derive * @@ -84,18 +84,15 @@ void ecryptfs_derive_iv(char *iv, struct ecryptfs_crypt_stat *crypt_stat, { char dst[MD5_DIGEST_SIZE]; char src[ECRYPTFS_MAX_IV_BYTES + 16]; + size_t len; if (unlikely(ecryptfs_verbosity > 0)) { ecryptfs_printk(KERN_DEBUG, "root iv:\n"); ecryptfs_dump_hex(crypt_stat->root_iv, crypt_stat->iv_bytes); } - /* TODO: It is probably secure to just cast the least - * significant bits of the root IV into an unsigned long and - * add the offset to that rather than go through all this - * hashing business. -Halcrow */ memcpy(src, crypt_stat->root_iv, crypt_stat->iv_bytes); - memset((src + crypt_stat->iv_bytes), 0, 16); - snprintf((src + crypt_stat->iv_bytes), 16, "%lld", offset); + len = scnprintf(src + crypt_stat->iv_bytes, 16, "%lld", offset) + 1; + memset(src + crypt_stat->iv_bytes + len, 0, 16 - len); if (unlikely(ecryptfs_verbosity > 0)) { ecryptfs_printk(KERN_DEBUG, "source:\n"); ecryptfs_dump_hex(src, (crypt_stat->iv_bytes + 16));