In ecdh_X9_63_kdf_derive(), the second ecdh_plain_derive() is checked with if (!ret) which only catches ret == 0, so a UADK_DO_SOFT (-224) return falls through to ecdh_kdf_X9_63() with unfilled stmp as KDF key. Fix by changing to if (ret != UADK_P_SUCCESS) to redirect to the free_stmp cleanup path and trigger software fallback. Signed-off-by: Weili Qian <qianweili@huawei.com> --- src/uadk_prov_ecdh_exch.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/uadk_prov_ecdh_exch.c b/src/uadk_prov_ecdh_exch.c index 01473a8..1b3b123 100644 --- a/src/uadk_prov_ecdh_exch.c +++ b/src/uadk_prov_ecdh_exch.c @@ -454,7 +454,7 @@ static int ecdh_X9_63_kdf_derive(struct ecdh_ctx *pecdhctx, unsigned char *secre } ret = ecdh_plain_derive(pecdhctx, stmp, &stmplen, stmplen); - if (!ret) + if (ret != UADK_P_SUCCESS) goto free_stmp; ret = ecdh_kdf_X9_63(secret, pecdhctx, stmp, stmplen); -- 2.43.0