aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--example/ndpiReader.c61
-rw-r--r--example/reader_util.c57
-rw-r--r--fuzz/Makefile.am4
-rw-r--r--fuzz/fuzz_ndpi_reader.c12
-rw-r--r--fuzz/fuzz_readerutils_parseprotolist.cpp4
-rw-r--r--fuzz/fuzz_readerutils_workflow.cpp4
6 files changed, 50 insertions, 92 deletions
diff --git a/example/ndpiReader.c b/example/ndpiReader.c
index 5685cda9a..c516d9b13 100644
--- a/example/ndpiReader.c
+++ b/example/ndpiReader.c
@@ -135,9 +135,9 @@ extern u_int32_t max_num_packets_per_flow, max_packet_payload_dissection, max_nu
extern u_int16_t min_pattern_len, max_pattern_len;
u_int8_t dump_internal_stats;
-struct ndpi_bin malloc_bins;
-int enable_malloc_bins = 0;
-int max_malloc_bins = 14;
+static struct ndpi_bin malloc_bins;
+static int enable_malloc_bins = 0;
+static int max_malloc_bins = 14;
int malloc_size_stats = 0;
struct flow_info {
@@ -252,7 +252,7 @@ typedef struct ndpi_id {
} ndpi_id_t;
// used memory counters
-u_int32_t current_ndpi_memory = 0, max_ndpi_memory = 0;
+static u_int32_t current_ndpi_memory = 0, max_ndpi_memory = 0;
#ifdef USE_DPDK
static int dpdk_port_id = 0, dpdk_run_capture = 1;
#endif
@@ -270,7 +270,45 @@ extern int parse_proto_name_list(char *str, NDPI_PROTOCOL_BITMASK *bitmask, int
FILE *trace = NULL;
#endif
-/* ********************************** */
+/* ***************************************************** */
+
+static u_int32_t reader_slot_malloc_bins(u_int64_t v)
+{
+ int i;
+
+ /* 0-2,3-4,5-8,9-16,17-32,33-64,65-128,129-256,257-512,513-1024,1025-2048,2049-4096,4097-8192,8193- */
+ for(i=0; i < max_malloc_bins - 1; i++)
+ if((1ULL << (i + 1)) >= v)
+ return i;
+ return i;
+}
+
+/**
+ * @brief ndpi_malloc wrapper function
+ */
+static void *ndpi_malloc_wrapper(size_t size) {
+ current_ndpi_memory += size;
+
+ if(current_ndpi_memory > max_ndpi_memory)
+ max_ndpi_memory = current_ndpi_memory;
+
+ if(enable_malloc_bins && malloc_size_stats)
+ ndpi_inc_bin(&malloc_bins, reader_slot_malloc_bins(size), 1);
+
+ return(malloc(size)); /* Don't change to ndpi_malloc !!!!! */
+}
+
+/* ***************************************************** */
+
+/**
+ * @brief free wrapper function
+ */
+static void free_wrapper(void *freeable) {
+ free(freeable); /* Don't change to ndpi_free !!!!! */
+}
+
+/* ***************************************************** */
+
#define NUM_DOH_BINS 2
@@ -2820,16 +2858,6 @@ static void setupDetection(u_int16_t thread_id, pcap_t * pcap_handle) {
/* Make sure to load lists before finalizing the initialization */
ndpi_set_protocol_detection_bitmask2(ndpi_thread_info[thread_id].workflow->ndpi_struct, &enabled_bitmask);
- // clear memory for results
- memset(ndpi_thread_info[thread_id].workflow->stats.protocol_counter, 0,
- sizeof(ndpi_thread_info[thread_id].workflow->stats.protocol_counter));
- memset(ndpi_thread_info[thread_id].workflow->stats.protocol_counter_bytes, 0,
- sizeof(ndpi_thread_info[thread_id].workflow->stats.protocol_counter_bytes));
- memset(ndpi_thread_info[thread_id].workflow->stats.protocol_flows, 0,
- sizeof(ndpi_thread_info[thread_id].workflow->stats.protocol_flows));
- memset(ndpi_thread_info[thread_id].workflow->stats.flow_confidence, 0,
- sizeof(ndpi_thread_info[thread_id].workflow->stats.flow_confidence));
-
if(_protoFilePath != NULL)
ndpi_load_protocols_file(ndpi_thread_info[thread_id].workflow->ndpi_struct, _protoFilePath);
@@ -4631,6 +4659,9 @@ void test_lib() {
long thread_id;
#endif
+ set_ndpi_malloc(ndpi_malloc_wrapper), set_ndpi_free(free_wrapper);
+ set_ndpi_flow_malloc(NULL), set_ndpi_flow_free(NULL);
+
#ifdef DEBUG_TRACE
if(trace) fprintf(trace, "Num threads: %d\n", num_threads);
#endif
diff --git a/example/reader_util.c b/example/reader_util.c
index 0fe629ac6..e666e4690 100644
--- a/example/reader_util.c
+++ b/example/reader_util.c
@@ -81,9 +81,6 @@ static u_int32_t flow_id = 0;
u_int8_t enable_doh_dot_detection = 0;
extern int malloc_size_stats;
-extern struct ndpi_bin malloc_bins;
-extern int max_malloc_bins;
-extern int enable_malloc_bins;
/* ****************************************************** */
@@ -335,45 +332,6 @@ void ndpi_free_flow_info_half(struct ndpi_flow_info *flow) {
/* ***************************************************** */
-extern u_int32_t current_ndpi_memory, max_ndpi_memory;
-
-static u_int32_t __slot_malloc_bins(u_int64_t v)
-{
- int i;
-
- /* 0-2,3-4,5-8,9-16,17-32,33-64,65-128,129-256,257-512,513-1024,1025-2048,2049-4096,4097-8192,8193- */
- for(i=0; i < max_malloc_bins - 1; i++)
- if((1ULL << (i + 1)) >= v)
- return i;
- return i;
-}
-
-/**
- * @brief ndpi_malloc wrapper function
- */
-static void *ndpi_malloc_wrapper(size_t size) {
- current_ndpi_memory += size;
-
- if(current_ndpi_memory > max_ndpi_memory)
- max_ndpi_memory = current_ndpi_memory;
-
- if(enable_malloc_bins && malloc_size_stats)
- ndpi_inc_bin(&malloc_bins, __slot_malloc_bins(size), 1);
-
- return(malloc(size)); /* Don't change to ndpi_malloc !!!!! */
-}
-
-/* ***************************************************** */
-
-/**
- * @brief free wrapper function
- */
-static void free_wrapper(void *freeable) {
- free(freeable); /* Don't change to ndpi_free !!!!! */
-}
-
-/* ***************************************************** */
-
static uint16_t ndpi_get_proto_id(struct ndpi_detection_module_struct *ndpi_mod, const char *name) {
uint16_t proto_id;
char *e;
@@ -454,13 +412,6 @@ struct ndpi_workflow* ndpi_workflow_init(const struct ndpi_workflow_prefs * pref
struct ndpi_detection_module_struct * module;
struct ndpi_workflow * workflow;
- /* On some fuzzers we don't want to use these memory allocators, but some custom ones */
-#ifndef DISABLE_CUSTOM_ALLOCATOR_ON_READERUTILS
- set_ndpi_malloc(ndpi_malloc_wrapper), set_ndpi_free(free_wrapper);
- set_ndpi_flow_malloc(NULL), set_ndpi_flow_free(NULL);
-#endif
-
- /* TODO: just needed here to init ndpi ndpi_malloc wrapper */
module = ndpi_init_detection_module();
if(module == NULL) {
@@ -1714,17 +1665,11 @@ static struct ndpi_proto packet_processing(struct ndpi_workflow * workflow,
if(enough_packets || (flow->detected_protocol.app_protocol != NDPI_PROTOCOL_UNKNOWN)) {
if((!enough_packets)
&& ndpi_extra_dissection_possible(workflow->ndpi_struct, ndpi_flow))
- ; /* Wait for certificate fingerprint */
+ ; /* Wait for further metadata */
else {
/* New protocol detected or give up */
flow->detection_completed = 1;
-#if 0
- /* Check if we should keep checking extra packets */
- if(ndpi_flow && ndpi_flow->check_extra_packets)
- flow->check_extra_packets = 1;
-#endif
-
if(flow->detected_protocol.app_protocol == NDPI_PROTOCOL_UNKNOWN) {
u_int8_t proto_guessed;
diff --git a/fuzz/Makefile.am b/fuzz/Makefile.am
index 8353cae49..a0cfc501c 100644
--- a/fuzz/Makefile.am
+++ b/fuzz/Makefile.am
@@ -577,8 +577,8 @@ fuzz_filecfg_config_LINK=$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(fuzz_filecfg_config_LDFLAGS) @NDPI_LDFLAGS@ $(LDFLAGS) -o $@
fuzz_readerutils_workflow_SOURCES = fuzz_readerutils_workflow.cpp fuzz_common_code.c ../example/reader_util.c
-fuzz_readerutils_workflow_CXXFLAGS = -I../example/ @NDPI_CFLAGS@ $(CXXFLAGS) -DDISABLE_CUSTOM_ALLOCATOR_ON_READERUTILS
-fuzz_readerutils_workflow_CFLAGS = @NDPI_CFLAGS@ $(CXXFLAGS) -DDISABLE_CUSTOM_ALLOCATOR_ON_READERUTILS
+fuzz_readerutils_workflow_CXXFLAGS = -I../example/ @NDPI_CFLAGS@ $(CXXFLAGS)
+fuzz_readerutils_workflow_CFLAGS = @NDPI_CFLAGS@ $(CXXFLAGS)
fuzz_readerutils_workflow_LDADD = ../src/lib/libndpi.a $(ADDITIONAL_LIBS)
fuzz_readerutils_workflow_LDFLAGS = $(PCAP_LIB) $(LIBS)
if HAS_FUZZLDFLAGS
diff --git a/fuzz/fuzz_ndpi_reader.c b/fuzz/fuzz_ndpi_reader.c
index 76da3c5ff..7b0268eed 100644
--- a/fuzz/fuzz_ndpi_reader.c
+++ b/fuzz/fuzz_ndpi_reader.c
@@ -11,15 +11,11 @@
struct ndpi_workflow_prefs *prefs = NULL;
struct ndpi_workflow *workflow = NULL;
-u_int32_t current_ndpi_memory = 0, max_ndpi_memory = 0;
u_int8_t enable_payload_analyzer = 0;
u_int8_t enable_flow_stats = 1;
u_int8_t human_readeable_string_len = 5;
u_int8_t max_num_udp_dissected_pkts = 16 /* 8 is enough for most protocols, Signal requires more */, max_num_tcp_dissected_pkts = 80 /* due to telnet */;
-int enable_malloc_bins = 1;
int malloc_size_stats = 0;
-int max_malloc_bins = 14;
-struct ndpi_bin malloc_bins; /* unused */
extern void ndpi_report_payload_stats(FILE *out);
@@ -71,12 +67,6 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
ndpi_set_config(workflow->ndpi_struct, NULL, "tcp_ack_payload_heuristic", "1");
ndpi_set_config(workflow->ndpi_struct, "tls", "application_blocks_tracking", "1");
- memset(workflow->stats.protocol_counter, 0,
- sizeof(workflow->stats.protocol_counter));
- memset(workflow->stats.protocol_counter_bytes, 0,
- sizeof(workflow->stats.protocol_counter_bytes));
- memset(workflow->stats.protocol_flows, 0,
- sizeof(workflow->stats.protocol_flows));
ndpi_finalize_initialization(workflow->ndpi_struct);
#ifdef CRYPT_FORCE_NO_AESNI
@@ -139,7 +129,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
for(i = 0; i < workflow->prefs.num_roots; i++)
ndpi_tdestroy(workflow->ndpi_flows_root[i], ndpi_flow_info_freer);
ndpi_free(workflow->ndpi_flows_root);
- /* Free payload analyzer data, without printing */
+ /* Free payload analyzer data */
if(enable_payload_analyzer)
ndpi_report_payload_stats(stdout);
diff --git a/fuzz/fuzz_readerutils_parseprotolist.cpp b/fuzz/fuzz_readerutils_parseprotolist.cpp
index f4e7f0485..2a52cef75 100644
--- a/fuzz/fuzz_readerutils_parseprotolist.cpp
+++ b/fuzz/fuzz_readerutils_parseprotolist.cpp
@@ -6,15 +6,11 @@
#include <stdio.h>
#include "fuzzer/FuzzedDataProvider.h"
-u_int32_t current_ndpi_memory = 0, max_ndpi_memory = 0;
u_int8_t enable_payload_analyzer = 0;
u_int8_t enable_flow_stats = 0;
u_int8_t human_readeable_string_len = 5;
u_int8_t max_num_udp_dissected_pkts = 16 /* 8 is enough for most protocols, Signal requires more */, max_num_tcp_dissected_pkts = 80 /* due to telnet */;
-int enable_malloc_bins = 0;
int malloc_size_stats = 0;
-int max_malloc_bins = 14;
-struct ndpi_bin malloc_bins; /* unused */
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
diff --git a/fuzz/fuzz_readerutils_workflow.cpp b/fuzz/fuzz_readerutils_workflow.cpp
index d4d747374..a3aea2e11 100644
--- a/fuzz/fuzz_readerutils_workflow.cpp
+++ b/fuzz/fuzz_readerutils_workflow.cpp
@@ -8,15 +8,11 @@
extern u_int8_t enable_doh_dot_detection;
-u_int32_t current_ndpi_memory = 0, max_ndpi_memory = 0;
u_int8_t enable_payload_analyzer = 0;
u_int8_t enable_flow_stats = 0;
u_int8_t human_readeable_string_len = 5;
u_int8_t max_num_udp_dissected_pkts = 16 /* 8 is enough for most protocols, Signal requires more */, max_num_tcp_dissected_pkts = 80 /* due to telnet */;
-int enable_malloc_bins = 0;
int malloc_size_stats = 0;
-int max_malloc_bins = 14;
-struct ndpi_bin malloc_bins; /* unused */
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
FuzzedDataProvider fuzzed_data(data, size);