aboutsummaryrefslogtreecommitdiff
path: root/tools/cert_create/include/key.h
diff options
context:
space:
mode:
authorMasahiro Yamada <yamada.masahiro@socionext.com>2017-02-06 21:15:01 +0900
committerMasahiro Yamada <yamada.masahiro@socionext.com>2017-02-11 12:59:16 +0900
commit762f1ebe8d1b26e78cd4923f832a611c8a5f0a89 (patch)
tree06997d3046017bdf623e8dddea71fcaa408b0cd9 /tools/cert_create/include/key.h
parentbab16f9912c6a2ea7600e8d713c1eebf8f0c11d7 (diff)
downloadtrusted-firmware-a-762f1ebe8d1b26e78cd4923f832a611c8a5f0a89.tar.gz
cert_create: fix memory leak bug caused by key container overwrite
In the current code, both key_load() and key_create() call key_new() to allocate a key container (and they do not free it even if they fail). If a specific key is not given by the command option, key_load() fails, then key_create() is called. At this point, the key container that has been allocated in key_load() is still alive, and it is overwritten by a new key container created by key_create(). Move the key_new() call to the main() function to make sure it is called just once for each descriptor. While we are here, let's fix one more bug; the error handling code ERROR("Malloc error while loading '%s'\n", keys[i].fn); is wrong because keys[i].fn is NULL pointer unless a specific key is given by the command option. This code could be run in either case. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Diffstat (limited to 'tools/cert_create/include/key.h')
-rw-r--r--tools/cert_create/include/key.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/tools/cert_create/include/key.h b/tools/cert_create/include/key.h
index f60997f0f..433f72cef 100644
--- a/tools/cert_create/include/key.h
+++ b/tools/cert_create/include/key.h
@@ -73,6 +73,7 @@ typedef struct key_s {
/* Exported API */
int key_init(void);
key_t *key_get_by_opt(const char *opt);
+int key_new(key_t *key);
int key_create(key_t *key, int type);
int key_load(key_t *key, unsigned int *err_code);
int key_store(key_t *key);