From f25ad9c54757eddb2b1040ffe75f154a85a3388c Mon Sep 17 00:00:00 2001 From: Sigmanificient Date: Sun, 21 Apr 2024 17:50:58 +0200 Subject: [PATCH 1/4] aflplusplus: 4.10c -> 4.20c --- pkgs/tools/security/aflplusplus/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/security/aflplusplus/default.nix b/pkgs/tools/security/aflplusplus/default.nix index 5d4b761df334a..9351a1c8f5c3a 100644 --- a/pkgs/tools/security/aflplusplus/default.nix +++ b/pkgs/tools/security/aflplusplus/default.nix @@ -19,13 +19,13 @@ let libtokencap = callPackage ./libtokencap.nix { inherit aflplusplus; }; aflplusplus = stdenvNoCC.mkDerivation rec { pname = "aflplusplus"; - version = "4.10c"; + version = "4.20c"; src = fetchFromGitHub { owner = "AFLplusplus"; repo = "AFLplusplus"; rev = "v${version}"; - sha256 = "sha256-elghcBw2tIttQo7bkMFRCx8iNqxwY0NCz0343wc8hWA="; + sha256 = "sha256-bS4Zxd2CX8m6zxO/izJi7Cj34260mOaU6GWjEj+xEU8="; }; enableParallelBuilding = true; From 6e3fb85a49b74457cb983c8db02e7042b9ffebc7 Mon Sep 17 00:00:00 2001 From: Rick van Schijndel Date: Wed, 10 Jul 2024 08:10:50 +0200 Subject: [PATCH 2/4] aflplusplus: 4.20c: update qemuafl to match 4.20c --- pkgs/tools/security/aflplusplus/qemu.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/security/aflplusplus/qemu.nix b/pkgs/tools/security/aflplusplus/qemu.nix index f412b8e404994..abf85697c03bd 100644 --- a/pkgs/tools/security/aflplusplus/qemu.nix +++ b/pkgs/tools/security/aflplusplus/qemu.nix @@ -24,8 +24,9 @@ stdenv.mkDerivation { src = fetchFromGitHub { owner = "AFLplusplus"; repo = "qemuafl"; - rev = "a1321713c7502c152dd7527555e0f8a800d55225"; - sha256 = "sha256-HLlOHqT2vrHjHyu4n83IzVzKv9ErinephLLev1E10nM="; + # rev origin: https://github.com/AFLplusplus/AFLplusplus/commits/stable/qemu_mode/QEMUAFL_VERSION + rev = "40033af00c4c5de172ed4fe60c21b9edbd2c189d"; + sha256 = "sha256-oK0DLJjXDiQuRlbaNOurvw5vlr9HEeOobNywiFTq7xg="; fetchSubmodules = true; }; From 33ce82fab45db0efb65a141d0686918119a4bdc1 Mon Sep 17 00:00:00 2001 From: Sigmanificient Date: Mon, 15 Jul 2024 23:32:22 +0200 Subject: [PATCH 3/4] aflplusplus: modernize - Update depreciated `--replace` by `replace-fail` - Replace `$(out)` with placeholder - Change `sha` attributes to `hash` --- pkgs/tools/security/aflplusplus/default.nix | 50 ++++++++++--------- .../security/aflplusplus/libdislocator.nix | 8 +-- .../security/aflplusplus/libtokencap.nix | 6 +-- pkgs/tools/security/aflplusplus/qemu.nix | 8 +-- 4 files changed, 37 insertions(+), 35 deletions(-) diff --git a/pkgs/tools/security/aflplusplus/default.nix b/pkgs/tools/security/aflplusplus/default.nix index 9351a1c8f5c3a..09d2d20d0faff 100644 --- a/pkgs/tools/security/aflplusplus/default.nix +++ b/pkgs/tools/security/aflplusplus/default.nix @@ -24,9 +24,10 @@ let src = fetchFromGitHub { owner = "AFLplusplus"; repo = "AFLplusplus"; - rev = "v${version}"; - sha256 = "sha256-bS4Zxd2CX8m6zxO/izJi7Cj34260mOaU6GWjEj+xEU8="; + rev = "refs/tags/v${version}"; + hash = "sha256-bS4Zxd2CX8m6zxO/izJi7Cj34260mOaU6GWjEj+xEU8="; }; + enableParallelBuilding = true; # Note: libcgroup isn't needed for building, just for the afl-cgroup @@ -48,22 +49,22 @@ let # Prevents afl-gcc picking up any (possibly incorrect) gcc from the path. # Replace LLVM_BINDIR with a non-existing path to give a hard error when it's used. substituteInPlace src/afl-cc.c \ - --replace "CLANGPP_BIN" '"${clang}/bin/clang++"' \ - --replace "CLANG_BIN" '"${clang}/bin/clang"' \ - --replace '"gcc"' '"${gcc}/bin/gcc"' \ - --replace '"g++"' '"${gcc}/bin/g++"' \ - --replace 'getenv("AFL_PATH")' "(getenv(\"AFL_PATH\") ? getenv(\"AFL_PATH\") : \"$out/lib/afl\")" + --replace-fail "CLANGPP_BIN" '"${clang}/bin/clang++"' \ + --replace-fail "CLANG_BIN" '"${clang}/bin/clang"' \ + --replace-fail '"gcc"' '"${gcc}/bin/gcc"' \ + --replace-fail '"g++"' '"${gcc}/bin/g++"' \ + --replace-fail 'getenv("AFL_PATH")' "(getenv(\"AFL_PATH\") ? getenv(\"AFL_PATH\") : \"$out/lib/afl\")" substituteInPlace src/afl-ld-lto.c \ - --replace 'LLVM_BINDIR' '"/nixpkgs-patched-does-not-exist"' + --replace-fail 'LLVM_BINDIR' '"/nixpkgs-patched-does-not-exist"' # Remove the rest of the line sed -i 's|LLVM_BINDIR = .*|LLVM_BINDIR = |' utils/aflpp_driver/GNUmakefile substituteInPlace utils/aflpp_driver/GNUmakefile \ - --replace 'LLVM_BINDIR = ' 'LLVM_BINDIR = ${clang}/bin/' + --replace-fail 'LLVM_BINDIR = ' 'LLVM_BINDIR = ${clang}/bin/' substituteInPlace GNUmakefile.llvm \ - --replace "\$(LLVM_BINDIR)/clang" "${clang}/bin/clang" + --replace-fail "\$(LLVM_BINDIR)/clang" "${clang}/bin/clang" ''; env.NIX_CFLAGS_COMPILE = toString [ @@ -72,9 +73,10 @@ let ]; makeFlags = [ - "PREFIX=$(out)" + "PREFIX=${placeholder "out"}" "USE_BINDIR=0" ]; + buildPhase = '' runHook preBuild @@ -109,15 +111,15 @@ let cp utils/asan_cgroups/limit_memory.sh $out/bin/afl-cgroup chmod +x $out/bin/afl-cgroup substituteInPlace $out/bin/afl-cgroup \ - --replace "cgcreate" "${libcgroup}/bin/cgcreate" \ - --replace "cgexec" "${libcgroup}/bin/cgexec" \ - --replace "cgdelete" "${libcgroup}/bin/cgdelete" + --replace-fail "cgcreate" "${libcgroup}/bin/cgcreate" \ + --replace-fail "cgexec" "${libcgroup}/bin/cgexec" \ + --replace-fail "cgdelete" "${libcgroup}/bin/cgdelete" patchShebangs $out/bin '' + lib.optionalString (wine != null) '' substitute afl-wine-trace $out/bin/afl-wine-trace \ - --replace "qemu_mode/unsigaction" "$out/lib/afl" + --replace-fail "qemu_mode/unsigaction" "$out/lib/afl" chmod +x $out/bin/afl-wine-trace # qemu needs to be fed ELFs, not wrapper scripts, so we have to cheat a bit if we @@ -136,17 +138,17 @@ let # replace references to tools in build directory with references to installed locations substituteInPlace test/test-qemu-mode.sh \ - --replace '../libcompcov.so' '`$out/bin/get-afl-qemu-libcompcov-so`' \ - --replace '../afl-qemu-trace' '$out/bin/afl-qemu-trace' \ - --replace '../afl-fuzz' '$out/bin/afl-fuzz' \ - --replace '../qemu_mode/unsigaction/unsigaction32.so' '$out/lib/afl/unsigaction32.so' \ - --replace '../qemu_mode/unsigaction/unsigaction64.so' '$out/lib/afl/unsigaction64.so' + --replace-fail '../libcompcov.so' '`$out/bin/get-afl-qemu-libcompcov-so`' \ + --replace-fail '../afl-qemu-trace' '$out/bin/afl-qemu-trace' \ + --replace-fail '../afl-fuzz' '$out/bin/afl-fuzz' \ + --replace-fail '../qemu_mode/unsigaction/unsigaction32.so' '$out/lib/afl/unsigaction32.so' \ + --replace-fail '../qemu_mode/unsigaction/unsigaction64.so' '$out/lib/afl/unsigaction64.so' substituteInPlace test/test-libextensions.sh \ - --replace '../libdislocator.so' '`$out/bin/get-libdislocator-so`' \ - --replace '../libtokencap.so' '`$out/bin/get-libtokencap-so`' + --replace-fail '../libdislocator.so' '`$out/bin/get-libdislocator-so`' \ + --replace-fail '../libtokencap.so' '`$out/bin/get-libtokencap-so`' substituteInPlace test/test-llvm.sh \ - --replace '../afl-cmin.bash' '`$out/bin/afl-cmin.bash`' + --replace-fail '../afl-cmin.bash' '`$out/bin/afl-cmin.bash`' # perl -pi -e 's|(? Date: Mon, 15 Jul 2024 23:54:16 +0200 Subject: [PATCH 4/4] afplusplus: format --- pkgs/tools/security/aflplusplus/default.nix | 158 +++++++++------ .../security/aflplusplus/libdislocator.nix | 6 +- .../security/aflplusplus/libtokencap.nix | 6 +- pkgs/tools/security/aflplusplus/qemu.nix | 182 +++++++++--------- 4 files changed, 200 insertions(+), 152 deletions(-) diff --git a/pkgs/tools/security/aflplusplus/default.nix b/pkgs/tools/security/aflplusplus/default.nix index 09d2d20d0faff..3f436d650a3fe 100644 --- a/pkgs/tools/security/aflplusplus/default.nix +++ b/pkgs/tools/security/aflplusplus/default.nix @@ -1,8 +1,22 @@ -{ lib, stdenv, stdenvNoCC, fetchFromGitHub, callPackage, makeWrapper -, clang, llvm, gcc, which, libcgroup, python3, perl, gmp -, file, wine ? null -, cmocka -, llvmPackages +{ + lib, + stdenv, + stdenvNoCC, + fetchFromGitHub, + callPackage, + makeWrapper, + clang, + llvm, + gcc, + which, + libcgroup, + python3, + perl, + gmp, + file, + wine ? null, + cmocka, + llvmPackages, }: # wine fuzzing is only known to work for win32 binaries, and using a mixture of @@ -12,9 +26,13 @@ assert (wine != null) -> (stdenv.targetPlatform.system == "i686-linux"); let aflplusplus-qemu = callPackage ./qemu.nix { }; - qemu-exe-name = if stdenv.targetPlatform.system == "x86_64-linux" then "qemu-x86_64" - else if stdenv.targetPlatform.system == "i686-linux" then "qemu-i386" - else throw "aflplusplus: no support for ${stdenv.targetPlatform.system}!"; + qemu-exe-name = + if stdenv.targetPlatform.system == "x86_64-linux" then + "qemu-x86_64" + else if stdenv.targetPlatform.system == "i686-linux" then + "qemu-i386" + else + throw "aflplusplus: no support for ${stdenv.targetPlatform.system}!"; libdislocator = callPackage ./libdislocator.nix { inherit aflplusplus; }; libtokencap = callPackage ./libtokencap.nix { inherit aflplusplus; }; aflplusplus = stdenvNoCC.mkDerivation rec { @@ -32,9 +50,18 @@ let # Note: libcgroup isn't needed for building, just for the afl-cgroup # script. - nativeBuildInputs = [ makeWrapper which clang gcc ]; - buildInputs = [ llvm python3 gmp llvmPackages.bintools ] - ++ lib.optional (wine != null) python3.pkgs.wrapPython; + nativeBuildInputs = [ + makeWrapper + which + clang + gcc + ]; + buildInputs = [ + llvm + python3 + gmp + llvmPackages.bintools + ] ++ lib.optional (wine != null) python3.pkgs.wrapPython; # Flag is already set by package and causes some compiler warnings. # warning: "_FORTIFY_SOURCE" redefined @@ -88,50 +115,56 @@ let runHook postBuild ''; - postInstall = '' - # remove afl-clang(++) which are just symlinks to afl-clang-fast - rm $out/bin/afl-clang $out/bin/afl-clang++ - - # the makefile neglects to install unsigaction - cp qemu_mode/unsigaction/unsigaction*.so $out/lib/afl/ - - # Install the custom QEMU emulator for binary blob fuzzing. - ln -s ${aflplusplus-qemu}/bin/${qemu-exe-name} $out/bin/afl-qemu-trace - - # give user a convenient way of accessing libcompconv.so, libdislocator.so, libtokencap.so - cat > $out/bin/get-afl-qemu-libcompcov-so < $out/bin/get-afl-qemu-libcompcov-so <