[PATCH] crypto: octeontx2 - Unwind allocations when AEAD initialization fails

From: Wentao Liang

Date: Tue Nov 03 2026 - 01:44:11 EST


cpt_aead_init() allocates a hash transform, descriptor and pads before
looking up a CPT device and initializing the hardware context. Failures
in those later steps return without freeing the earlier allocations.
If fallback allocation fails, the hardware context is also left mapped
and allocated. The algorithm exit callback does not run after a failed
initialization.

Release the hardware context when fallback initialization fails and free
the hash resources on all three failure paths.

Fixes: 6f03f0e8b6c8 ("crypto: octeontx2 - register with linux crypto framework")
Fixes: e92971117c2c ("crypto: octeontx2 - add ctx_val workaround")
Cc: stable@xxxxxxxxxxxxxxx
Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
Signed-off-by: Wentao Liang <vulab@xxxxxxxxxxx>
---
.../crypto/marvell/octeontx2/otx2_cptvf_algs.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c b/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c
index 9eb5dc0a4da6..8d74e0274fdf 100644
--- a/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c
+++ b/drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c
@@ -671,14 +671,24 @@ static int cpt_aead_init(struct crypto_aead *atfm, u8 cipher_type, u8 mac_type)

ret = get_se_device(&pdev, &cpu_num);
if (ret)
- return ret;
+ goto err_free_hash;

ctx->pdev = pdev;
ret = cn10k_cpt_hw_ctx_init(pdev, &ctx->er_ctx);
if (ret)
- return ret;
+ goto err_free_hash;

- return cpt_aead_fallback_init(ctx, alg);
+ ret = cpt_aead_fallback_init(ctx, alg);
+ if (!ret)
+ return 0;
+
+ cn10k_cpt_hw_ctx_clear(pdev, &ctx->er_ctx);
+err_free_hash:
+ kfree(ctx->opad);
+ kfree(ctx->ipad);
+ kfree(ctx->sdesc);
+ crypto_free_shash(ctx->hashalg);
+ return ret;
}

static int otx2_cpt_aead_cbc_aes_sha1_init(struct crypto_aead *tfm)
--
2.34.1