From 28fd9716086f781f548423ea00e0e441e97037bc Mon Sep 17 00:00:00 2001 From: fanquake Date: Mon, 5 Jun 2023 16:54:23 +0100 Subject: [PATCH 1/5] build: fix compiler version in build output Currently, if I build like with Clang, I'll get: ```bash make LLVM_CONFIG=llvm-config-15 CC=clang-15 CXX=clang++-15 [+] Everything seems to be working, ready to compile. (gcc version 12.1.0 (Ubuntu 12.1.0-2ubuntu1~22.04) ) clang-15 -O2 -D_FORTIFY_SOURCE=1 .... ``` Which is somewhat confusing. Fix this, and in a way that still outputs the correct version info for Clang and GCC. Use `--version`, and pick the first line, as that is where they are consistent in output. `clang -v` gives the version first, whereas `gcc -v` gives the version on the last line. We switch to using $(CC), otherwise we also get incorrect output, and dropping CCVER altogether, given this is it's only use. --- GNUmakefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/GNUmakefile b/GNUmakefile index 715e7386..55676d97 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -291,8 +291,6 @@ ifeq "$(shell command -v svn >/dev/null && svn proplist . 2>/dev/null && echo 1 IN_REPO=1 endif -CCVER=$(shell cc -v 2>&1|tail -n 1) - ifeq "$(shell echo 'int main() { return 0;}' | $(CC) $(CFLAGS) -fsanitize=address -x c - -o .test2 2>/dev/null && echo 1 || echo 0 ; rm -f .test2 )" "1" ASAN_CFLAGS=-fsanitize=address -fstack-protector-all -fno-omit-frame-pointer -DASAN_BUILD ASAN_LDFLAGS=-fsanitize=address -fstack-protector-all -fno-omit-frame-pointer @@ -439,7 +437,7 @@ endif .PHONY: ready ready: - @echo "[+] Everything seems to be working, ready to compile. ($(CCVER))" + @echo "[+] Everything seems to be working, ready to compile. ($(shell $(CC) --version 2>&1|head -n 1))" afl-as: src/afl-as.c include/afl-as.h $(COMM_HDR) | test_x86 $(CC) $(CFLAGS) src/$@.c -o $@ $(LDFLAGS) From abc26a932a187f4fb84ac178c44326c9e46efca5 Mon Sep 17 00:00:00 2001 From: cocochpie Date: Mon, 5 Jun 2023 20:33:33 +0000 Subject: [PATCH 2/5] Revive f567a89dae29afb2e421d649f0e750e77913f08c --- instrumentation/SanitizerCoveragePCGUARD.so.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/instrumentation/SanitizerCoveragePCGUARD.so.cc b/instrumentation/SanitizerCoveragePCGUARD.so.cc index 20f54b84..25851dda 100644 --- a/instrumentation/SanitizerCoveragePCGUARD.so.cc +++ b/instrumentation/SanitizerCoveragePCGUARD.so.cc @@ -20,6 +20,8 @@ #endif #if LLVM_VERSION_MAJOR < 17 #include "llvm/Analysis/EHPersonalities.h" +#else + #include "llvm/IR/EHPersonalities.h" #endif #include "llvm/Analysis/PostDominators.h" #if LLVM_VERSION_MAJOR < 15 @@ -31,8 +33,10 @@ #include "llvm/IR/DebugInfo.h" #endif #include "llvm/IR/Dominators.h" -#if LLVM_VERSION_MAJOR >= 17 +#if LLVM_VERSION_MAJOR < 17 #include "llvm/Analysis/EHPersonalities.h" +#else + #include "llvm/IR/EHPersonalities.h" #endif #include "llvm/IR/Function.h" #if LLVM_VERSION_MAJOR >= 16 From 9585f5cdfeb7b287ec8614a92f295127eba0a384 Mon Sep 17 00:00:00 2001 From: cocochpie Date: Tue, 6 Jun 2023 04:07:38 +0000 Subject: [PATCH 3/5] =?UTF-8?q?change=20the=20=E2=80=98#if=E2=80=99=20to?= =?UTF-8?q?=20>=3D=2017=20instead=20of=20<=2017?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- instrumentation/SanitizerCoveragePCGUARD.so.cc | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/instrumentation/SanitizerCoveragePCGUARD.so.cc b/instrumentation/SanitizerCoveragePCGUARD.so.cc index 25851dda..7171e7aa 100644 --- a/instrumentation/SanitizerCoveragePCGUARD.so.cc +++ b/instrumentation/SanitizerCoveragePCGUARD.so.cc @@ -18,11 +18,6 @@ #include "llvm/ADT/Triple.h" #endif #endif -#if LLVM_VERSION_MAJOR < 17 - #include "llvm/Analysis/EHPersonalities.h" -#else - #include "llvm/IR/EHPersonalities.h" -#endif #include "llvm/Analysis/PostDominators.h" #if LLVM_VERSION_MAJOR < 15 #include "llvm/IR/CFG.h" @@ -33,10 +28,10 @@ #include "llvm/IR/DebugInfo.h" #endif #include "llvm/IR/Dominators.h" -#if LLVM_VERSION_MAJOR < 17 - #include "llvm/Analysis/EHPersonalities.h" -#else +#if LLVM_VERSION_MAJOR >= 17 #include "llvm/IR/EHPersonalities.h" +#else + #include "llvm/Analysis/EHPersonalities.h" #endif #include "llvm/IR/Function.h" #if LLVM_VERSION_MAJOR >= 16 From 234d55ccd547b61839612cc068127dbceaf8a9ec Mon Sep 17 00:00:00 2001 From: fanquake Date: Tue, 6 Jun 2023 10:29:54 +0100 Subject: [PATCH 4/5] build: adjust LLVM development version check Adjust version check to only warn for LLVM 17.x and newer, which are the development versions. Otherwise we'll get: ```bash make LLVM_CONFIG=llvm-config-15 CC=clang-15 CXX=clang++-15 GNUmakefile.llvm:69: you are using an in-development llvm version - this might break llvm_mode! ``` for versions that are supported, and not in development. --- GNUmakefile.llvm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GNUmakefile.llvm b/GNUmakefile.llvm index 6c68f1f3..6ffac68f 100644 --- a/GNUmakefile.llvm +++ b/GNUmakefile.llvm @@ -46,7 +46,7 @@ LLVMVER = $(shell $(LLVM_CONFIG) --version 2>/dev/null | sed 's/git//' | sed 's LLVM_MAJOR = $(shell $(LLVM_CONFIG) --version 2>/dev/null | sed 's/\..*//' ) LLVM_MINOR = $(shell $(LLVM_CONFIG) --version 2>/dev/null | sed 's/.*\.//' | sed 's/git//' | sed 's/svn//' | sed 's/ .*//' ) LLVM_UNSUPPORTED = $(shell $(LLVM_CONFIG) --version 2>/dev/null | grep -E -q '^[0-2]\.|^3.[0-7]\.' && echo 1 || echo 0 ) -LLVM_TOO_NEW = $(shell $(LLVM_CONFIG) --version 2>/dev/null | grep -E -q '^1[5-9]' && echo 1 || echo 0 ) +LLVM_TOO_NEW = $(shell $(LLVM_CONFIG) --version 2>/dev/null | grep -E -q '^1[7-9]' && echo 1 || echo 0 ) LLVM_NEW_API = $(shell $(LLVM_CONFIG) --version 2>/dev/null | grep -E -q '^1[0-9]' && echo 1 || echo 0 ) LLVM_NEWER_API = $(shell $(LLVM_CONFIG) --version 2>/dev/null | grep -E -q '^1[6-9]' && echo 1 || echo 0 ) LLVM_13_OK = $(shell $(LLVM_CONFIG) --version 2>/dev/null | grep -E -q '^1[3-9]' && echo 1 || echo 0 ) From ee2cab73ac6c72095f781da979094f877291a1d6 Mon Sep 17 00:00:00 2001 From: vanhauser-thc Date: Tue, 6 Jun 2023 16:42:42 +0200 Subject: [PATCH 5/5] reduce false positive ci failures --- test/test-cmplog.c | 6 ++---- test/test-llvm.sh | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/test/test-cmplog.c b/test/test-cmplog.c index bd1b73e3..2ab579b0 100644 --- a/test/test-cmplog.c +++ b/test/test-cmplog.c @@ -8,16 +8,14 @@ int LLVMFuzzerTestOneInput(const uint8_t *buf, size_t i) { - if (i < 30) return -1; + if (i < 15) return -1; if (buf[0] != 'A') return 0; if (buf[1] != 'B') return 0; if (buf[2] != 'C') return 0; if (buf[3] != 'D') return 0; int *icmp = (int *)(buf + 4); if (*icmp != 0x69694141) return 0; - if (memcmp(buf + 8, "1234", 4) || memcmp(buf + 12, "EFGH", 4)) return 0; - if (strncmp(buf + 16, "IJKL", 4) == 0 && strcmp(buf + 20, "DEADBEEF") == 0) - abort(); + if (memcmp(buf + 8, "1234EF", 6) == 0) abort(); return 0; } diff --git a/test/test-llvm.sh b/test/test-llvm.sh index 714bda93..19fb7c1a 100755 --- a/test/test-llvm.sh +++ b/test/test-llvm.sh @@ -263,7 +263,7 @@ test -e ../afl-clang-fast -a -e ../split-switches-pass.so && { { mkdir -p in echo 00000000000000000000000000000000 > in/in - AFL_BENCH_UNTIL_CRASH=1 ../afl-fuzz -m none -V30 -i in -o out -c./test-cmplog -- ./test-c >>errors 2>&1 + AFL_BENCH_UNTIL_CRASH=1 ../afl-fuzz -l 3 -m none -V30 -i in -o out -c ./test-cmplog -- ./test-c >>errors 2>&1 } >>errors 2>&1 test -n "$( ls out/default/crashes/id:000000* out/default/hangs/id:000000* 2>/dev/null )" && { $ECHO "$GREEN[+] afl-fuzz is working correctly with llvm_mode cmplog"