Skip to contentSkip to conversation

crypto: octeontx2 - Unwind allocations when AEAD initialization fails

PATCH In review Wentao Liang 2 participants 2 messages Nov 3

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 crypto: octeontx2 - Unwind allocations when AEAD initialization fails

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")
Assisted-by DeepSeek-V4.1-Flash and OpenAI Codex
---
 .../crypto/marvell/octeontx2/otx2_cptvf_algs.c   | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)
drivers/crypto/marvell/octeontx2/otx2_cptvf_algs.c +13 -3
index 9eb5dc0a4da6..8d74e0274fdf 100644
@@ -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)
Signature · 1 line
2.34.1
#1 lore raw
Quoted 7 lines · Wentao Liang

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.

Quoted 8 lines

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")
Assisted-by DeepSeek-V4.1-Flash and OpenAI Codex

Another fake identity of "vulab" doing exactly the same as other cases, repeating same mistake of running unsupervised crappy bot even though was asked multiple times to fix that.

Best regards,
Krzysztof