From df294b7b6949730273055cd3c9df1392c089ea7a Mon Sep 17 00:00:00 2001 From: Laukik Hase Date: Thu, 14 Apr 2022 12:14:41 +0530 Subject: [PATCH 1/2] smtp_client: Fix heap leakage - Freed all allocated resources by Mbed TLS at the end of routine --- .../protocols/smtp_client/main/smtp_client_example_main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/protocols/smtp_client/main/smtp_client_example_main.c b/examples/protocols/smtp_client/main/smtp_client_example_main.c index 52f090405f..c7980f6771 100644 --- a/examples/protocols/smtp_client/main/smtp_client_example_main.c +++ b/examples/protocols/smtp_client/main/smtp_client_example_main.c @@ -482,8 +482,12 @@ static void smtp_client_task(void *pvParameters) ret = 0; /* No errors */ exit: - mbedtls_ssl_session_reset(&ssl); mbedtls_net_free(&server_fd); + mbedtls_x509_crt_free(&cacert); + mbedtls_ssl_free(&ssl); + mbedtls_ssl_config_free(&conf); + mbedtls_ctr_drbg_free(&ctr_drbg); + mbedtls_entropy_free(&entropy); if (ret != 0) { mbedtls_strerror(ret, buf, 100); From 638a1b9bf3ff821ad8e55fa5d57986d021179310 Mon Sep 17 00:00:00 2001 From: Laukik Hase Date: Thu, 14 Apr 2022 13:35:02 +0530 Subject: [PATCH 2/2] smtp_client: Fixed garbage characters being printed - The R/W buffers were not cleared before reading/writing anything new --- examples/protocols/smtp_client/main/smtp_client_example_main.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/protocols/smtp_client/main/smtp_client_example_main.c b/examples/protocols/smtp_client/main/smtp_client_example_main.c index c7980f6771..88cf49be9d 100644 --- a/examples/protocols/smtp_client/main/smtp_client_example_main.c +++ b/examples/protocols/smtp_client/main/smtp_client_example_main.c @@ -100,6 +100,7 @@ static int write_and_get_response(mbedtls_net_context *sock_fd, unsigned char *b do { len = DATA_SIZE - 1; + memset(data, 0, DATA_SIZE); ret = mbedtls_net_recv(sock_fd, data, len); if (ret <= 0) { @@ -153,6 +154,7 @@ static int write_ssl_and_get_response(mbedtls_ssl_context *ssl, unsigned char *b do { len = DATA_SIZE - 1; + memset(data, 0, DATA_SIZE); ret = mbedtls_ssl_read(ssl, data, len); if (ret == MBEDTLS_ERR_SSL_WANT_READ || ret == MBEDTLS_ERR_SSL_WANT_WRITE) {