]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
crypto: jitter - fix intermediary handling
authorMarkus Theil <theil.markus@gmail.com>
Sat, 21 Jun 2025 11:36:43 +0000 (13:36 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 28 Aug 2025 14:28:26 +0000 (16:28 +0200)
[ Upstream commit 735b72568c73875269a6b73ab9543a70f6ac8a9f ]

The intermediary value was included in the wrong
hash state. While there, adapt to user-space by
setting the timestamp to 0 if stuck and inserting
the values nevertheless.

Acked-by: Stephan Mueller <smueller@chronox.de>
Signed-off-by: Markus Theil <theil.markus@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>
crypto/jitterentropy-kcapi.c

index 7d1463a1562acbe7493b51c71e07d040eeb2301b..dd05faf00571f396bea695113f35dd4da90454eb 100644 (file)
@@ -134,7 +134,7 @@ int jent_hash_time(void *hash_state, __u64 time, u8 *addtl,
         * Inject the data from the previous loop into the pool. This data is
         * not considered to contain any entropy, but it stirs the pool a bit.
         */
-       ret = crypto_shash_update(desc, intermediary, sizeof(intermediary));
+       ret = crypto_shash_update(hash_state_desc, intermediary, sizeof(intermediary));
        if (ret)
                goto err;
 
@@ -147,11 +147,12 @@ int jent_hash_time(void *hash_state, __u64 time, u8 *addtl,
         * conditioning operation to have an identical amount of input data
         * according to section 3.1.5.
         */
-       if (!stuck) {
-               ret = crypto_shash_update(hash_state_desc, (u8 *)&time,
-                                         sizeof(__u64));
+       if (stuck) {
+               time = 0;
        }
 
+       ret = crypto_shash_update(hash_state_desc, (u8 *)&time, sizeof(__u64));
+
 err:
        shash_desc_zero(desc);
        memzero_explicit(intermediary, sizeof(intermediary));