From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Cliff Cai Date: Tue, 15 Jan 2019 04:47:54 +0000 Subject: [PATCH] keystore: fix memory leaks Fix several memory leaks in the driver. Change-Id: Ic3b0b0d4a05e9e51b4acfa198ae77abf11c91bea Tracked-On: PKT-1674 Signed-off-by: Cliff Cai --- security/keystore/api_dal.c | 2 ++ security/keystore/applet_read.c | 4 +++- security/keystore/dal_client.c | 5 ++++- security/keystore/mac.c | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/security/keystore/api_dal.c b/security/keystore/api_dal.c index d97dd469d404..5db0a7ea7e10 100644 --- a/security/keystore/api_dal.c +++ b/security/keystore/api_dal.c @@ -803,6 +803,7 @@ int dal_keystore_encrypt(const uint8_t *client_ticket, int slot_id, if (res) { ks_err(KBUILD_MODNAME ": %s Error calculating client ID: %d\n", __func__, res); + kzfree(in); goto exit; } @@ -955,6 +956,7 @@ int dal_keystore_decrypt(const uint8_t *client_ticket, int slot_id, if (res) { ks_err(KBUILD_MODNAME ": %s Error calculating client ID: %d\n", __func__, res); + kzfree(in); goto exit; } diff --git a/security/keystore/applet_read.c b/security/keystore/applet_read.c index 92d2a4bed416..c9640644b583 100644 --- a/security/keystore/applet_read.c +++ b/security/keystore/applet_read.c @@ -67,8 +67,10 @@ static int read_applet_file(struct file *file, u8 **out) return -ENOMEM; temp = kzalloc(i_size, GFP_KERNEL); - if (!temp) + if (!temp) { + kzfree(file_buf); return -ENOMEM; + } if (!(file->f_mode & FMODE_READ)) { file->f_mode |= FMODE_READ; diff --git a/security/keystore/dal_client.c b/security/keystore/dal_client.c index 92307502d198..b4324949bf65 100644 --- a/security/keystore/dal_client.c +++ b/security/keystore/dal_client.c @@ -16,6 +16,7 @@ #include #include +#include #include "dal_client.h" #include "keystore_debug.h" @@ -56,8 +57,10 @@ int install_applet(void) dal_hdr.state = DAL_KSM_INIT; ret = read_keystore_applet(CONFIG_DAL_KEYSTORE_APPLET_PATH, &acp_pkg, &acp_pkg_len); - if (ret != 0) + if (ret != 0) { + kzfree(&acp_pkg); return ret; + } if (acp_pkg == NULL) { ks_err(KBUILD_MODNAME ": %s acp_pkg is NULL\n", __func__); diff --git a/security/keystore/mac.c b/security/keystore/mac.c index 4f13df6b93d4..fe6477a9f86e 100644 --- a/security/keystore/mac.c +++ b/security/keystore/mac.c @@ -138,6 +138,7 @@ int keystore_sha256_block(const void *data, unsigned int size, if (result_size < crypto_shash_digestsize(tfm)) { crypto_free_shash(tfm); + kzfree(sdesc); return -EINVAL; } -- https://clearlinux.org