libwd/0082-uadk-v1-fix-wd-create-ctx-memory-leak.patch
Wenkai Lin d2ed8a299c libwd backport for uadk from 2.3.29 to 2.3.31
Update some patch for uadk from mainline.
To get more infomation, please visit the homepage:
https://github.com/Linaro/uadk

Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
2022-03-22 11:52:29 +08:00

117 lines
3.0 KiB
Diff

From 5f9d701e8a56f4b7a0ff9c1b0c24fd130427cf1f Mon Sep 17 00:00:00 2001
From: Wenkai Lin <linwenkai6@hisilicon.com>
Date: Thu, 10 Mar 2022 20:03:13 +0800
Subject: [PATCH 090/109] uadk: v1: fix wd create ctx memory leak
ctx's block memory should be freed if wd fail to create ctx.
Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
---
v1/wd_aead.c | 12 ++++++++----
v1/wd_cipher.c | 5 ++++-
v1/wd_dh.c | 4 +++-
v1/wd_digest.c | 6 +++++-
4 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/v1/wd_aead.c b/v1/wd_aead.c
index 6d8c541..ec537b3 100644
--- a/v1/wd_aead.c
+++ b/v1/wd_aead.c
@@ -229,14 +229,13 @@ void *wcrypto_create_aead_ctx(struct wd_queue *q,
ctx->ckey = setup->br.alloc(setup->br.usr, MAX_CIPHER_KEY_SIZE);
if (!ctx->ckey) {
WD_ERR("fail to alloc cipher ctx key!\n");
- free(ctx);
- goto free_ctx_id;
+ goto free_ctx;
}
ctx->akey = setup->br.alloc(setup->br.usr, MAX_AEAD_KEY_SIZE);
if (!ctx->akey) {
WD_ERR("fail to alloc authenticate ctx key!\n");
setup->br.free(setup->br.usr, ctx->ckey);
- goto free_ctx;
+ goto free_ctx_ckey;
}
ctx->iv_blk_size = get_iv_block_size(setup->cmode);
@@ -244,11 +243,16 @@ void *wcrypto_create_aead_ctx(struct wd_queue *q,
sizeof(struct wcrypto_aead_cookie), WD_CTX_MSG_NUM);
if (ret) {
WD_ERR("fail to init cookie pool!\n");
- goto free_ctx;
+ goto free_ctx_akey;
}
init_aead_cookie(ctx, setup);
return ctx;
+
+free_ctx_akey:
+ setup->br.free(setup->br.usr, ctx->akey);
+free_ctx_ckey:
+ setup->br.free(setup->br.usr, ctx->ckey);
free_ctx:
free(ctx);
free_ctx_id:
diff --git a/v1/wd_cipher.c b/v1/wd_cipher.c
index 8bf71be..921c464 100644
--- a/v1/wd_cipher.c
+++ b/v1/wd_cipher.c
@@ -217,11 +217,14 @@ void *wcrypto_create_cipher_ctx(struct wd_queue *q,
sizeof(struct wcrypto_cipher_cookie), WD_CTX_MSG_NUM);
if (ret) {
WD_ERR("fail to init cookie pool!\n");
- goto free_ctx;
+ goto free_ctx_key;
}
init_cipher_cookie(ctx, setup);
return ctx;
+
+free_ctx_key:
+ setup->br.free(setup->br.usr, ctx->key);
free_ctx:
free(ctx);
free_ctx_id:
diff --git a/v1/wd_dh.c b/v1/wd_dh.c
index f83dd91..66f1081 100644
--- a/v1/wd_dh.c
+++ b/v1/wd_dh.c
@@ -174,10 +174,12 @@ void *wcrypto_create_dh_ctx(struct wd_queue *q, struct wcrypto_dh_ctx_setup *set
ret = wcrypto_init_dh_cookie(ctx);
if (ret)
- goto free_ctx;
+ goto free_ctx_gdata;
return ctx;
+free_ctx_gdata:
+ setup->br.free(setup->br.usr, ctx->g.data);
free_ctx:
free(ctx);
free_ctx_id:
diff --git a/v1/wd_digest.c b/v1/wd_digest.c
index 2179415..c84e71d 100644
--- a/v1/wd_digest.c
+++ b/v1/wd_digest.c
@@ -199,11 +199,15 @@ void *wcrypto_create_digest_ctx(struct wd_queue *q,
sizeof(struct wcrypto_digest_cookie), WD_CTX_MSG_NUM);
if (ret) {
WD_ERR("fail to init cookie pool!\n");
- goto free_ctx;
+ goto free_ctx_key;
}
init_digest_cookie(ctx, setup);
return ctx;
+
+free_ctx_key:
+ if (setup->mode == WCRYPTO_DIGEST_HMAC)
+ setup->br.free(setup->br.usr, ctx->key);
free_ctx:
free(ctx);
free_ctx_id:
--
2.27.0