crypto: padlock-sha - Make descsize an algorithm attribute
authorHerbert Xu <herbert@gondor.apana.org.au>
Sat, 12 Apr 2025 10:47:40 +0000 (18:47 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 16 Apr 2025 07:36:24 +0000 (15:36 +0800)
Rather than setting descsize in init_tfm, set it statically and
double-check it in init_tfm.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/padlock-sha.c

index db9e84c0c9fb2bdeff72fb32dd71488673bdcba9..466493907d48618663f818393a8900d53c4a5ca0 100644 (file)
@@ -206,8 +206,14 @@ static int padlock_init_tfm(struct crypto_shash *hash)
                return PTR_ERR(fallback_tfm);
        }
 
+       if (crypto_shash_descsize(hash) < sizeof(struct padlock_sha_desc) +
+                                         crypto_shash_descsize(fallback_tfm)) {
+               crypto_free_shash(fallback_tfm);
+               return -EINVAL;
+       }
+
        ctx->fallback = fallback_tfm;
-       hash->descsize += crypto_shash_descsize(fallback_tfm);
+
        return 0;
 }
 
@@ -228,7 +234,8 @@ static struct shash_alg sha1_alg = {
        .import         =       padlock_sha_import,
        .init_tfm       =       padlock_init_tfm,
        .exit_tfm       =       padlock_exit_tfm,
-       .descsize       =       sizeof(struct padlock_sha_desc),
+       .descsize       =       sizeof(struct padlock_sha_desc) +
+                               sizeof(struct sha1_state),
        .statesize      =       sizeof(struct sha1_state),
        .base           =       {
                .cra_name               =       "sha1",
@@ -251,7 +258,8 @@ static struct shash_alg sha256_alg = {
        .import         =       padlock_sha_import,
        .init_tfm       =       padlock_init_tfm,
        .exit_tfm       =       padlock_exit_tfm,
-       .descsize       =       sizeof(struct padlock_sha_desc),
+       .descsize       =       sizeof(struct padlock_sha_desc) +
+                               sizeof(struct sha256_state),
        .statesize      =       sizeof(struct sha256_state),
        .base           =       {
                .cra_name               =       "sha256",