Skip to content
Snippets Groups Projects
Commit 114438e6 authored by Matt Johnston's avatar Matt Johnston
Browse files

zlib can use m_malloc/m_free too

--HG--
branch : fuzz
parent 50bde997
Branches
No related merge requests found
...@@ -391,6 +391,14 @@ int is_compress_recv() { ...@@ -391,6 +391,14 @@ int is_compress_recv() {
&& ses.keys->recv.algo_comp == DROPBEAR_COMP_ZLIB_DELAY); && ses.keys->recv.algo_comp == DROPBEAR_COMP_ZLIB_DELAY);
} }
static void* dropbear_zalloc(void* UNUSED(opaque), uInt items, uInt size) {
return m_calloc(items, size);
}
static void dropbear_zfree(void* UNUSED(opaque), void* ptr) {
m_free(ptr);
}
/* Set up new zlib compression streams, close the old ones. Only /* Set up new zlib compression streams, close the old ones. Only
* called from gen_new_keys() */ * called from gen_new_keys() */
static void gen_new_zstream_recv() { static void gen_new_zstream_recv() {
...@@ -399,11 +407,10 @@ static void gen_new_zstream_recv() { ...@@ -399,11 +407,10 @@ static void gen_new_zstream_recv() {
if (ses.newkeys->recv.algo_comp == DROPBEAR_COMP_ZLIB if (ses.newkeys->recv.algo_comp == DROPBEAR_COMP_ZLIB
|| ses.newkeys->recv.algo_comp == DROPBEAR_COMP_ZLIB_DELAY) { || ses.newkeys->recv.algo_comp == DROPBEAR_COMP_ZLIB_DELAY) {
ses.newkeys->recv.zstream = (z_streamp)m_malloc(sizeof(z_stream)); ses.newkeys->recv.zstream = (z_streamp)m_malloc(sizeof(z_stream));
ses.newkeys->recv.zstream->zalloc = Z_NULL; ses.newkeys->recv.zstream->zalloc = dropbear_zalloc;
ses.newkeys->recv.zstream->zfree = Z_NULL; ses.newkeys->recv.zstream->zfree = dropbear_zfree;
if (inflateInit(ses.newkeys->recv.zstream) != Z_OK) { if (inflateInit(ses.newkeys->recv.zstream) != Z_OK) {
m_free(ses.newkeys->recv.zstream);
dropbear_exit("zlib error"); dropbear_exit("zlib error");
} }
} else { } else {
...@@ -424,8 +431,8 @@ static void gen_new_zstream_trans() { ...@@ -424,8 +431,8 @@ static void gen_new_zstream_trans() {
if (ses.newkeys->trans.algo_comp == DROPBEAR_COMP_ZLIB if (ses.newkeys->trans.algo_comp == DROPBEAR_COMP_ZLIB
|| ses.newkeys->trans.algo_comp == DROPBEAR_COMP_ZLIB_DELAY) { || ses.newkeys->trans.algo_comp == DROPBEAR_COMP_ZLIB_DELAY) {
ses.newkeys->trans.zstream = (z_streamp)m_malloc(sizeof(z_stream)); ses.newkeys->trans.zstream = (z_streamp)m_malloc(sizeof(z_stream));
ses.newkeys->trans.zstream->zalloc = Z_NULL; ses.newkeys->trans.zstream->zalloc = dropbear_zalloc;
ses.newkeys->trans.zstream->zfree = Z_NULL; ses.newkeys->trans.zstream->zfree = dropbear_zfree;
if (deflateInit2(ses.newkeys->trans.zstream, Z_DEFAULT_COMPRESSION, if (deflateInit2(ses.newkeys->trans.zstream, Z_DEFAULT_COMPRESSION,
Z_DEFLATED, DROPBEAR_ZLIB_WINDOW_BITS, Z_DEFLATED, DROPBEAR_ZLIB_WINDOW_BITS,
......
...@@ -77,7 +77,9 @@ void * m_malloc(size_t size) { ...@@ -77,7 +77,9 @@ void * m_malloc(size_t size) {
} }
void * m_calloc(size_t nmemb, size_t size) { void * m_calloc(size_t nmemb, size_t size) {
assert(nmemb <= 1000 && size <= 10000); if (SIZE_T_MAX / nmemb < size) {
dropbear_exit("m_calloc failed");
}
return m_malloc(nmemb*size); return m_malloc(nmemb*size);
} }
......
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
#include "includes.h" #include "includes.h"
void * m_malloc(size_t size); void * m_malloc(size_t size);
/* m_calloc is limited in size, enough for libtomcrypt */
void * m_calloc(size_t nmemb, size_t size); void * m_calloc(size_t nmemb, size_t size);
void * m_strdup(const char * str); void * m_strdup(const char * str);
void * m_realloc(void* ptr, size_t size); void * m_realloc(void* ptr, size_t size);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment