]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
crypto: ahash - Set default reqsize from ahash_alg
authorHerbert Xu <herbert@gondor.apana.org.au>
Sun, 16 Feb 2025 03:07:24 +0000 (11:07 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 May 2025 09:13:10 +0000 (11:13 +0200)
[ Upstream commit 9e01aaa1033d6e40f8d7cf4f20931a61ce9e3f04 ]

Add a reqsize field to struct ahash_alg and use it to set the
default reqsize so that algorithms with a static reqsize are
not forced to create an init_tfm function.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <sashal@kernel.org>
crypto/ahash.c
include/crypto/hash.h

index b08b89ec26ec5167cbf092932e3705c4970bae82..63960465eea175b8c2ffd79c6ae3d97adb7979b7 100644 (file)
@@ -489,6 +489,7 @@ static int crypto_ahash_init_tfm(struct crypto_tfm *tfm)
        struct ahash_alg *alg = crypto_ahash_alg(hash);
 
        crypto_ahash_set_statesize(hash, alg->halg.statesize);
+       crypto_ahash_set_reqsize(hash, alg->reqsize);
 
        if (tfm->__crt_alg->cra_type == &crypto_shash_type)
                return crypto_init_ahash_using_shash(tfm);
@@ -654,6 +655,9 @@ static int ahash_prepare_alg(struct ahash_alg *alg)
        if (alg->halg.statesize == 0)
                return -EINVAL;
 
+       if (alg->reqsize && alg->reqsize < alg->halg.statesize)
+               return -EINVAL;
+
        err = hash_prepare_alg(&alg->halg);
        if (err)
                return err;
index 2d5ea9f9ff43ebd9c25e6bda766ff18076c29b05..6692253f0b5be53874fbfd82dd6a60215bb95e21 100644 (file)
@@ -132,6 +132,7 @@ struct ahash_request {
  *           This is a counterpart to @init_tfm, used to remove
  *           various changes set in @init_tfm.
  * @clone_tfm: Copy transform into new object, may allocate memory.
+ * @reqsize: Size of the request context.
  * @halg: see struct hash_alg_common
  */
 struct ahash_alg {
@@ -148,6 +149,8 @@ struct ahash_alg {
        void (*exit_tfm)(struct crypto_ahash *tfm);
        int (*clone_tfm)(struct crypto_ahash *dst, struct crypto_ahash *src);
 
+       unsigned int reqsize;
+
        struct hash_alg_common halg;
 };