crypto: zynqmp-sha - Make descsize an algorithm attribute
authorHerbert Xu <herbert@gondor.apana.org.au>
Sat, 12 Apr 2025 10:47:42 +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/xilinx/zynqmp-sha.c

index 580649f9bff81f475a040f43d162cfdea0c469fe..f66e0a4c1169dbee7dddbca832339512ba3baff1 100644 (file)
@@ -60,8 +60,14 @@ static int zynqmp_sha_init_tfm(struct crypto_shash *hash)
        if (IS_ERR(fallback_tfm))
                return PTR_ERR(fallback_tfm);
 
+       if (crypto_shash_descsize(hash) <
+           sizeof(struct zynqmp_sha_desc_ctx) +
+           crypto_shash_descsize(tfm_ctx->fbk_tfm)) {
+               crypto_free_shash(fallback_tfm);
+               return -EINVAL;
+       }
+
        tfm_ctx->fbk_tfm = fallback_tfm;
-       hash->descsize += crypto_shash_descsize(tfm_ctx->fbk_tfm);
 
        return 0;
 }
@@ -170,7 +176,8 @@ static struct zynqmp_sha_drv_ctx sha3_drv_ctx = {
                .import = zynqmp_sha_import,
                .init_tfm = zynqmp_sha_init_tfm,
                .exit_tfm = zynqmp_sha_exit_tfm,
-               .descsize = sizeof(struct zynqmp_sha_desc_ctx),
+               .descsize = sizeof(struct zynqmp_sha_desc_ctx) +
+                           sizeof(struct sha3_state),
                .statesize = sizeof(struct sha3_state),
                .digestsize = SHA3_384_DIGEST_SIZE,
                .base = {