diff options
author | Robert Swiecki <robert@swiecki.net> | 2018-01-06 00:42:48 +0100 |
---|---|---|
committer | Robert Swiecki <robert@swiecki.net> | 2018-01-06 00:42:48 +0100 |
commit | 79cc04ef167391e49e1d17979148dcc2514d7a23 (patch) | |
tree | 591a6c7958c3e03689f88a9bc2c352076cb06ecb | |
parent | 74073e30d2458364e372af5e71a7530641fc7583 (diff) | |
parent | 93bf1988b5e5a31ff303f2386411ebe17a35d1da (diff) | |
download | honggfuzz-79cc04ef167391e49e1d17979148dcc2514d7a23.tar.gz |
Merge branch 'master' of ssh://github.com/google/honggfuzz
-rw-r--r-- | Makefile | 146 | ||||
-rw-r--r-- | cmdline.c | 8 | ||||
-rw-r--r-- | cmdline.h | 2 | ||||
-rw-r--r-- | display.c | 6 | ||||
-rw-r--r-- | fuzz.c | 8 | ||||
-rw-r--r-- | hfuzz_cc/hfuzz-cc.c | 8 | ||||
-rw-r--r-- | honggfuzz.c | 8 | ||||
-rw-r--r-- | honggfuzz.h | 2 | ||||
l--------- | includes/libcommon | 1 | ||||
l--------- | includes/libhfcommon | 1 | ||||
l--------- | includes/libhfnetdriver | 1 | ||||
-rw-r--r-- | input.c | 8 | ||||
-rw-r--r-- | libhfcommon/common.h (renamed from libcommon/common.h) | 28 | ||||
-rw-r--r-- | libhfcommon/files.c (renamed from libcommon/files.c) | 8 | ||||
-rw-r--r-- | libhfcommon/files.h (renamed from libcommon/files.h) | 7 | ||||
-rw-r--r-- | libhfcommon/log.c (renamed from libcommon/log.c) | 6 | ||||
-rw-r--r-- | libhfcommon/log.h (renamed from libcommon/log.h) | 9 | ||||
-rw-r--r-- | libhfcommon/ns.c (renamed from libcommon/ns.c) | 8 | ||||
-rw-r--r-- | libhfcommon/ns.h (renamed from libcommon/ns.h) | 0 | ||||
-rw-r--r-- | libhfcommon/util.c (renamed from libcommon/util.c) | 8 | ||||
-rw-r--r-- | libhfcommon/util.h (renamed from libcommon/util.h) | 6 | ||||
-rw-r--r-- | libhfnetdriver/netdriver.c (renamed from libnetdriver/netdriver.c) | 130 | ||||
-rw-r--r-- | libhfnetdriver/netdriver.h | 14 | ||||
-rw-r--r-- | libhfuzz/instrument.c | 6 | ||||
-rw-r--r-- | libhfuzz/linux.c | 8 | ||||
-rw-r--r-- | libhfuzz/persistent.c | 6 | ||||
-rw-r--r-- | linux/arch.c | 10 | ||||
-rw-r--r-- | linux/bfd.c | 8 | ||||
-rw-r--r-- | linux/perf.c | 8 | ||||
-rw-r--r-- | linux/pt.c | 6 | ||||
-rw-r--r-- | linux/trace.c | 8 | ||||
-rw-r--r-- | linux/unwind.c | 4 | ||||
-rw-r--r-- | mac/arch.c | 8 | ||||
-rw-r--r-- | mangle.c | 6 | ||||
-rw-r--r-- | posix/arch.c | 8 | ||||
-rw-r--r-- | report.c | 6 | ||||
-rw-r--r-- | sancov.c | 8 | ||||
-rw-r--r-- | sanitizers.c | 10 | ||||
-rw-r--r-- | subproc.c | 8 |
39 files changed, 279 insertions, 262 deletions
@@ -27,7 +27,7 @@ BIN := honggfuzz HFUZZ_CC_BINS := hfuzz_cc/hfuzz-clang hfuzz_cc/hfuzz-clang++ hfuzz_cc/hfuzz-gcc hfuzz_cc/hfuzz-g++ HFUZZ_CC_SRCS := hfuzz_cc/hfuzz-cc.c COMMON_CFLAGS := -D_GNU_SOURCE -Wall -Werror -Wframe-larger-than=131072 -Wno-format-truncation -I. -COMMON_LDFLAGS := -lm libcommon/libcommon.a +COMMON_LDFLAGS := -lm libhfcommon/libhfcommon.a COMMON_SRCS := $(sort $(wildcard *.c)) CFLAGS ?= -O3 LDFLAGS ?= @@ -165,13 +165,13 @@ LHFUZZ_OBJS := $(LHFUZZ_SRCS:.c=.o) LHFUZZ_ARCH := libhfuzz/libhfuzz.a HFUZZ_INC ?= $(shell pwd) -LCOMMON_SRCS := $(wildcard libcommon/*.c) +LCOMMON_SRCS := $(wildcard libhfcommon/*.c) LCOMMON_OBJS := $(LCOMMON_SRCS:.c=.o) -LCOMMON_ARCH := libcommon/libcommon.a +LCOMMON_ARCH := libhfcommon/libhfcommon.a -LNETDRIVER_SRCS := $(wildcard libnetdriver/*.c) +LNETDRIVER_SRCS := $(wildcard libhfnetdriver/*.c) LNETDRIVER_OBJS := $(LNETDRIVER_SRCS:.c=.o) -LNETDRIVER_ARCH := libnetdriver/libnetdriver.a +LNETDRIVER_ARCH := libhfnetdriver/libhfnetdriver.a # Respect external user defines CFLAGS += $(COMMON_CFLAGS) $(ARCH_CFLAGS) -D_HF_ARCH_${ARCH} @@ -239,7 +239,7 @@ else endif endif -SUBDIR_ROOTS := linux mac posix libhfuzz libcommon +SUBDIR_ROOTS := linux mac posix libhfuzz libhfcommon libhfnetdriver DIRS := . $(shell find $(SUBDIR_ROOTS) -type d) CLEAN_PATTERNS := *.o *~ core *.a *.dSYM *.la *.so *.dylib SUBDIR_GARBAGE := $(foreach DIR,$(DIRS),$(addprefix $(DIR)/,$(CLEAN_PATTERNS))) @@ -350,67 +350,75 @@ android-clean-deps: # DO NOT DELETE -cmdline.o: cmdline.h honggfuzz.h libcommon/util.h libcommon/common.h -cmdline.o: libcommon/files.h libcommon/common.h libcommon/log.h -display.o: display.h honggfuzz.h libcommon/util.h libcommon/common.h -display.o: libcommon/log.h libcommon/common.h -fuzz.o: fuzz.h honggfuzz.h libcommon/util.h arch.h input.h libcommon/common.h -fuzz.o: libcommon/files.h libcommon/common.h libcommon/log.h mangle.h -fuzz.o: report.h sancov.h sanitizers.h subproc.h -honggfuzz.o: cmdline.h honggfuzz.h libcommon/util.h libcommon/common.h -honggfuzz.o: display.h fuzz.h input.h libcommon/files.h libcommon/common.h -honggfuzz.o: libcommon/log.h -input.o: input.h honggfuzz.h libcommon/util.h libcommon/common.h -input.o: libcommon/files.h libcommon/common.h libcommon/log.h -mangle.o: mangle.h honggfuzz.h libcommon/util.h libcommon/common.h -mangle.o: libcommon/log.h libcommon/common.h -report.o: report.h honggfuzz.h libcommon/util.h libcommon/common.h -report.o: libcommon/log.h libcommon/common.h -sancov.o: sancov.h honggfuzz.h libcommon/util.h libcommon/common.h -sancov.o: libcommon/files.h libcommon/common.h libcommon/log.h sanitizers.h -sanitizers.o: sanitizers.h honggfuzz.h libcommon/util.h libcommon/common.h -sanitizers.o: libcommon/files.h libcommon/common.h libcommon/log.h -subproc.o: subproc.h honggfuzz.h libcommon/util.h arch.h fuzz.h -subproc.o: libcommon/common.h libcommon/files.h libcommon/common.h -subproc.o: libcommon/log.h -hfuzz_cc/hfuzz-cc.o: honggfuzz.h libcommon/util.h libcommon/common.h -hfuzz_cc/hfuzz-cc.o: libcommon/files.h libcommon/common.h libcommon/log.h -libcommon/files.o: libcommon/files.h libcommon/common.h libcommon/log.h -libcommon/files.o: libcommon/util.h -libcommon/log.o: libcommon/log.h libcommon/common.h libcommon/util.h -libcommon/ns.o: libcommon/ns.h libcommon/common.h libcommon/files.h -libcommon/ns.o: libcommon/log.h -libcommon/util.o: libcommon/util.h libcommon/common.h libcommon/files.h -libcommon/util.o: libcommon/log.h -libhfuzz/instrument.o: libhfuzz/instrument.h honggfuzz.h libcommon/util.h -libhfuzz/instrument.o: libcommon/common.h libcommon/log.h libcommon/common.h -libhfuzz/linux.o: libcommon/common.h libhfuzz/libhfuzz.h libcommon/files.h -libhfuzz/linux.o: libcommon/common.h libcommon/log.h libcommon/ns.h +cmdline.o: cmdline.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h +cmdline.o: libhfcommon/files.h libhfcommon/common.h libhfcommon/log.h +display.o: display.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h +display.o: libhfcommon/log.h +fuzz.o: fuzz.h honggfuzz.h libhfcommon/util.h arch.h input.h +fuzz.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h +fuzz.o: libhfcommon/log.h mangle.h report.h sancov.h sanitizers.h subproc.h +honggfuzz.o: cmdline.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h +honggfuzz.o: display.h fuzz.h input.h libhfcommon/files.h +honggfuzz.o: libhfcommon/common.h libhfcommon/log.h +input.o: input.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h +input.o: libhfcommon/files.h libhfcommon/common.h libhfcommon/log.h +mangle.o: mangle.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h +mangle.o: libhfcommon/log.h +report.o: report.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h +report.o: libhfcommon/log.h +sancov.o: sancov.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h +sancov.o: libhfcommon/files.h libhfcommon/common.h libhfcommon/log.h +sancov.o: sanitizers.h +sanitizers.o: sanitizers.h honggfuzz.h libhfcommon/util.h +sanitizers.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h +sanitizers.o: libhfcommon/log.h +subproc.o: subproc.h honggfuzz.h libhfcommon/util.h arch.h fuzz.h +subproc.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h +subproc.o: libhfcommon/log.h +hfuzz_cc/hfuzz-cc.o: honggfuzz.h libhfcommon/util.h libhfcommon/common.h +hfuzz_cc/hfuzz-cc.o: libhfcommon/files.h libhfcommon/common.h +hfuzz_cc/hfuzz-cc.o: libhfcommon/log.h +libhfcommon/files.o: libhfcommon/files.h libhfcommon/common.h +libhfcommon/files.o: libhfcommon/common.h libhfcommon/log.h +libhfcommon/files.o: libhfcommon/util.h +libhfcommon/log.o: libhfcommon/log.h libhfcommon/common.h libhfcommon/util.h +libhfcommon/ns.o: libhfcommon/ns.h libhfcommon/common.h libhfcommon/files.h +libhfcommon/ns.o: libhfcommon/common.h libhfcommon/log.h +libhfcommon/util.o: libhfcommon/util.h libhfcommon/common.h +libhfcommon/util.o: libhfcommon/files.h libhfcommon/common.h +libhfcommon/util.o: libhfcommon/log.h +libhfnetdriver/netdriver.o: libhfcommon/common.h libhfcommon/log.h +libhfnetdriver/netdriver.o: libhfcommon/ns.h +libhfuzz/instrument.o: libhfuzz/instrument.h honggfuzz.h libhfcommon/util.h +libhfuzz/instrument.o: libhfcommon/common.h libhfcommon/log.h +libhfuzz/linux.o: libhfcommon/common.h libhfuzz/libhfuzz.h +libhfuzz/linux.o: libhfcommon/files.h libhfcommon/common.h libhfcommon/log.h +libhfuzz/linux.o: libhfcommon/ns.h libhfuzz/memorycmp.o: libhfuzz/instrument.h -libhfuzz/persistent.o: libhfuzz/libhfuzz.h honggfuzz.h libcommon/util.h -libhfuzz/persistent.o: libcommon/common.h libcommon/files.h -libhfuzz/persistent.o: libcommon/common.h libcommon/log.h -libnetdriver/netdriver.o: libcommon/common.h libcommon/log.h -libnetdriver/netdriver.o: libcommon/common.h libcommon/ns.h -linux/arch.o: arch.h honggfuzz.h libcommon/util.h fuzz.h libcommon/common.h -linux/arch.o: libcommon/files.h libcommon/common.h libcommon/log.h -linux/arch.o: libcommon/ns.h linux/perf.h linux/trace.h sancov.h sanitizers.h -linux/arch.o: subproc.h -linux/bfd.o: linux/bfd.h linux/unwind.h honggfuzz.h libcommon/util.h -linux/bfd.o: libcommon/common.h libcommon/files.h libcommon/common.h -linux/bfd.o: libcommon/log.h -linux/perf.o: linux/perf.h honggfuzz.h libcommon/util.h libcommon/common.h -linux/perf.o: libcommon/files.h libcommon/common.h libcommon/log.h linux/pt.h -linux/pt.o: libcommon/common.h libcommon/log.h libcommon/common.h -linux/pt.o: libcommon/util.h linux/pt.h honggfuzz.h -linux/trace.o: linux/trace.h honggfuzz.h libcommon/util.h libcommon/common.h -linux/trace.o: libcommon/files.h libcommon/common.h libcommon/log.h -linux/trace.o: linux/bfd.h linux/unwind.h sancov.h sanitizers.h subproc.h -linux/unwind.o: linux/unwind.h honggfuzz.h libcommon/util.h -linux/unwind.o: libcommon/common.h libcommon/log.h libcommon/common.h -mac/arch.o: arch.h honggfuzz.h libcommon/util.h libcommon/common.h -mac/arch.o: libcommon/files.h libcommon/common.h libcommon/log.h sancov.h -mac/arch.o: subproc.h -posix/arch.o: arch.h honggfuzz.h libcommon/util.h fuzz.h libcommon/common.h -posix/arch.o: libcommon/files.h libcommon/common.h libcommon/log.h sancov.h -posix/arch.o: subproc.h +libhfuzz/persistent.o: libhfuzz/libhfuzz.h honggfuzz.h libhfcommon/util.h +libhfuzz/persistent.o: libhfcommon/common.h libhfcommon/files.h +libhfuzz/persistent.o: libhfcommon/common.h libhfcommon/log.h +linux/arch.o: arch.h honggfuzz.h libhfcommon/util.h fuzz.h +linux/arch.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h +linux/arch.o: libhfcommon/log.h libhfcommon/ns.h linux/perf.h linux/trace.h +linux/arch.o: sancov.h sanitizers.h subproc.h +linux/bfd.o: linux/bfd.h linux/unwind.h honggfuzz.h libhfcommon/util.h +linux/bfd.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h +linux/bfd.o: libhfcommon/log.h +linux/perf.o: linux/perf.h honggfuzz.h libhfcommon/util.h +linux/perf.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h +linux/perf.o: libhfcommon/log.h linux/pt.h +linux/pt.o: libhfcommon/common.h libhfcommon/log.h libhfcommon/util.h +linux/pt.o: linux/pt.h honggfuzz.h +linux/trace.o: linux/trace.h honggfuzz.h libhfcommon/util.h +linux/trace.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h +linux/trace.o: libhfcommon/log.h linux/bfd.h linux/unwind.h sancov.h +linux/trace.o: sanitizers.h subproc.h +linux/unwind.o: linux/unwind.h honggfuzz.h libhfcommon/util.h +linux/unwind.o: libhfcommon/common.h libhfcommon/log.h +mac/arch.o: arch.h honggfuzz.h libhfcommon/util.h libhfcommon/common.h +mac/arch.o: libhfcommon/files.h libhfcommon/common.h libhfcommon/log.h +mac/arch.o: sancov.h subproc.h +posix/arch.o: arch.h honggfuzz.h libhfcommon/util.h fuzz.h +posix/arch.o: libhfcommon/common.h libhfcommon/files.h libhfcommon/common.h +posix/arch.o: libhfcommon/log.h sancov.h subproc.h @@ -39,10 +39,10 @@ #include <sys/types.h> #include <unistd.h> -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" struct custom_option { struct option opt; @@ -26,7 +26,7 @@ #include <sys/time.h> #include "honggfuzz.h" -#include "libcommon/common.h" +#include "libhfcommon/common.h" rlim_t cmdlineParseRLimit(int res, const char* optarg, unsigned long mul); @@ -33,9 +33,9 @@ #include <string.h> #include <unistd.h> -#include "libcommon/common.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" #define ESC_CLEAR_ALL "\033[2J" #define ESC_CLEAR_LINE "\033[2K" @@ -47,10 +47,10 @@ #include "arch.h" #include "honggfuzz.h" #include "input.h" -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" #include "mangle.h" #include "report.h" #include "sancov.h" diff --git a/hfuzz_cc/hfuzz-cc.c b/hfuzz_cc/hfuzz-cc.c index ca0e822a..ff26670e 100644 --- a/hfuzz_cc/hfuzz-cc.c +++ b/hfuzz_cc/hfuzz-cc.c @@ -13,10 +13,10 @@ #include <unistd.h> #include "honggfuzz.h" -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" #define ARGS_MAX 4096 #define __XSTR(x) #x diff --git a/honggfuzz.c b/honggfuzz.c index 9b6ffa86..817aec28 100644 --- a/honggfuzz.c +++ b/honggfuzz.c @@ -37,10 +37,10 @@ #include "display.h" #include "fuzz.h" #include "input.h" -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" static int sigReceived = 0; diff --git a/honggfuzz.h b/honggfuzz.h index a6c99ee5..d5d9b929 100644 --- a/honggfuzz.h +++ b/honggfuzz.h @@ -35,7 +35,7 @@ #include <sys/types.h> #include <time.h> -#include "libcommon/util.h" +#include "libhfcommon/util.h" #define PROG_NAME "honggfuzz" #define PROG_VERSION "1.3" diff --git a/includes/libcommon b/includes/libcommon deleted file mode 120000 index 7e124537..00000000 --- a/includes/libcommon +++ /dev/null @@ -1 +0,0 @@ -../libcommon
\ No newline at end of file diff --git a/includes/libhfcommon b/includes/libhfcommon new file mode 120000 index 00000000..319088a7 --- /dev/null +++ b/includes/libhfcommon @@ -0,0 +1 @@ +../libhfcommon
\ No newline at end of file diff --git a/includes/libhfnetdriver b/includes/libhfnetdriver new file mode 120000 index 00000000..76faef68 --- /dev/null +++ b/includes/libhfnetdriver @@ -0,0 +1 @@ +../libhfnetdriver
\ No newline at end of file @@ -37,8 +37,8 @@ #include <sys/types.h> #include <unistd.h> -#include "libcommon/common.h" -#include "libcommon/files.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" #if defined(_HF_ARCH_LINUX) #include <sys/syscall.h> @@ -47,8 +47,8 @@ #endif /* defined(__NR_memfd_create) */ #endif /* defined(_HF_ARCH_LINUX) */ -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" static bool input_getDirStatsAndRewind(honggfuzz_t* hfuzz) { rewinddir(hfuzz->io.inputDirPtr); diff --git a/libcommon/common.h b/libhfcommon/common.h index c5767f70..6423548c 100644 --- a/libcommon/common.h +++ b/libhfcommon/common.h @@ -24,25 +24,31 @@ #ifndef _HF_COMMON_H_ #define _HF_COMMON_H_ -#include <dirent.h> -#include <inttypes.h> -#include <limits.h> -#include <pthread.h> -#include <stdbool.h> -#include <stdint.h> -#include <sys/param.h> -#include <sys/queue.h> -#include <sys/types.h> -#include <time.h> +#include <stdlib.h> +#include <unistd.h> #ifndef UNUSED #define UNUSED __attribute__((unused)) -#endif +#endif /* ifndef UNUSED */ +#ifndef ARRAYSIZE #define ARRAYSIZE(x) (sizeof(x) / sizeof(*x)) +#endif /* ifndef ARRAYSIZE */ /* Memory barriers */ #define rmb() __asm__ __volatile__("" ::: "memory") #define wmb() __sync_synchronize() +/* TEMP_FAILURE_RETRY, but for all OSes */ +#ifndef TEMP_FAILURE_RETRY +#define TEMP_FAILURE_RETRY(exp) \ + ({ \ + typeof(exp) _rc; \ + do { \ + _rc = (exp); \ + } while (_rc == -1 && errno == EINTR); \ + _rc; \ + }) +#endif /* ifndef TEMP_FAILURE_RETRY */ + #endif /* ifndef _HF_COMMON_H_ */ diff --git a/libcommon/files.c b/libhfcommon/files.c index 388b9f47..7dab9920 100644 --- a/libcommon/files.c +++ b/libhfcommon/files.c @@ -21,8 +21,7 @@ * */ -#include "files.h" -#include "common.h" +#include "libhfcommon/files.h" #include <dirent.h> #include <errno.h> @@ -41,8 +40,9 @@ #include <sys/types.h> #include <unistd.h> -#include "log.h" -#include "util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" ssize_t files_readFileToBufMax(char* fileName, uint8_t* buf, size_t fileMaxSz) { int fd = open(fileName, O_RDONLY | O_CLOEXEC); diff --git a/libcommon/files.h b/libhfcommon/files.h index 4976c236..674941fc 100644 --- a/libcommon/files.h +++ b/libhfcommon/files.h @@ -21,11 +21,12 @@ * */ -#ifndef _HF_FILES_H_ -#define _HF_FILES_H_ +#ifndef _HF_COMMON_FILES_H_ +#define _HF_COMMON_FILES_H_ #include "common.h" +#include <stdbool.h> #include <stdint.h> #include <unistd.h> @@ -63,4 +64,4 @@ extern bool files_readPidFromFile(const char* fileName, pid_t* pidPtr); extern size_t files_parseSymbolFilter(const char* inFIle, char*** filterList); -#endif +#endif /* ifndef HF_COMMON_FILES */ diff --git a/libcommon/log.c b/libhfcommon/log.c index 471d772c..2e627728 100644 --- a/libcommon/log.c +++ b/libhfcommon/log.c @@ -19,8 +19,7 @@ */ -#include "log.h" -#include "common.h" +#include "libhfcommon/log.h" #include <errno.h> #include <fcntl.h> @@ -36,7 +35,8 @@ #include <time.h> #include <unistd.h> -#include "util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/util.h" #if defined(_HF_ARCH_LINUX) #include <sys/syscall.h> diff --git a/libcommon/log.h b/libhfcommon/log.h index a41255a8..a6c8706d 100644 --- a/libcommon/log.h +++ b/libhfcommon/log.h @@ -19,15 +19,12 @@ * */ -#ifndef _HF_LOG_H_ -#define _HF_LOG_H_ +#ifndef _HF_COMMON_LOG_H_ +#define _HF_COMMON_LOG_H_ -#include <getopt.h> #include <pthread.h> #include <stdbool.h> -#include "common.h" - enum llevel_t { FATAL = 0, ERROR, WARNING, INFO, DEBUG, HELP, HELP_BOLD }; extern enum llevel_t log_level; @@ -92,4 +89,4 @@ extern pthread_mutex_t* logMutexGet(void); void logMutexReset(void); -#endif /* _HF_LOG_H_ */ +#endif /* ifndef _HF_COMMON_LOG_H_ */ diff --git a/libcommon/ns.c b/libhfcommon/ns.c index cbfcb745..25c25f90 100644 --- a/libcommon/ns.c +++ b/libhfcommon/ns.c @@ -21,11 +21,11 @@ * */ -#include "ns.h" -#include "common.h" +#include "libhfcommon/ns.h" -#include "files.h" -#include "log.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" #if defined(_HF_ARCH_LINUX) diff --git a/libcommon/ns.h b/libhfcommon/ns.h index 882f7547..882f7547 100644 --- a/libcommon/ns.h +++ b/libhfcommon/ns.h diff --git a/libcommon/util.c b/libhfcommon/util.c index b3ceb6ea..5745a4b2 100644 --- a/libcommon/util.c +++ b/libhfcommon/util.c @@ -21,8 +21,7 @@ * */ -#include "util.h" -#include "common.h" +#include "libhfcommon/util.h" #include <ctype.h> #include <fcntl.h> @@ -41,8 +40,9 @@ #include <time.h> #include <unistd.h> -#include "files.h" -#include "log.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" void* util_Malloc(size_t sz) { void* p = malloc(sz); diff --git a/libcommon/util.h b/libhfcommon/util.h index 76cacdb1..26fe6e66 100644 --- a/libcommon/util.h +++ b/libhfcommon/util.h @@ -21,8 +21,8 @@ * */ -#ifndef _HF_UTIL_H_ -#define _HF_UTIL_H_ +#ifndef _HF_COMMON_UTIL_H_ +#define _HF_COMMON_UTIL_H_ #include <pthread.h> #include <stdarg.h> @@ -122,4 +122,4 @@ extern size_t util_decodeCString(char* s); extern uint64_t util_CRC64(const uint8_t* buf, size_t len); extern uint64_t util_CRC64Rev(const uint8_t* buf, size_t len); -#endif +#endif /* ifndef _HF_COMMON_UTIL_H_ */ diff --git a/libnetdriver/netdriver.c b/libhfnetdriver/netdriver.c index 93bd1797..f096d679 100644 --- a/libnetdriver/netdriver.c +++ b/libhfnetdriver/netdriver.c @@ -13,40 +13,37 @@ #include <sched.h> #endif /* defined(_HF_ARCH_LINUX) */ -#include "libcommon/common.h" -#include "libcommon/log.h" -#include "libcommon/ns.h" +#include "libhfcommon/common.h" +#include "libhfcommon/log.h" +#include "libhfcommon/ns.h" #define HF_TCP_PORT_ENV "_HF_TCP_PORT" -static uint16_t tcp_port = 8080; - -int argc_server = 0; -char **argv_server = NULL; - -static void *netDriver_getSymbol(const char *func) { - dlerror(); /* Clear existing errors */ - void *f = dlsym(RTLD_DEFAULT, func); - char *error = dlerror(); - if (f == NULL && error != NULL) { - LOG_D("Couldn't find function '%s': %s", func, error); - return NULL; - } - return f; -} +static struct { + uint16_t tcp_port; + int argc_server; + char **argv_server; +} hfnd_globals = { + .tcp_port = 8080, + .argc_server = 0, + .argv_server = NULL, +}; static void *netDriver_mainProgram(void *unused UNUSED) { - int (*f)(int argc, char **argv) = netDriver_getSymbol("fuzzing_main"); - if (f == NULL) { - /* FIXME: This can find libfuzzer's main() as well */ - f = netDriver_getSymbol("main"); - } - if (f == NULL) { - LOG_F("Couldn't find symbol address for the 'fuzzing_main' or 'main' functions"); - } - int ret = f(argc_server, argv_server); - LOG_I("Honggfuzz Net Driver (pid=%d): original main() function exited with: %d", (int)getpid(), - ret); + __attribute__((weak)) int HonggfuzzNetDriver_main(int argc, char **argv); + __attribute__((weak)) int _Z23HonggfuzzNetDriver_mainiPPc( + int argc, char **argv); /* C++ version */ + + int ret = 0; + if (HonggfuzzNetDriver_main) { + ret = HonggfuzzNetDriver_main(hfnd_globals.argc_server, hfnd_globals.argv_server); + } else if (_Z23HonggfuzzNetDriver_mainiPPc) { + ret = _Z23HonggfuzzNetDriver_mainiPPc(hfnd_globals.argc_server, hfnd_globals.argv_server); + } else { + LOG_F("'int HonggfuzzNetDriver_main(int argc, char **argv)' wasn't defined in the code"); + } + LOG_I("Honggfuzz Net Driver (pid=%d): HonggfuzzNetDriver_main() function exited with: %d", + (int)getpid(), ret); _exit(ret); } @@ -58,7 +55,9 @@ static void netDriver_startOriginalProgramInThread(void) { pthread_attr_setstacksize(&attr, 1024 * 1024 * 8); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); - pthread_create(&t, &attr, netDriver_mainProgram, NULL); + if (pthread_create(&t, &attr, netDriver_mainProgram, NULL) != 0) { + PLOG_F("Couldn't create the 'netDriver_mainProgram' thread"); + } } static void netDriver_initNs(void) { @@ -96,10 +95,7 @@ int netDriver_sockConn(uint16_t portno) { saddr.sin_family = AF_INET; saddr.sin_port = htons(portno); saddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); - while (connect(sock, (const struct sockaddr *)&saddr, sizeof(saddr)) == -1) { - if (errno == EINTR) { - continue; - } + if (TEMP_FAILURE_RETRY(connect(sock, (const struct sockaddr *)&saddr, sizeof(saddr))) == -1) { PLOG_W("connect('127.0.0.1:%" PRIu16 ")", portno); return -1; } @@ -114,9 +110,24 @@ int netDriver_sockConn(uint16_t portno) { __attribute__((weak)) uint16_t HonggfuzzNetDriverPort(int argc UNUSED, char **argv UNUSED) { const char *port_str = getenv(HF_TCP_PORT_ENV); if (port_str == NULL) { - return tcp_port; + return hfnd_globals.tcp_port; + } + errno = 0; + signed long portsl = strtol(port_str, NULL, 0); + if (errno != 0) { + PLOG_F("Couldn't convert '%s'='%s' to a number", HF_TCP_PORT_ENV, port_str); + } + + if (portsl < 1) { + LOG_F( + "Specified TCP port '%s'='%s' (%ld) cannot be < 1", HF_TCP_PORT_ENV, port_str, portsl); + } + if (portsl > 65535) { + LOG_F("Specified TCP port '%s'='%s' (%ld) cannot be > 65535", HF_TCP_PORT_ENV, port_str, + portsl); } - return (uint16_t)atoi(port_str); + + return (uint16_t)portsl; } /* @@ -133,8 +144,6 @@ __attribute__((weak)) int HonggfuzzNetDriverArgsForServer( int argc, char **argv, int *server_argc, char ***server_argv) { for (int i = 0; i < argc; i++) { if (strcmp(argv[i], "--") == 0) { - argv[i] = argv[0]; /* Change '--' into argv[0], as it's the new argv[0] for the TCP - server program */ *server_argc = argc - i; *server_argv = &argv[i]; return argc - i; @@ -171,33 +180,33 @@ void netDriver_waitForServerReady(uint16_t portno) { } int LLVMFuzzerInitialize(int *argc, char ***argv) { - tcp_port = HonggfuzzNetDriverPort(*argc, *argv); - *argc = HonggfuzzNetDriverArgsForServer(*argc, *argv, &argc_server, &argv_server); + hfnd_globals.tcp_port = HonggfuzzNetDriverPort(*argc, *argv); + *argc = HonggfuzzNetDriverArgsForServer( + *argc, *argv, &hfnd_globals.argc_server, &hfnd_globals.argv_server); - LOG_I("Honggfuzz Net Driver (pid=%d): TCP port:%d will be used", (int)getpid(), tcp_port); + LOG_I("Honggfuzz Net Driver (pid=%d): TCP port:%d will be used", (int)getpid(), + hfnd_globals.tcp_port); + netDriver_initNs(); netDriver_startOriginalProgramInThread(); - netDriver_waitForServerReady(tcp_port); + netDriver_waitForServerReady(hfnd_globals.tcp_port); return 0; } int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len) { - int sock = netDriver_sockConn(tcp_port); + int sock = netDriver_sockConn(hfnd_globals.tcp_port); if (sock == -1) { LOG_F("Couldn't connect to the server TCP port"); } - while (send(sock, buf, len, MSG_NOSIGNAL) == -1) { - if (errno == EINTR) { - continue; - } + if (TEMP_FAILURE_RETRY(send(sock, buf, len, MSG_NOSIGNAL)) == -1) { PLOG_F("send(sock=%d, len=%zu) failed", sock, len); } /* - * Indicate the end of input for the TCP server + * Indicate the end of input to the TCP server * - * Well-behaved TCP servers should process the input at this point, and close the TCP connection + * Well-behaved TCP servers should process the input, or close the TCP connection at this point */ - if (shutdown(sock, SHUT_WR)) { + if (TEMP_FAILURE_RETRY(shutdown(sock, SHUT_WR)) == -1) { if (errno == ENOTCONN) { close(sock); return 0; @@ -210,29 +219,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t len) { * TCP server to drop the input data, instead of processing it */ static char b[1024 * 1024 * 8]; - while (recv(sock, b, sizeof(b), MSG_WAITALL) > 0) + while (TEMP_FAILURE_RETRY(recv(sock, b, sizeof(b), MSG_WAITALL)) > 0) ; close(sock); return 0; } - -/* Use -Wl,--wrap=main to redirect invocation of the whole program from main() to __wrap_main() */ -int __wrap_main(int argc, char **argv) { - netDriver_initNs(); - - int (*f1)(int argc, char **argv) = netDriver_getSymbol("HonggfuzzMain"); - int (*f2)(int *argc, char ***argv, void *callback) = - netDriver_getSymbol("_ZN6fuzzer12FuzzerDriverEPiPPPcPFiPKhmE"); - - if (f1) { - return f1(argc, argv); - } - if (f2) { - return f2(&argc, &argv, LLVMFuzzerTestOneInput); - } - - LOG_F("Couldn't find Honggfuzz nor LibFuzzer entry points"); - return 0; -} diff --git a/libhfnetdriver/netdriver.h b/libhfnetdriver/netdriver.h new file mode 100644 index 00000000..c0976ec1 --- /dev/null +++ b/libhfnetdriver/netdriver.h @@ -0,0 +1,14 @@ +#ifndef _HF_LIBHFNETDRIVER_NETDRIVER +#define _HF_LIBHFNETDRIVER_NETDRIVER + +#ifdef __cplusplus +extern "C" { +#endif /* ifdef __cplusplus */ + +int HonggfuzzNetDriver_main(int argc, char **argv); + +#ifdef __cplusplus +} +#endif /* ifdef __cplusplus */ + +#endif /* ifndef _HF_LIBHFNETDRIVER_NETDRIVER */ diff --git a/libhfuzz/instrument.c b/libhfuzz/instrument.c index d8d17f37..ad3800f9 100644 --- a/libhfuzz/instrument.c +++ b/libhfuzz/instrument.c @@ -16,9 +16,9 @@ #include <unistd.h> #include "honggfuzz.h" -#include "libcommon/common.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" int hfuzz_module_instrument = 0; diff --git a/libhfuzz/linux.c b/libhfuzz/linux.c index 93ecc353..c211130e 100644 --- a/libhfuzz/linux.c +++ b/libhfuzz/linux.c @@ -1,9 +1,9 @@ -#include "libcommon/common.h" +#include "libhfcommon/common.h" #include "libhfuzz.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/ns.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/ns.h" #if defined(_HF_ARCH_LINUX) diff --git a/libhfuzz/persistent.c b/libhfuzz/persistent.c index 61d103f3..7b2304b8 100644 --- a/libhfuzz/persistent.c +++ b/libhfuzz/persistent.c @@ -14,9 +14,9 @@ #include <unistd.h> #include "honggfuzz.h" -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" __attribute__((weak)) int LLVMFuzzerTestOneInput(const uint8_t* buf, size_t len); __attribute__((weak)) int LLVMFuzzerInitialize(int* argc UNUSED, char*** argv UNUSED) { return 0; } diff --git a/linux/arch.c b/linux/arch.c index 9fbbd672..89775f6f 100644 --- a/linux/arch.c +++ b/linux/arch.c @@ -47,11 +47,11 @@ #include <unistd.h> #include "fuzz.h" -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/ns.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/ns.h" +#include "libhfcommon/util.h" #include "linux/perf.h" #include "linux/trace.h" #include "sancov.h" diff --git a/linux/bfd.c b/linux/bfd.c index 48bf7078..07a905ea 100644 --- a/linux/bfd.c +++ b/linux/bfd.c @@ -36,10 +36,10 @@ #include <unistd.h> #include "honggfuzz.h" -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" typedef struct { bfd* bfdh; diff --git a/linux/perf.c b/linux/perf.c index b27e1f46..410f95ec 100644 --- a/linux/perf.c +++ b/linux/perf.c @@ -40,10 +40,10 @@ #include <sys/syscall.h> #include <unistd.h> -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" #include "pt.h" #define _HF_PERF_MAP_SZ (1024 * 512) @@ -21,13 +21,13 @@ * */ -#include "libcommon/common.h" +#include "libhfcommon/common.h" #include <inttypes.h> #include <linux/perf_event.h> -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" #include "pt.h" #ifdef _HF_LINUX_INTEL_PT_LIB diff --git a/linux/trace.c b/linux/trace.c index e67a46df..eebec962 100644 --- a/linux/trace.c +++ b/linux/trace.c @@ -48,10 +48,10 @@ #include <time.h> #include <unistd.h> -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" #include "linux/bfd.h" #include "linux/unwind.h" #include "sancov.h" diff --git a/linux/unwind.c b/linux/unwind.c index 9519b4de..e7021aa0 100644 --- a/linux/unwind.c +++ b/linux/unwind.c @@ -30,8 +30,8 @@ #include <string.h> #include "honggfuzz.h" -#include "libcommon/common.h" -#include "libcommon/log.h" +#include "libhfcommon/common.h" +#include "libhfcommon/log.h" /* * WARNING: Ensure that _UPT-info structs are not shared between threads @@ -43,10 +43,10 @@ #include <unistd.h> #include "honggfuzz.h" -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" #include "sancov.h" #include "subproc.h" @@ -32,9 +32,9 @@ #include <sys/mman.h> #include <unistd.h> -#include "libcommon/common.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" static inline void mangle_Overwrite(run_t* run, const uint8_t* src, size_t off, size_t sz) { size_t maxToCopy = run->dynamicFileSz - off; diff --git a/posix/arch.c b/posix/arch.c index 578d9bdc..18493ced 100644 --- a/posix/arch.c +++ b/posix/arch.c @@ -41,10 +41,10 @@ #include <unistd.h> #include "fuzz.h" -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" #include "sancov.h" #include "subproc.h" @@ -29,9 +29,9 @@ #include <sys/stat.h> #include <sys/types.h> -#include "libcommon/common.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" static int reportFD = -1; @@ -50,10 +50,10 @@ #include <sys/stat.h> #include <sys/types.h> -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" #include "sanitizers.h" /* sancov files magic values */ diff --git a/sanitizers.c b/sanitizers.c index 021c95c3..301ef1f0 100644 --- a/sanitizers.c +++ b/sanitizers.c @@ -10,10 +10,10 @@ #include <sys/stat.h> #include <sys/types.h> -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" /* Stringify */ #define XSTR(x) #x @@ -98,7 +98,7 @@ #define kSAN_REGULAR \ "abort_on_error=1:handle_segv=0:handle_sigbus=0:handle_abort=0:" \ "handle_sigill=0:handle_sigfpe=0:allocator_may_return_null=1:" \ - "symbolize=1:detect_leaks=0:disable_coredump=0:soft_rss_limit_mb=0" + "symbolize=1:detect_leaks=0:disable_coredump=0" /* * If the program ends with a signal that ASan does not handle (or can not @@ -41,10 +41,10 @@ #include "arch.h" #include "fuzz.h" -#include "libcommon/common.h" -#include "libcommon/files.h" -#include "libcommon/log.h" -#include "libcommon/util.h" +#include "libhfcommon/common.h" +#include "libhfcommon/files.h" +#include "libhfcommon/log.h" +#include "libhfcommon/util.h" extern char** environ; |