diff options
Diffstat (limited to 'fuzz')
-rw-r--r-- | fuzz/Makefile.am | 14 | ||||
-rw-r--r-- | fuzz/fuzz_ndpi_reader.c | 39 |
2 files changed, 22 insertions, 31 deletions
diff --git a/fuzz/Makefile.am b/fuzz/Makefile.am index 6b9a090a6..d739fb00a 100644 --- a/fuzz/Makefile.am +++ b/fuzz/Makefile.am @@ -1,7 +1,7 @@ bin_PROGRAMS = fuzz_process_packet fuzz_ndpi_reader fuzz_quic_get_crypto_data fuzz_process_packet_SOURCES = fuzz_process_packet.c -fuzz_process_packet_CFLAGS = +fuzz_process_packet_CFLAGS = @NDPI_CFLAGS@ $(CXXFLAGS) fuzz_process_packet_LDADD = ../src/lib/libndpi.a fuzz_process_packet_LDFLAGS = $(ADDITIONAL_LIBS) $(LIBS) if HAS_FUZZLDFLAGS @@ -13,9 +13,9 @@ fuzz_process_packet_LINK=$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXX) @NDPI_CFLAGS@ $(AM_CXXFLAGS) $(CXXFLAGS) \ $(fuzz_process_packet_LDFLAGS) @NDPI_LDFLAGS@ $(LDFLAGS) -o $@ -fuzz_ndpi_reader_SOURCES = fuzz_ndpi_reader.c -fuzz_ndpi_reader_CFLAGS = -I../example/ -fuzz_ndpi_reader_LDADD = ../example/libndpiReader.a ../src/lib/libndpi.a +fuzz_ndpi_reader_SOURCES = fuzz_ndpi_reader.c ../example/reader_util.c +fuzz_ndpi_reader_CFLAGS = -I../example/ @NDPI_CFLAGS@ $(CXXFLAGS) +fuzz_ndpi_reader_LDADD = ../src/lib/libndpi.a fuzz_ndpi_reader_LDFLAGS = $(PCAP_LIB) $(ADDITIONAL_LIBS) $(LIBS) if HAS_FUZZLDFLAGS fuzz_ndpi_reader_CFLAGS += $(LIB_FUZZING_ENGINE) @@ -27,9 +27,9 @@ fuzz_ndpi_reader_LINK=$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(fuzz_ndpi_reader_LDFLAGS) @NDPI_LDFLAGS@ $(LDFLAGS) -o $@ fuzz_quic_get_crypto_data_SOURCES = fuzz_quic_get_crypto_data.c -fuzz_quic_get_crypto_data_CFLAGS = -I../example/ -fuzz_quic_get_crypto_data_LDADD = ../example/libndpiReader.a ../src/lib/libndpi.a -fuzz_quic_get_crypto_data_LDFLAGS = $(PCAP_LIB) $(ADDITIONAL_LIBS) $(LIBS) +fuzz_quic_get_crypto_data_CFLAGS = @NDPI_CFLAGS@ $(CXXFLAGS) +fuzz_quic_get_crypto_data_LDADD = ../src/lib/libndpi.a +fuzz_quic_get_crypto_data_LDFLAGS = $(ADDITIONAL_LIBS) $(LIBS) if HAS_FUZZLDFLAGS fuzz_quic_get_crypto_data_CFLAGS += $(LIB_FUZZING_ENGINE) fuzz_quic_get_crypto_data_LDFLAGS += $(LIB_FUZZING_ENGINE) diff --git a/fuzz/fuzz_ndpi_reader.c b/fuzz/fuzz_ndpi_reader.c index 9f75a69f7..1adba5939 100644 --- a/fuzz/fuzz_ndpi_reader.c +++ b/fuzz/fuzz_ndpi_reader.c @@ -23,25 +23,20 @@ int malloc_size_stats = 0; int max_malloc_bins = 0; struct ndpi_bin malloc_bins; /* unused */ -int bufferToFile(const char * name, const uint8_t *Data, size_t Size) { - FILE * fd; - if (remove(name) != 0) { - if (errno != ENOENT) { - perror("remove failed"); - return -1; - } - } - fd = fopen(name, "wb"); +FILE *bufferToFile(const uint8_t *Data, size_t Size) { + FILE *fd; + fd = tmpfile(); if (fd == NULL) { - perror("open failed"); - return -2; + perror("Error tmpfile"); + return NULL; } if (fwrite (Data, 1, Size, fd) != Size) { + perror("Error fwrite"); fclose(fd); - return -3; + return NULL; } - fclose(fd); - return 0; + rewind(fd); + return fd; } int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { @@ -51,8 +46,8 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { int r; char errbuf[PCAP_ERRBUF_SIZE]; NDPI_PROTOCOL_BITMASK all; - char * pcap_path = tempnam("/tmp", "fuzz-ndpi-reader"); u_int i; + FILE *fd; if (prefs == NULL) { prefs = calloc(sizeof(struct ndpi_workflow_prefs), 1); @@ -78,20 +73,19 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { ndpi_finalize_initialization(workflow->ndpi_struct); } - bufferToFile(pcap_path, Data, Size); + fd = bufferToFile(Data, Size); + if (fd == NULL) + return 0; - pkts = pcap_open_offline(pcap_path, errbuf); + pkts = pcap_fopen_offline(fd, errbuf); if (pkts == NULL) { - remove(pcap_path); - free(pcap_path); + fclose(fd); return 0; } if (ndpi_is_datalink_supported(pcap_datalink(pkts)) == 0) { /* Do not fail if the datalink type is not supported (may happen often during fuzzing). */ pcap_close(pkts); - remove(pcap_path); - free(pcap_path); return 0; } @@ -122,8 +116,5 @@ int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { ndpi_tdestroy(workflow->ndpi_flows_root[i], ndpi_flow_info_freer); ndpi_free(workflow->ndpi_flows_root); - remove(pcap_path); - free(pcap_path); - return 0; } |