diff --git a/fuzzers/inprocess/libfuzzer_libpng/Justfile b/fuzzers/inprocess/libfuzzer_libpng/Justfile index 300ebd626a..10c6446ed0 100644 --- a/fuzzers/inprocess/libfuzzer_libpng/Justfile +++ b/fuzzers/inprocess/libfuzzer_libpng/Justfile @@ -1,117 +1,40 @@ +import "../../../just/libafl-cc-libpng.just" + FUZZER_NAME := 'fuzzer_libpng' -PROJECT_DIR := absolute_path(".") -PROFILE := env("PROFILE", "release") -PROFILE_DIR := if PROFILE == "release" { "release" } else if PROFILE == "dev" { "debug" } else { "debug" } -CARGO_TARGET_DIR := env("CARGO_TARGET_DIR", "target") -FUZZER := PROJECT_DIR / CARGO_TARGET_DIR / PROFILE_DIR / FUZZER_NAME -LIBAFL_CC := PROJECT_DIR / CARGO_TARGET_DIR / PROFILE_DIR / "libafl_cc" -LIBAFL_CXX := PROJECT_DIR / CARGO_TARGET_DIR / PROFILE_DIR / "libafl_cxx" +[unix] +cc feat: + cargo build --profile {{PROFILE}} --features="{{feat}}" -alias cc := cxx +[unix] +cxx feat: + cargo build --profile {{PROFILE}} --features="{{feat}}" -[linux] -[macos] -libpng: - #!/bin/bash - if [ ! -f v1.6.37.tar.gz ]; then - wget https://github.com/glennrp/libpng/archive/refs/tags/v1.6.37.tar.gz - fi - tar -xvf v1.6.37.tar.gz +[unix] +lib feat: (libpng feat) (cxx feat) -[windows] -libpng: - echo "Unsupported on this platform" +# Feat is either nothing or "crash" +[unix] +fuzzer feat="": (lib feat) (cxx feat) + {{LIBAFL_CXX}} {{PROJECT_DIR}}/harness.cc \ + "{{LIBPNG_BUILD}}/.libs/libpng16.a" \ + "{{ZLIB_BUILD}}/libz.a" \ + -I"{{LIBPNG_INCLUDE}}" \ + -I"{{LIBPNG_BUILD}}" \ + -I"{{ZLIB_INCLUDE}}" \ + -L"{{ZLIB_LIB}}" \ + -o {{FUZZER_NAME}} \ + -lm -lz -[linux] -[macos] -cxx: - cargo build --profile {{PROFILE}} - -[windows] -cxx: - echo "Unsupported on this platform" - -[linux] -[macos] -crash_cxx: - cargo build --profile {{PROFILE}} --features=crash - -[windows] -crash_cxx: - echo "Unsupported on this platform" - -[linux] -[macos] -lib: libpng cxx - #!/bin/bash - cd libpng-1.6.37 && ./configure --enable-shared=no --with-pic=yes --enable-hardware-optimizations=yes - cd {{PROJECT_DIR}} - make -C libpng-1.6.37 CC="{{LIBAFL_CC}}" CXX="{{LIBAFL_CXX}}" - -[windows] -lib: - echo "Unsupported on this platform" - -[linux] -[macos] -crash_lib: libpng crash_cxx - #!/bin/bash - cd libpng-1.6.37 && ./configure --enable-shared=no --with-pic=yes --enable-hardware-optimizations=yes - cd {{PROJECT_DIR}} - make -C libpng-1.6.37 CC="{{LIBAFL_CC}}" CXX="{{LIBAFL_CXX}}" - -[windows] -crash_lib: - echo "Unsupported on this platform" - -[linux] -[macos] -fuzzer: lib cxx - pwd - {{LIBAFL_CXX}} {{PROJECT_DIR}}/harness.cc {{PROJECT_DIR}}/libpng-1.6.37/.libs/libpng16.a -I {{PROJECT_DIR}}/libpng-1.6.37/ -o {{FUZZER_NAME}} -lm -lz - -[windows] -fuzzer: - echo "Unsupported on this platform" - -[linux] -[macos] -crash_fuzzer: crash_lib crash_cxx - {{LIBAFL_CXX}} {{PROJECT_DIR}}/harness.cc {{PROJECT_DIR}}/libpng-1.6.37/.libs/libpng16.a -I {{PROJECT_DIR}}/libpng-1.6.37/ -o {{FUZZER_NAME}} -lm -lz - -[windows] -crash_fuzzer: - echo "Unsupported on this platform" - - -[linux] -[macos] -run: fuzzer +# Feat is either nothing or "crash" +[unix] +run feat="": (fuzzer feat) #!/bin/bash ./{{FUZZER_NAME}} & sleep 0.2 ./{{FUZZER_NAME}} 2>/dev/null -[windows] -run: fuzzer - echo "Unsupported on this platform" - -[linux] -[macos] -crash: crash_fuzzer - #!/bin/bash - ./{{FUZZER_NAME}} & - sleep 0.2 - ./{{FUZZER_NAME}} 2>/dev/null - -[windows] -crash: fuzzer - echo "Unsupported on this platform" - - -[linux] -[macos] +[unix] test: fuzzer #!/bin/bash rm -rf libafl_unix_shmem_server || true @@ -125,12 +48,7 @@ test: fuzzer exit 1 fi -[windows] -test: fuzzer - echo "Unsupported on this platform" - clean: rm -rf {{FUZZER_NAME}} make -C libpng-1.6.37 clean || true - cargo clean - + cargo clean \ No newline at end of file diff --git a/just/libafl-cc-libpng.just b/just/libafl-cc-libpng.just new file mode 100644 index 0000000000..da253ef241 --- /dev/null +++ b/just/libafl-cc-libpng.just @@ -0,0 +1,60 @@ +import "libafl-cc.just" + +OPTIMIZATIONS := env("OPTIMIZATIONS", "yes") + +LIBPNG_ROOT := DEPS_DIR / "libpng-1.6.37" +LIBPNG_BUILD := TARGET_DIR / "build-png" +LIBPNG_INCLUDE := LIBPNG_ROOT + +ZLIB_ROOT := DEPS_DIR / "zlib-1.2.13" +ZLIB_BUILD := TARGET_DIR / "build-zlib" +ZLIB_INCLUDE := ZLIB_BUILD / "zlib" / "include" +ZLIB_LIB := ZLIB_BUILD / "zlib" / "lib" + +DEPS_DIR := TARGET_DIR / "deps" + +[unix] +target_dir: + mkdir -p {{ TARGET_DIR }} + +[unix] +deps_dir: + mkdir -p {{ DEPS_DIR }} + +[unix] +zlib_wget: deps_dir + wget -O "{{ DEPS_DIR }}/zlib-1.2.13.tar.gz" https://zlib.net/fossils/zlib-1.2.13.tar.gz + + tar zxvf {{ DEPS_DIR }}/zlib-1.2.13.tar.gz -C {{ DEPS_DIR }} + +[unix] +zlib feat: zlib_wget (cc feat) + rm -rf {{ ZLIB_BUILD }} + mkdir {{ ZLIB_BUILD }} + + cd {{ ZLIB_BUILD }} && CC={{ LIBAFL_CC }} {{ ZLIB_ROOT }}/configure --prefix=./zlib + + make -j -C {{ ZLIB_BUILD }} install + +[unix] +libpng_wget: deps_dir + wget -O "{{ DEPS_DIR }}/v1.6.37.tar.gz" https://github.com/glennrp/libpng/archive/refs/tags/v1.6.37.tar.gz + + tar -xvf "{{ DEPS_DIR }}/v1.6.37.tar.gz" -C {{ DEPS_DIR }} + + rm -rf {{ LIBPNG_BUILD }} + mkdir {{ LIBPNG_BUILD }} + +[unix] +libpng feat: (zlib feat) libpng_wget (cc feat) + cd {{ LIBPNG_BUILD }}/ && \ + CC="{{LIBAFL_CC}}" \ + CFLAGS="-I{{ ZLIB_INCLUDE }}" \ + CPPFLAGS="-I{{ ZLIB_INCLUDE }}" \ + LDFLAGS="-L{{ ZLIB_LIB }}" \ + {{ DEPS_DIR }}/libpng-1.6.37/configure \ + --enable-shared=no \ + --with-pic=yes \ + --enable-hardware-optimizations={{ OPTIMIZATIONS }} + + make -j -C {{ LIBPNG_BUILD }} diff --git a/just/libafl-cc.just b/just/libafl-cc.just new file mode 100644 index 0000000000..9058c2aa5e --- /dev/null +++ b/just/libafl-cc.just @@ -0,0 +1,4 @@ +import "libafl.just" + +LIBAFL_CC := BUILD_DIR / "libafl_cc" +LIBAFL_CXX := BUILD_DIR / "libafl_cxx" diff --git a/just/libafl-qemu-libpng.just b/just/libafl-qemu-libpng.just index 6a23a5d645..e68a2cca23 100644 --- a/just/libafl-qemu-libpng.just +++ b/just/libafl-qemu-libpng.just @@ -79,6 +79,6 @@ libpng: arch_dir zlib libpng_wget --enable-shared=no \ --with-pic=yes \ --enable-hardware-optimizations={{ OPTIMIZATIONS }} \ - --host={{ ARCH }} \ + --host={{ ARCH }} make -j -C {{ TARGET_DIR }}/build-png/ \ No newline at end of file diff --git a/just/libafl.just b/just/libafl.just index 2bf9258c56..f11e5d1534 100644 --- a/just/libafl.just +++ b/just/libafl.just @@ -12,11 +12,13 @@ # - `FUZZER`: Executable path. PROFILE := env("PROFILE", "release") +FUZZER_EXTENSION := if os_family() == "windows" { ".exe" } else { "" } +FUZZER := BUILD_DIR / FUZZER_NAME + FUZZER_EXTENSION + +PROJECT_DIR := absolute_path(".") PROFILE_DIR := if PROFILE == "dev" { "debug" } else { "release" } TARGET_DIR := absolute_path(env("TARGET_DIR", "target")) BUILD_DIR := TARGET_DIR / PROFILE_DIR -FUZZER_EXTENSION := if os_family() == "windows" { ".exe" } else { "" } -FUZZER := BUILD_DIR / FUZZER_NAME + FUZZER_EXTENSION JUSTHASHES := ".justhashes" diff --git a/libafl_targets/src/forkserver.c b/libafl_targets/src/forkserver.c index e3f8f831b1..f5d16d4bc5 100644 --- a/libafl_targets/src/forkserver.c +++ b/libafl_targets/src/forkserver.c @@ -272,8 +272,7 @@ void __afl_start_forkserver(void) { uint32_t len = (__token_stop - __token_start), offset = 0; if (write(FORKSRV_FD + 1, &len, 4) != 4) { - write(2, "Error: could not send autotokens len\n", - strlen("Error: could not send autotokens len\n")); + fprintf(stderr, "Error: could not send autotokens len\n"); _exit(1); }