dropbear: fix memory leaks with zlib enabled
authorKonstantin Demin <[email protected]>
Tue, 16 Oct 2018 13:31:40 +0000 (16:31 +0300)
committerHans Dedecker <[email protected]>
Thu, 8 Nov 2018 10:07:05 +0000 (11:07 +0100)
cherry-pick upstream commit c1694230516fe1c3d78e4fd23aebd5fbc00ce21c

Signed-off-by: Konstantin Demin <[email protected]>
package/network/services/dropbear/patches/009-fix-memory-leaks-with-zlib-enabled.patch [new file with mode: 0644]

diff --git a/package/network/services/dropbear/patches/009-fix-memory-leaks-with-zlib-enabled.patch b/package/network/services/dropbear/patches/009-fix-memory-leaks-with-zlib-enabled.patch
new file mode 100644 (file)
index 0000000..f3cbfc9
--- /dev/null
@@ -0,0 +1,29 @@
+--- a/common-kex.c
++++ b/common-kex.c
+@@ -403,6 +403,7 @@ static void gen_new_zstream_recv() {
+               ses.newkeys->recv.zstream->zfree = Z_NULL;
+               
+               if (inflateInit(ses.newkeys->recv.zstream) != Z_OK) {
++                      m_free(ses.newkeys->recv.zstream);
+                       dropbear_exit("zlib error");
+               }
+       } else {
+--- a/common-session.c
++++ b/common-session.c
+@@ -298,6 +298,16 @@ void session_cleanup() {
+               buf_free(dequeue(&ses.writequeue));
+       }
++      m_free(ses.newkeys);
++#ifndef DISABLE_ZLIB
++      if (ses.keys->recv.zstream != NULL) {
++              if (inflateEnd(ses.keys->recv.zstream) == Z_STREAM_ERROR) {
++                      dropbear_exit("Crypto error");
++              }
++              m_free(ses.keys->recv.zstream);
++      }
++#endif
++
+       m_free(ses.remoteident);
+       m_free(ses.authstate.pw_dir);
+       m_free(ses.authstate.pw_name);