From dabea5cc4c837b34939db520e101722f26440da8 Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Tue, 4 Jun 2019 09:41:55 +0200 Subject: [PATCH] - fixed memory handling problems when using TLS --- hal/tls/mbedtls/tls_mbedtls.c | 26 +++++++++++++------------- src/mms/iso_server/iso_connection.c | 11 +++++++---- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/hal/tls/mbedtls/tls_mbedtls.c b/hal/tls/mbedtls/tls_mbedtls.c index 2319d647..95ee8299 100644 --- a/hal/tls/mbedtls/tls_mbedtls.c +++ b/hal/tls/mbedtls/tls_mbedtls.c @@ -474,23 +474,23 @@ TLSSocket_write(TLSSocket self, uint8_t* buf, int size) void TLSSocket_close(TLSSocket self) { - int ret; - - //TODO add timeout? + if (self) { + int ret; - while ((ret = mbedtls_ssl_close_notify(&(self->ssl))) < 0) - { - if ((ret != MBEDTLS_ERR_SSL_WANT_READ) && (ret != MBEDTLS_ERR_SSL_WANT_WRITE)) + while ((ret = mbedtls_ssl_close_notify(&(self->ssl))) < 0) { - DEBUG_PRINT("TLS", "mbedtls_ssl_close_notify returned %d\n", ret); - break; + if ((ret != MBEDTLS_ERR_SSL_WANT_READ) && (ret != MBEDTLS_ERR_SSL_WANT_WRITE)) + { + DEBUG_PRINT("TLS", "mbedtls_ssl_close_notify returned %d\n", ret); + break; + } } - } - Thread_sleep(10); + Thread_sleep(10); - mbedtls_ssl_config_free(&(self->conf)); - mbedtls_ssl_free(&(self->ssl)); + mbedtls_ssl_config_free(&(self->conf)); + mbedtls_ssl_free(&(self->ssl)); - GLOBAL_FREEMEM(self); + GLOBAL_FREEMEM(self); + } } diff --git a/src/mms/iso_server/iso_connection.c b/src/mms/iso_server/iso_connection.c index a0184837..798387e9 100644 --- a/src/mms/iso_server/iso_connection.c +++ b/src/mms/iso_server/iso_connection.c @@ -92,15 +92,16 @@ struct sIsoConnection static void IsoConnection_releaseAllocatedMemory(IsoConnection self) { - if (self->socket) - Socket_destroy(self->socket); - #if (CONFIG_MMS_SUPPORT_TLS == 1) if (IsoServer_getTLSConfiguration(self->isoServer) != NULL) { TLSSocket_close(self->tlsSocket); + self->tlsSocket = NULL; } #endif /* (CONFIG_MMS_SUPPORT_TLS == 1) */ + if (self->socket) + Socket_destroy(self->socket); + GLOBAL_FREEMEM(self->session); GLOBAL_FREEMEM(self->presentation); AcseConnection_destroy(self->acseConnection); @@ -662,8 +663,10 @@ IsoConnection_close(IsoConnection self) self->socket = NULL; #if (CONFIG_MMS_SUPPORT_TLS == 1) - if (self->tlsSocket) + if (self->tlsSocket) { TLSSocket_close(self->tlsSocket); + self->tlsSocket = NULL; + } #endif Socket_destroy(socket);