aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAkhil R <akhilrajeev@nvidia.com>2025-02-24 14:46:10 +0530
committerHerbert Xu <herbert@gondor.apana.org.au>2025-03-08 16:23:22 +0800
commitf80a2e2e77bedd0aa645a60f89b4f581c70accda (patch)
treed8ea64c10796ed087344cfae5b41c0a17be546e3
parentb157e7a228aee9b48c2de05129476b822aa7956d (diff)
downloadtip-f80a2e2e77bedd0aa645a60f89b4f581c70accda.tar.gz
crypto: tegra - Use HMAC fallback when keyslots are full
The intermediate results for HMAC is stored in the allocated keyslot by the hardware. Dynamic allocation of keyslot during an operation is hence not possible. As the number of keyslots are limited in the hardware, fallback to the HMAC software implementation if keyslots are not available Fixes: 0880bb3b00c8 ("crypto: tegra - Add Tegra Security Engine driver") Signed-off-by: Akhil R <akhilrajeev@nvidia.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--drivers/crypto/tegra/tegra-se-hash.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/crypto/tegra/tegra-se-hash.c b/drivers/crypto/tegra/tegra-se-hash.c
index 8bed13552ab9e7..65a50f29bd7e6d 100644
--- a/drivers/crypto/tegra/tegra-se-hash.c
+++ b/drivers/crypto/tegra/tegra-se-hash.c
@@ -632,13 +632,18 @@ static int tegra_hmac_setkey(struct crypto_ahash *tfm, const u8 *key,
unsigned int keylen)
{
struct tegra_sha_ctx *ctx = crypto_ahash_ctx(tfm);
+ int ret;
if (aes_check_keylen(keylen))
return tegra_hmac_fallback_setkey(ctx, key, keylen);
+ ret = tegra_key_submit(ctx->se, key, keylen, ctx->alg, &ctx->key_id);
+ if (ret)
+ return tegra_hmac_fallback_setkey(ctx, key, keylen);
+
ctx->fallback = false;
- return tegra_key_submit(ctx->se, key, keylen, ctx->alg, &ctx->key_id);
+ return 0;
}
static int tegra_sha_init(struct ahash_request *req)