From 3317916111c2fe05d18ff02fdde0f33cffa5d3e5 Mon Sep 17 00:00:00 2001
From: Matt Johnston <matt@ucc.asn.au>
Date: Sun, 1 Mar 2015 22:44:36 +0800
Subject: [PATCH] Fix some memory leaks in ecc code

---
 ecc.c     | 5 -----
 ecdsa.c   | 2 +-
 signkey.c | 5 +++++
 3 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/ecc.c b/ecc.c
index c733c9ed..e252884d 100644
--- a/ecc.c
+++ b/ecc.c
@@ -86,11 +86,6 @@ static int ecc_is_point(ecc_key *key)
 {
 	mp_int *prime, *b, *t1, *t2;
 	int err;
-
-	prime = m_malloc(sizeof(mp_int));
-	b = m_malloc(sizeof(mp_int));
-	t1 = m_malloc(sizeof(mp_int));
-	t2 = m_malloc(sizeof(mp_int));
 	
 	m_mp_alloc_init_multi(&prime, &b, &t1, &t2, NULL);
 	
diff --git a/ecdsa.c b/ecdsa.c
index 03960149..4fee796d 100644
--- a/ecdsa.c
+++ b/ecdsa.c
@@ -409,7 +409,7 @@ int buf_ecdsa_verify(buffer *buf, ecc_key *key, buffer *data_buf) {
 out:
 	ltc_ecc_del_point(mG);
 	ltc_ecc_del_point(mQ);
-	mp_clear_multi(r, s, v, w, u1, u2, p, e, m, NULL);
+	ltc_deinit_multi(r, s, v, w, u1, u2, p, e, m, NULL);
 	if (mp != NULL) { 
 		ltc_mp.montgomery_deinit(mp);
 	}
diff --git a/signkey.c b/signkey.c
index f033e865..10a63f2e 100644
--- a/signkey.c
+++ b/signkey.c
@@ -187,6 +187,7 @@ int buf_get_pub_key(buffer *buf, sign_key *key, enum signkey_type *type) {
 		if (eck) {
 			if (*eck) {
 				ecc_free(*eck);
+				m_free(*eck);
 				*eck = NULL;
 			}
 			*eck = buf_get_ecdsa_pub_key(buf);
@@ -255,6 +256,7 @@ int buf_get_priv_key(buffer *buf, sign_key *key, enum signkey_type *type) {
 		if (eck) {
 			if (*eck) {
 				ecc_free(*eck);
+				m_free(*eck);
 				*eck = NULL;
 			}
 			*eck = buf_get_ecdsa_priv_key(buf);
@@ -355,18 +357,21 @@ void sign_key_free(sign_key *key) {
 #ifdef DROPBEAR_ECC_256
 	if (key->ecckey256) {
 		ecc_free(key->ecckey256);
+		m_free(key->ecckey256);
 		key->ecckey256 = NULL;
 	}
 #endif
 #ifdef DROPBEAR_ECC_384
 	if (key->ecckey384) {
 		ecc_free(key->ecckey384);
+		m_free(key->ecckey384);
 		key->ecckey384 = NULL;
 	}
 #endif
 #ifdef DROPBEAR_ECC_521
 	if (key->ecckey521) {
 		ecc_free(key->ecckey521);
+		m_free(key->ecckey521);
 		key->ecckey521 = NULL;
 	}
 #endif
-- 
GitLab