changeset 1569:c42e8ff42bd1

Only use malloc wrapper if fuzzing
author Matt Johnston <matt@ucc.asn.au>
date Thu, 01 Mar 2018 23:46:24 +0800
parents 119a459b00d0
children 67cb1983500b
files dbmalloc.c dbmalloc.h sysoptions.h
diffstat 3 files changed, 71 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/dbmalloc.c	Thu Mar 01 23:46:07 2018 +0800
+++ b/dbmalloc.c	Thu Mar 01 23:46:24 2018 +0800
@@ -1,6 +1,64 @@
 #include "dbmalloc.h"
 #include "dbutil.h"
 
+
+void * m_calloc(size_t nmemb, size_t size) {
+    if (SIZE_T_MAX / nmemb < size) {
+        dropbear_exit("m_calloc failed");
+    }
+    return m_malloc(nmemb*size);
+}
+
+void * m_strdup(const char * str) {
+    char* ret;
+    unsigned int len;
+    len = strlen(str);
+
+    ret = m_malloc(len+1);
+    if (ret == NULL) {
+        dropbear_exit("m_strdup failed");
+    }
+    memcpy(ret, str, len+1);
+    return ret;
+}
+
+#if !DROPBEAR_TRACKING_MALLOC
+
+/* Simple wrappers around malloc etc */
+void * m_malloc(size_t size) {
+
+	void* ret;
+
+	if (size == 0) {
+		dropbear_exit("m_malloc failed");
+	}
+	ret = calloc(1, size);
+	if (ret == NULL) {
+		dropbear_exit("m_malloc failed");
+	}
+	return ret;
+
+}
+
+void * m_realloc(void* ptr, size_t size) {
+
+	void *ret;
+
+	if (size == 0) {
+		dropbear_exit("m_realloc failed");
+	}
+	ret = realloc(ptr, size);
+	if (ret == NULL) {
+		dropbear_exit("m_realloc failed");
+	}
+	return ret;
+}
+
+
+#else
+
+/* For fuzzing */
+
 struct dbmalloc_header {
     unsigned int epoch;
     struct dbmalloc_header *prev;
@@ -90,13 +148,6 @@
     return &mem[sizeof(struct dbmalloc_header)];
 }
 
-void * m_calloc(size_t nmemb, size_t size) {
-    if (SIZE_T_MAX / nmemb < size) {
-        dropbear_exit("m_calloc failed");
-    }
-    return m_malloc(nmemb*size);
-}
-
 void * m_realloc(void* ptr, size_t size) {
     char* mem = NULL;
     struct dbmalloc_header* header = NULL;
@@ -128,17 +179,4 @@
     free(header);
 }
 
-void * m_strdup(const char * str) {
-    char* ret;
-    unsigned int len;
-    len = strlen(str);
-
-    ret = m_malloc(len+1);
-    if (ret == NULL) {
-        dropbear_exit("m_strdup failed");
-    }
-    memcpy(ret, str, len+1);
-    return ret;
-}
-
-
+#endif /* DROPBEAR_TRACKING_MALLOC */
--- a/dbmalloc.h	Thu Mar 01 23:46:07 2018 +0800
+++ b/dbmalloc.h	Thu Mar 01 23:46:24 2018 +0800
@@ -7,10 +7,19 @@
 void * m_calloc(size_t nmemb, size_t size);
 void * m_strdup(const char * str);
 void * m_realloc(void* ptr, size_t size);
+
+#if DROPBEAR_TRACKING_MALLOC
 void m_free_direct(void* ptr);
 #define m_free(X) do {m_free_direct(X); (X) = NULL;} while (0)
-
 void m_malloc_set_epoch(unsigned int epoch);
 void m_malloc_free_epoch(unsigned int epoch, int dofree);
 
+#else
+/* plain wrapper */
+
+#define m_free(X) do {free(X); (X) = NULL;} while (0)
+
+#endif
+
+
 #endif /* DBMALLOC_H_ */
--- a/sysoptions.h	Thu Mar 01 23:46:07 2018 +0800
+++ b/sysoptions.h	Thu Mar 01 23:46:24 2018 +0800
@@ -316,4 +316,6 @@
 #define DROPBEAR_CLIENT_TCP_FAST_OPEN 0
 #endif
 
+#define DROPBEAR_TRACKING_MALLOC (DROPBEAR_FUZZ)
+
 /* no include guard for this file */