- fixed memory handling problems when using TLS

pull/162/head
Michael Zillgith 6 years ago
parent 9b7a2f086e
commit dabea5cc4c

@ -474,23 +474,23 @@ TLSSocket_write(TLSSocket self, uint8_t* buf, int size)
void void
TLSSocket_close(TLSSocket self) TLSSocket_close(TLSSocket self)
{ {
int ret; if (self) {
int ret;
//TODO add timeout?
while ((ret = mbedtls_ssl_close_notify(&(self->ssl))) < 0) while ((ret = mbedtls_ssl_close_notify(&(self->ssl))) < 0)
{
if ((ret != MBEDTLS_ERR_SSL_WANT_READ) && (ret != MBEDTLS_ERR_SSL_WANT_WRITE))
{ {
DEBUG_PRINT("TLS", "mbedtls_ssl_close_notify returned %d\n", ret); if ((ret != MBEDTLS_ERR_SSL_WANT_READ) && (ret != MBEDTLS_ERR_SSL_WANT_WRITE))
break; {
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_config_free(&(self->conf));
mbedtls_ssl_free(&(self->ssl)); mbedtls_ssl_free(&(self->ssl));
GLOBAL_FREEMEM(self); GLOBAL_FREEMEM(self);
}
} }

@ -92,15 +92,16 @@ struct sIsoConnection
static void static void
IsoConnection_releaseAllocatedMemory(IsoConnection self) IsoConnection_releaseAllocatedMemory(IsoConnection self)
{ {
if (self->socket)
Socket_destroy(self->socket);
#if (CONFIG_MMS_SUPPORT_TLS == 1) #if (CONFIG_MMS_SUPPORT_TLS == 1)
if (IsoServer_getTLSConfiguration(self->isoServer) != NULL) { if (IsoServer_getTLSConfiguration(self->isoServer) != NULL) {
TLSSocket_close(self->tlsSocket); TLSSocket_close(self->tlsSocket);
self->tlsSocket = NULL;
} }
#endif /* (CONFIG_MMS_SUPPORT_TLS == 1) */ #endif /* (CONFIG_MMS_SUPPORT_TLS == 1) */
if (self->socket)
Socket_destroy(self->socket);
GLOBAL_FREEMEM(self->session); GLOBAL_FREEMEM(self->session);
GLOBAL_FREEMEM(self->presentation); GLOBAL_FREEMEM(self->presentation);
AcseConnection_destroy(self->acseConnection); AcseConnection_destroy(self->acseConnection);
@ -662,8 +663,10 @@ IsoConnection_close(IsoConnection self)
self->socket = NULL; self->socket = NULL;
#if (CONFIG_MMS_SUPPORT_TLS == 1) #if (CONFIG_MMS_SUPPORT_TLS == 1)
if (self->tlsSocket) if (self->tlsSocket) {
TLSSocket_close(self->tlsSocket); TLSSocket_close(self->tlsSocket);
self->tlsSocket = NULL;
}
#endif #endif
Socket_destroy(socket); Socket_destroy(socket);

Loading…
Cancel
Save