From 5bc976ee0f81e85a83ccd9962058d723527bcf02 Mon Sep 17 00:00:00 2001 From: John Safranek Date: Wed, 26 Dec 2012 09:49:53 -0800 Subject: [PATCH] free ecc keys at the end of handshaking --- src/internal.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/internal.c b/src/internal.c index b5b76e16d..bb8062b58 100644 --- a/src/internal.c +++ b/src/internal.c @@ -1312,10 +1312,14 @@ void SSL_ResourceFree(CYASSL* ssl) FreeStreams(ssl); #endif #ifdef HAVE_ECC - ecc_free(&ssl->peerEccKey); - ecc_free(&ssl->peerEccDsaKey); - ecc_free(&ssl->eccTempKey); - ecc_free(&ssl->eccDsaKey); + if (ssl->peerEccKeyPresent) + ecc_free(&ssl->peerEccKey); + if (ssl->peerEccDsaKeyPresent) + ecc_free(&ssl->peerEccDsaKey); + if (ssl->eccTempKeyPresent) + ecc_free(&ssl->eccTempKey); + if (ssl->eccDsaKeyPresent) + ecc_free(&ssl->eccDsaKey); #endif } @@ -1358,6 +1362,25 @@ void FreeHandshakeResources(CYASSL* ssl) ssl->peerRsaKey = NULL; } #endif + +#ifdef HAVE_ECC + if (ssl->peerEccKeyPresent) { + ecc_free(&ssl->peerEccKey); + ssl->peerEccKeyPresent = 0; + } + if (ssl->peerEccDsaKeyPresent) { + ecc_free(&ssl->peerEccDsaKey); + ssl->peerEccDsaKeyPresent = 0; + } + if (ssl->eccTempKeyPresent) { + ecc_free(&ssl->eccTempKey); + ssl->eccTempKeyPresent = 0; + } + if (ssl->eccDsaKeyPresent) { + ecc_free(&ssl->eccDsaKey); + ssl->eccDsaKeyPresent = 0; + } +#endif }