421 lines
9.7 KiB
TOML
421 lines
9.7 KiB
TOML
[env]
|
|
PROFILE = { value = "release", condition = { env_not_set = ["PROFILE"] } }
|
|
PROFILE_DIR = { source = "${PROFILE}", default_value = "release", mapping = { "release" = "release", "dev" = "debug" }, condition = { env_not_set = [
|
|
"PROFILE_DIR",
|
|
] } }
|
|
CROSS_CC = "x86_64-linux-gnu-gcc"
|
|
CROSS_CXX = "x86_64-linux-gnu-g++"
|
|
CROSS_CFLAGS = ""
|
|
TARGET_DIR = "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/x86_64"
|
|
LIBPNG_ARCH = "x86_64"
|
|
LIBPNG_OPTIMIZATIONS = "yes"
|
|
FEATURE = "x86_64"
|
|
#LIBAFL_DEBUG_OUTPUT = "1"
|
|
#CUSTOM_QEMU_DIR= "~/qemu-libafl-bridge"
|
|
|
|
[env.arm]
|
|
CROSS_CC = "arm-linux-gnueabi-gcc"
|
|
CROSS_CXX = "arm-linux-gnueabi-g++"
|
|
CROSS_CFLAGS = ""
|
|
TARGET_DIR = "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/arm"
|
|
LIBPNG_ARCH = "arm"
|
|
LIBPNG_OPTIMIZATIONS = "yes"
|
|
FEATURE = "arm"
|
|
|
|
[env.aarch64]
|
|
CROSS_CC = "aarch64-linux-gnu-gcc"
|
|
CROSS_CXX = "aarch64-linux-gnu-g++"
|
|
CROSS_CFLAGS = ""
|
|
TARGET_DIR = "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/aarch64"
|
|
LIBPNG_ARCH = "aarch64"
|
|
LIBPNG_OPTIMIZATIONS = "yes"
|
|
FEATURE = "aarch64"
|
|
|
|
[env.x86_64]
|
|
CROSS_CC = "x86_64-linux-gnu-gcc"
|
|
CROSS_CXX = "x86_64-linux-gnu-g++"
|
|
CROSS_CFLAGS = ""
|
|
TARGET_DIR = "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/x86_64"
|
|
LIBPNG_ARCH = "x86_64"
|
|
LIBPNG_OPTIMIZATIONS = "yes"
|
|
FEATURE = "x86_64"
|
|
|
|
[env.i386]
|
|
CROSS_CC = "x86_64-linux-gnu-gcc"
|
|
CROSS_CXX = "x86_64-linux-gnu-g++"
|
|
CROSS_CFLAGS = "-m32"
|
|
TARGET_DIR = "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/i386"
|
|
LIBPNG_ARCH = "i386"
|
|
LIBPNG_OPTIMIZATIONS = "yes"
|
|
FEATURE = "i386"
|
|
|
|
[env.mips]
|
|
CROSS_CC = "mipsel-linux-gnu-gcc"
|
|
CROSS_CXX = "mipsel-linux-gnu-g++"
|
|
CROSS_CFLAGS = ""
|
|
TARGET_DIR = "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/mips"
|
|
LIBPNG_ARCH = "mips"
|
|
LIBPNG_OPTIMIZATIONS = "yes"
|
|
FEATURE = "mips"
|
|
|
|
[env.ppc]
|
|
CROSS_CC = "powerpc-linux-gnu-gcc"
|
|
CROSS_CXX = "powerpc-linux-gnu-g++"
|
|
CROSS_CFLAGS = ""
|
|
TARGET_DIR = "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/ppc"
|
|
LIBPNG_ARCH = "ppc"
|
|
LIBPNG_OPTIMIZATIONS = "no"
|
|
FEATURE = "ppc"
|
|
|
|
[tasks.unsupported]
|
|
script_runner = "@shell"
|
|
script = '''
|
|
echo "Qemu fuzzer not supported on windows/mac"
|
|
'''
|
|
|
|
[tasks.target_dir]
|
|
condition = { files_not_exist = ["${CARGO_MAKE_CRATE_TARGET_DIRECTORY}"] }
|
|
script_runner = "@shell"
|
|
script = '''
|
|
mkdir ${CARGO_MAKE_CRATE_TARGET_DIRECTORY}
|
|
'''
|
|
|
|
[tasks.deps_dir]
|
|
dependencies = ["target_dir"]
|
|
condition = { files_not_exist = ["${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/"] }
|
|
script_runner = "@shell"
|
|
script = '''
|
|
mkdir ${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/
|
|
'''
|
|
|
|
[tasks.arch_target_dir]
|
|
dependencies = ["target_dir"]
|
|
condition = { files_not_exist = ["${TARGET_DIR}"] }
|
|
script_runner = "@shell"
|
|
script = '''
|
|
mkdir ${TARGET_DIR}
|
|
'''
|
|
|
|
[tasks.zlib]
|
|
linux_alias = "zlib_unix"
|
|
mac_alias = "unsupported"
|
|
windows_alias = "unsupported"
|
|
|
|
[tasks.zlib_unix_wget]
|
|
dependencies = ["deps_dir"]
|
|
condition = { files_not_exist = [
|
|
"${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/zlib-1.2.13",
|
|
] }
|
|
script_runner = "@shell"
|
|
# NOTE: There's no specific reason we're using an old version of zlib,
|
|
# but newer versions get moved to fossils/ after a while.
|
|
script = '''
|
|
wget \
|
|
-O "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/zlib-1.2.13.tar.gz" \
|
|
https://zlib.net/fossils/zlib-1.2.13.tar.gz
|
|
|
|
tar \
|
|
zxvf ${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/zlib-1.2.13.tar.gz \
|
|
-C ${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/
|
|
'''
|
|
|
|
[tasks.zlib_unix]
|
|
dependencies = ["arch_target_dir", "zlib_unix_wget"]
|
|
condition = { files_not_exist = ["${TARGET_DIR}/build-zlib/libz.a"] }
|
|
script_runner = "@shell"
|
|
script = '''
|
|
rm -rf ${TARGET_DIR}/build-zlib/
|
|
|
|
mkdir ${TARGET_DIR}/build-zlib/
|
|
|
|
cd ${TARGET_DIR}/build-zlib/ && \
|
|
CC=$CROSS_CC \
|
|
CFLAGS=${CROSS_CFLAGS} \
|
|
${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/zlib-1.2.13/configure \
|
|
--prefix=./zlib
|
|
|
|
make install
|
|
'''
|
|
|
|
[tasks.libpng]
|
|
linux_alias = "libpng_unix"
|
|
mac_alias = "unsupported"
|
|
windows_alias = "unsupported"
|
|
|
|
[tasks.libpng_unix_wget]
|
|
dependencies = ["deps_dir"]
|
|
condition = { files_not_exist = [
|
|
"${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/libpng-1.6.37",
|
|
] }
|
|
script_runner = "@shell"
|
|
script = '''
|
|
wget \
|
|
-O "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/v1.6.37.tar.gz" \
|
|
https://github.com/glennrp/libpng/archive/refs/tags/v1.6.37.tar.gz
|
|
|
|
tar \
|
|
-xvf "${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/v1.6.37.tar.gz" \
|
|
-C ${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/
|
|
'''
|
|
|
|
[tasks.libpng_unix]
|
|
dependencies = ["arch_target_dir", "zlib", "libpng_unix_wget"]
|
|
condition = { files_not_exist = ["${TARGET_DIR}/build-png/.libs/libpng16.a"] }
|
|
script_runner = "@shell"
|
|
script = '''
|
|
rm -rf ${TARGET_DIR}/build-png/
|
|
|
|
mkdir ${TARGET_DIR}/build-png/
|
|
|
|
cd ${TARGET_DIR}/build-png/ && \
|
|
CC=$CROSS_CC \
|
|
CFLAGS="${CROSS_CFLAGS}" \
|
|
CPPFLAGS="-I${TARGET_DIR}/build-zlib/zlib/include" \
|
|
LDFLAGS=-L"${TARGET_DIR}/build-zlib/zlib/lib" \
|
|
${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/libpng-1.6.37/configure \
|
|
--enable-shared=no \
|
|
--with-pic=yes \
|
|
--enable-hardware-optimizations=${LIBPNG_OPTIMIZATIONS} \
|
|
--host=${LIBPNG_ARCH} \
|
|
|
|
make
|
|
'''
|
|
|
|
[tasks.build]
|
|
linux_alias = "build_unix"
|
|
mac_alias = "build_unix"
|
|
windows_alias = "unsupported"
|
|
|
|
[tasks.build_unix]
|
|
command = "cargo"
|
|
args = [
|
|
"build",
|
|
"--profile",
|
|
"${PROFILE}",
|
|
"--features",
|
|
"${FEATURE}",
|
|
"--target-dir",
|
|
"${TARGET_DIR}",
|
|
]
|
|
|
|
[tasks.fuzzer]
|
|
dependencies = ["build"]
|
|
script_runner = "@shell"
|
|
script = '''
|
|
rm -f ${TARGET_DIR}/${PROFILE_DIR}/qemu_launcher-${CARGO_MAKE_PROFILE}
|
|
mv ${TARGET_DIR}/${PROFILE_DIR}/qemu_launcher ${TARGET_DIR}/${PROFILE_DIR}/qemu_launcher-${CARGO_MAKE_PROFILE}
|
|
'''
|
|
|
|
[tasks.harness]
|
|
linux_alias = "harness_unix"
|
|
mac_alias = "unsupported"
|
|
windows_alias = "unsupported"
|
|
|
|
[tasks.harness_unix]
|
|
script_runner = "@shell"
|
|
script = '''
|
|
${CROSS_CXX} \
|
|
./harness.cc \
|
|
$CROSS_CFLAGS \
|
|
"${TARGET_DIR}/build-png/.libs/libpng16.a" \
|
|
"${TARGET_DIR}/build-zlib/libz.a" \
|
|
-I"${TARGET_DIR}/build-png" \
|
|
-I"${CARGO_MAKE_CRATE_TARGET_DIRECTORY}/deps/libpng-1.6.37" \
|
|
-I"${TARGET_DIR}/build-zlib/zlib/include" \
|
|
-L"${TARGET_DIR}/build-zlib/zlib/lib" \
|
|
-o"${TARGET_DIR}/libpng-harness-${CARGO_MAKE_PROFILE}" \
|
|
-lm
|
|
'''
|
|
dependencies = ["libpng"]
|
|
|
|
[tasks.debug]
|
|
linux_alias = "debug_unix"
|
|
mac_alias = "unsupported"
|
|
windows_alias = "unsupported"
|
|
|
|
[tasks.debug_unix]
|
|
command = "${TARGET_DIR}/${PROFILE_DIR}/qemu_launcher-${CARGO_MAKE_PROFILE}"
|
|
args = [
|
|
"--input",
|
|
"./corpus",
|
|
"--output",
|
|
"${TARGET_DIR}/output/",
|
|
"--log",
|
|
"${TARGET_DIR}/output/log.txt",
|
|
"--cores",
|
|
"0-7",
|
|
"--asan-cores",
|
|
"0-3",
|
|
"--cmplog-cores",
|
|
"2-5",
|
|
"--iterations",
|
|
"100000",
|
|
"--verbose",
|
|
"--",
|
|
"${TARGET_DIR}/libpng-harness-${CARGO_MAKE_PROFILE}",
|
|
]
|
|
dependencies = ["harness", "fuzzer"]
|
|
|
|
[tasks.run]
|
|
linux_alias = "run_unix"
|
|
mac_alias = "unsupported"
|
|
windows_alias = "unsupported"
|
|
|
|
[tasks.run_unix]
|
|
command = "${TARGET_DIR}/${PROFILE_DIR}/qemu_launcher-${CARGO_MAKE_PROFILE}"
|
|
args = [
|
|
"--input",
|
|
"./corpus",
|
|
"--output",
|
|
"${TARGET_DIR}/output/",
|
|
"--log",
|
|
"${TARGET_DIR}/output/log.txt",
|
|
"--cores",
|
|
"0-7",
|
|
"--asan-cores",
|
|
"0-3",
|
|
"--cmplog-cores",
|
|
"2-5",
|
|
"--iterations",
|
|
"1000000",
|
|
"--tui",
|
|
"--",
|
|
"${TARGET_DIR}/libpng-harness-${CARGO_MAKE_PROFILE}",
|
|
]
|
|
dependencies = ["harness", "fuzzer"]
|
|
|
|
[tasks.single]
|
|
linux_alias = "single_unix"
|
|
mac_alias = "unsupported"
|
|
windows_alias = "unsupported"
|
|
|
|
[tasks.single_unix]
|
|
command = "${TARGET_DIR}/${PROFILE_DIR}/qemu_launcher-${CARGO_MAKE_PROFILE}"
|
|
args = [
|
|
"--input",
|
|
"./corpus",
|
|
"--output",
|
|
"${TARGET_DIR}/output/",
|
|
"--log",
|
|
"${TARGET_DIR}/output/log.txt",
|
|
"--cores",
|
|
"0",
|
|
"--",
|
|
"${TARGET_DIR}/libpng-harness-${CARGO_MAKE_PROFILE}",
|
|
]
|
|
dependencies = ["harness", "fuzzer"]
|
|
|
|
[tasks.asan]
|
|
linux_alias = "asan_unix"
|
|
mac_alias = "unsupported"
|
|
windows_alias = "unsupported"
|
|
|
|
[tasks.asan_unix]
|
|
command = "${TARGET_DIR}/${PROFILE_DIR}/qemu_launcher-${CARGO_MAKE_PROFILE}"
|
|
args = [
|
|
"--input",
|
|
"./corpus",
|
|
"--output",
|
|
"${TARGET_DIR}/output/",
|
|
"--log",
|
|
"${TARGET_DIR}/output/log.txt",
|
|
"--cores",
|
|
"0",
|
|
"--asan-cores",
|
|
"0",
|
|
"--",
|
|
"${TARGET_DIR}/libpng-harness-${CARGO_MAKE_PROFILE}",
|
|
]
|
|
dependencies = ["harness", "fuzzer"]
|
|
|
|
[tasks.asan_guest]
|
|
linux_alias = "asan_guest_unix"
|
|
mac_alias = "unsupported"
|
|
windows_alias = "unsupported"
|
|
|
|
[tasks.asan_guest_unix]
|
|
command = "${TARGET_DIR}/${PROFILE_DIR}/qemu_launcher-${CARGO_MAKE_PROFILE}"
|
|
args = [
|
|
"--input",
|
|
"./corpus",
|
|
"--output",
|
|
"${TARGET_DIR}/output/",
|
|
"--log",
|
|
"${TARGET_DIR}/output/log.txt",
|
|
"--cores",
|
|
"0",
|
|
"--asan-guest-cores",
|
|
"0",
|
|
"--",
|
|
"${TARGET_DIR}/libpng-harness-${CARGO_MAKE_PROFILE}",
|
|
]
|
|
dependencies = ["harness", "fuzzer"]
|
|
|
|
[tasks.test]
|
|
linux_alias = "test_unix"
|
|
mac_alias = "unsupported"
|
|
windows_alias = "unsupported"
|
|
|
|
[tasks.test_unix]
|
|
script_runner = "@shell"
|
|
script = '''
|
|
echo "Profile: ${PROFILE}"
|
|
cd injection_test || exit 1
|
|
make
|
|
mkdir in || true
|
|
echo aaaaaaaaaa > in/a
|
|
timeout 10s "$(find ${TARGET_DIR} -name 'qemu_launcher')" -o out -i in -j ../injections.toml -v -- ./static >/dev/null 2>fuzz.log || true
|
|
if [ -z "$(grep -Ei "found.*injection" fuzz.log)" ]; then
|
|
echo "Fuzzer does not generate any testcases or any crashes"
|
|
echo "Logs:"
|
|
cat fuzz.log
|
|
exit 1
|
|
else
|
|
echo "Fuzzer is working"
|
|
fi
|
|
make clean
|
|
#rm -rf in out fuzz.log || true
|
|
'''
|
|
dependencies = ["build_unix"]
|
|
|
|
[tasks.clean]
|
|
linux_alias = "clean_unix"
|
|
mac_alias = "clean_unix"
|
|
windows_alias = "unsupported"
|
|
|
|
[tasks.clean_unix]
|
|
# Disable default `clean` definition
|
|
clear = true
|
|
script_runner = "@shell"
|
|
script = '''
|
|
rm -rf ${CARGO_MAKE_CRATE_TARGET_DIRECTORY}
|
|
cargo clean
|
|
'''
|
|
|
|
[tasks.arm]
|
|
command = "cargo"
|
|
args = ["make", "-p", "arm", "run"]
|
|
|
|
[tasks.aarch64]
|
|
command = "cargo"
|
|
args = ["make", "-p", "aarch64", "run"]
|
|
|
|
[tasks.x86_64]
|
|
command = "cargo"
|
|
args = ["make", "-p", "x86_64", "run"]
|
|
|
|
[tasks.i386]
|
|
command = "cargo"
|
|
args = ["make", "-p", "i386", "run"]
|
|
|
|
[tasks.mips]
|
|
command = "cargo"
|
|
args = ["make", "-p", "mips", "run"]
|
|
|
|
[tasks.ppc]
|
|
command = "cargo"
|
|
args = ["make", "-p", "ppc", "run"]
|
|
|
|
[tasks.all]
|
|
dependencies = ["arm", "aarch64", "x86_64", "i386", "mips", "ppc"]
|