]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Plug memory leak if push is interrupted
authorSteffan Karger <steffan.karger@fox-it.com>
Wed, 17 Jan 2018 13:16:24 +0000 (14:16 +0100)
committerGert Doering <gert@greenie.muc.de>
Thu, 25 Jan 2018 13:26:00 +0000 (14:26 +0100)
If a push is interrupted due to a timeout, c->c2.pulled_options_state is
never freed.  Fix that by always cleaning up any remaining pulled
options state when we close a connection.

This changes the mbedtls implementation of md_ctx_cleanup to actually
clean up the context, which was not needed earlier.

Signed-off-by: Steffan Karger <steffan.karger@fox-it.com>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1516194984-1540-1-git-send-email-steffan.karger@fox-it.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg16265.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
(cherry picked from commit 07036fd3c456ed4ebf1809d8d9f34941d42865d0)

src/openvpn/crypto_mbedtls.c
src/openvpn/init.c

index b35bbeb09b4778bd5b9b51b8f44e6d1ff1532430..b393c4ef4006fd32fe7aa6d61dfa4673ee8b28f4 100644 (file)
@@ -804,6 +804,7 @@ md_ctx_init(mbedtls_md_context_t *ctx, const mbedtls_md_info_t *kt)
 void
 md_ctx_cleanup(mbedtls_md_context_t *ctx)
 {
+    mbedtls_md_free(ctx);
 }
 
 int
index 04874b8ff4a4448fb198b9df3995f14ba1442880..86a17f4d540e757439a029a658036f26fbc86d5b 100644 (file)
@@ -3434,6 +3434,12 @@ do_close_tls(struct context *c)
     }
     c->c2.options_string_local = c->c2.options_string_remote = NULL;
 #endif
+
+    if (c->c2.pulled_options_state)
+    {
+        md_ctx_cleanup(c->c2.pulled_options_state);
+        md_ctx_free(c->c2.pulled_options_state);
+    }
 #endif
 }