From 9a26b65c5018cac5024c96d52d1ce77924666e9e Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Thu, 4 Aug 2022 22:23:23 -0700 Subject: [PATCH] tools: add afl-fuzz files --- tools/afl-fuzz/Makefile | 11 ++ tools/afl-fuzz/compress/fuzz.c | 63 ++++++++++ tools/afl-fuzz/compress/inputs/lzms20 | 16 +++ tools/afl-fuzz/compress/inputs/lzms50 | 16 +++ tools/afl-fuzz/compress/inputs/lzms80 | 16 +++ tools/afl-fuzz/compress/inputs/lzx20 | 16 +++ tools/afl-fuzz/compress/inputs/lzx50 | 16 +++ tools/afl-fuzz/compress/inputs/lzx80 | 16 +++ tools/afl-fuzz/compress/inputs/xpress20 | 16 +++ tools/afl-fuzz/compress/inputs/xpress50 | 16 +++ tools/afl-fuzz/compress/inputs/xpress80 | 16 +++ tools/afl-fuzz/decompress/fuzz.c | 46 +++++++ tools/afl-fuzz/decompress/inputs/lzms | Bin 0 -> 14261 bytes tools/afl-fuzz/decompress/inputs/lzx | Bin 0 -> 13607 bytes tools/afl-fuzz/decompress/inputs/xpress | Bin 0 -> 14305 bytes tools/afl-fuzz/fuzz.sh | 154 ++++++++++++++++++++++++ 16 files changed, 418 insertions(+) create mode 100644 tools/afl-fuzz/Makefile create mode 100644 tools/afl-fuzz/compress/fuzz.c create mode 100644 tools/afl-fuzz/compress/inputs/lzms20 create mode 100644 tools/afl-fuzz/compress/inputs/lzms50 create mode 100644 tools/afl-fuzz/compress/inputs/lzms80 create mode 100644 tools/afl-fuzz/compress/inputs/lzx20 create mode 100644 tools/afl-fuzz/compress/inputs/lzx50 create mode 100644 tools/afl-fuzz/compress/inputs/lzx80 create mode 100644 tools/afl-fuzz/compress/inputs/xpress20 create mode 100644 tools/afl-fuzz/compress/inputs/xpress50 create mode 100644 tools/afl-fuzz/compress/inputs/xpress80 create mode 100644 tools/afl-fuzz/decompress/fuzz.c create mode 100644 tools/afl-fuzz/decompress/inputs/lzms create mode 100644 tools/afl-fuzz/decompress/inputs/lzx create mode 100644 tools/afl-fuzz/decompress/inputs/xpress create mode 100755 tools/afl-fuzz/fuzz.sh diff --git a/tools/afl-fuzz/Makefile b/tools/afl-fuzz/Makefile new file mode 100644 index 00000000..cff26bf6 --- /dev/null +++ b/tools/afl-fuzz/Makefile @@ -0,0 +1,11 @@ +SRC := $(wildcard */*.c) +EXE := $(SRC:.c=) + +LDLIBS := -lwim +LDFLAGS := -L../../.libs +CPPFLAGS := -I../../include + +all:$(EXE) + +clean: + rm -f $(EXE) diff --git a/tools/afl-fuzz/compress/fuzz.c b/tools/afl-fuzz/compress/fuzz.c new file mode 100644 index 00000000..ccda14b3 --- /dev/null +++ b/tools/afl-fuzz/compress/fuzz.c @@ -0,0 +1,63 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + int fd; + struct stat stbuf; + uint8_t ctype; + uint8_t level; + struct wimlib_compressor *c; + struct wimlib_decompressor *d; + size_t usize, csize; + void *udata, *cdata, *decompressed; + int ret; + + fd = open(argv[1], O_RDONLY); + assert(fd >= 0); + ret = fstat(fd, &stbuf); + assert(!ret); + + if (stbuf.st_size < 2) + return 0; + ret = read(fd, &ctype, 1); + assert(ret == 1); + ret = read(fd, &level, 1); + assert(ret == 1); + ctype = 1 + ((ctype - 1) % 3); /* 1-3 */ + level = 1 + (level % 100); /* 1-100 */ + usize = stbuf.st_size - 2; + + udata = malloc(usize); + cdata = malloc(usize); + decompressed = malloc(usize); + + ret = read(fd, udata, usize); + assert(ret == usize); + + ret = wimlib_create_compressor(ctype, usize, level, &c); + if (ret == 0) { + ret = wimlib_create_decompressor(ctype, usize, &d); + assert(ret == 0); + + csize = wimlib_compress(udata, usize, cdata, usize, c); + if (csize) { + ret = wimlib_decompress(cdata, csize, + decompressed, usize, d); + assert(ret == 0); + assert(memcmp(udata, decompressed, usize) == 0); + } + wimlib_free_compressor(c); + wimlib_free_decompressor(d); + } + free(udata); + free(cdata); + free(decompressed); + return 0; +} diff --git a/tools/afl-fuzz/compress/inputs/lzms20 b/tools/afl-fuzz/compress/inputs/lzms20 new file mode 100644 index 00000000..063a7cb6 --- /dev/null +++ b/tools/afl-fuzz/compress/inputs/lzms20 @@ -0,0 +1,16 @@ +CHAPTER 1. Loomings. + +Call me Ishmael. Some years ago—never mind how long precisely—having +little or no money in my purse, and nothing particular to interest me +on shore, I thought I would sail about a little and see the watery part +of the world. It is a way I have of driving off the spleen and +regulating the circulation. Whenever I find myself growing grim about +the mouth; whenever it is a damp, drizzly November in my soul; whenever +I find myself involuntarily pausing before coffin warehouses, and +bringing up the rear of every funeral I meet; and especially whenever +my hypos get such an upper hand of me, that it requires a strong moral +principle to prevent me from deliberately stepping into the street, and +methodically knocking people’s hats off—then, I account it high time to +get to sea as soon as I can. This is my substitute for pistol and ball. +With a philosophical flourish Cato throws himself upon his sword; I +quietly take to the ship. There is nothing su \ No newline at end of file diff --git a/tools/afl-fuzz/compress/inputs/lzms50 b/tools/afl-fuzz/compress/inputs/lzms50 new file mode 100644 index 00000000..bcb1bc0a --- /dev/null +++ b/tools/afl-fuzz/compress/inputs/lzms50 @@ -0,0 +1,16 @@ +2CHAPTER 1. Loomings. + +Call me Ishmael. Some years ago—never mind how long precisely—having +little or no money in my purse, and nothing particular to interest me +on shore, I thought I would sail about a little and see the watery part +of the world. It is a way I have of driving off the spleen and +regulating the circulation. Whenever I find myself growing grim about +the mouth; whenever it is a damp, drizzly November in my soul; whenever +I find myself involuntarily pausing before coffin warehouses, and +bringing up the rear of every funeral I meet; and especially whenever +my hypos get such an upper hand of me, that it requires a strong moral +principle to prevent me from deliberately stepping into the street, and +methodically knocking people’s hats off—then, I account it high time to +get to sea as soon as I can. This is my substitute for pistol and ball. +With a philosophical flourish Cato throws himself upon his sword; I +quietly take to the ship. There is nothing su \ No newline at end of file diff --git a/tools/afl-fuzz/compress/inputs/lzms80 b/tools/afl-fuzz/compress/inputs/lzms80 new file mode 100644 index 00000000..9f537ada --- /dev/null +++ b/tools/afl-fuzz/compress/inputs/lzms80 @@ -0,0 +1,16 @@ +PCHAPTER 1. Loomings. + +Call me Ishmael. Some years ago—never mind how long precisely—having +little or no money in my purse, and nothing particular to interest me +on shore, I thought I would sail about a little and see the watery part +of the world. It is a way I have of driving off the spleen and +regulating the circulation. Whenever I find myself growing grim about +the mouth; whenever it is a damp, drizzly November in my soul; whenever +I find myself involuntarily pausing before coffin warehouses, and +bringing up the rear of every funeral I meet; and especially whenever +my hypos get such an upper hand of me, that it requires a strong moral +principle to prevent me from deliberately stepping into the street, and +methodically knocking people’s hats off—then, I account it high time to +get to sea as soon as I can. This is my substitute for pistol and ball. +With a philosophical flourish Cato throws himself upon his sword; I +quietly take to the ship. There is nothing su \ No newline at end of file diff --git a/tools/afl-fuzz/compress/inputs/lzx20 b/tools/afl-fuzz/compress/inputs/lzx20 new file mode 100644 index 00000000..83bcdfdf --- /dev/null +++ b/tools/afl-fuzz/compress/inputs/lzx20 @@ -0,0 +1,16 @@ +CHAPTER 1. Loomings. + +Call me Ishmael. Some years ago—never mind how long precisely—having +little or no money in my purse, and nothing particular to interest me +on shore, I thought I would sail about a little and see the watery part +of the world. It is a way I have of driving off the spleen and +regulating the circulation. Whenever I find myself growing grim about +the mouth; whenever it is a damp, drizzly November in my soul; whenever +I find myself involuntarily pausing before coffin warehouses, and +bringing up the rear of every funeral I meet; and especially whenever +my hypos get such an upper hand of me, that it requires a strong moral +principle to prevent me from deliberately stepping into the street, and +methodically knocking people’s hats off—then, I account it high time to +get to sea as soon as I can. This is my substitute for pistol and ball. +With a philosophical flourish Cato throws himself upon his sword; I +quietly take to the ship. There is nothing su \ No newline at end of file diff --git a/tools/afl-fuzz/compress/inputs/lzx50 b/tools/afl-fuzz/compress/inputs/lzx50 new file mode 100644 index 00000000..fac05344 --- /dev/null +++ b/tools/afl-fuzz/compress/inputs/lzx50 @@ -0,0 +1,16 @@ +2CHAPTER 1. Loomings. + +Call me Ishmael. Some years ago—never mind how long precisely—having +little or no money in my purse, and nothing particular to interest me +on shore, I thought I would sail about a little and see the watery part +of the world. It is a way I have of driving off the spleen and +regulating the circulation. Whenever I find myself growing grim about +the mouth; whenever it is a damp, drizzly November in my soul; whenever +I find myself involuntarily pausing before coffin warehouses, and +bringing up the rear of every funeral I meet; and especially whenever +my hypos get such an upper hand of me, that it requires a strong moral +principle to prevent me from deliberately stepping into the street, and +methodically knocking people’s hats off—then, I account it high time to +get to sea as soon as I can. This is my substitute for pistol and ball. +With a philosophical flourish Cato throws himself upon his sword; I +quietly take to the ship. There is nothing su \ No newline at end of file diff --git a/tools/afl-fuzz/compress/inputs/lzx80 b/tools/afl-fuzz/compress/inputs/lzx80 new file mode 100644 index 00000000..46e720f1 --- /dev/null +++ b/tools/afl-fuzz/compress/inputs/lzx80 @@ -0,0 +1,16 @@ +PCHAPTER 1. Loomings. + +Call me Ishmael. Some years ago—never mind how long precisely—having +little or no money in my purse, and nothing particular to interest me +on shore, I thought I would sail about a little and see the watery part +of the world. It is a way I have of driving off the spleen and +regulating the circulation. Whenever I find myself growing grim about +the mouth; whenever it is a damp, drizzly November in my soul; whenever +I find myself involuntarily pausing before coffin warehouses, and +bringing up the rear of every funeral I meet; and especially whenever +my hypos get such an upper hand of me, that it requires a strong moral +principle to prevent me from deliberately stepping into the street, and +methodically knocking people’s hats off—then, I account it high time to +get to sea as soon as I can. This is my substitute for pistol and ball. +With a philosophical flourish Cato throws himself upon his sword; I +quietly take to the ship. There is nothing su \ No newline at end of file diff --git a/tools/afl-fuzz/compress/inputs/xpress20 b/tools/afl-fuzz/compress/inputs/xpress20 new file mode 100644 index 00000000..e41ed0bc --- /dev/null +++ b/tools/afl-fuzz/compress/inputs/xpress20 @@ -0,0 +1,16 @@ +CHAPTER 1. Loomings. + +Call me Ishmael. Some years ago—never mind how long precisely—having +little or no money in my purse, and nothing particular to interest me +on shore, I thought I would sail about a little and see the watery part +of the world. It is a way I have of driving off the spleen and +regulating the circulation. Whenever I find myself growing grim about +the mouth; whenever it is a damp, drizzly November in my soul; whenever +I find myself involuntarily pausing before coffin warehouses, and +bringing up the rear of every funeral I meet; and especially whenever +my hypos get such an upper hand of me, that it requires a strong moral +principle to prevent me from deliberately stepping into the street, and +methodically knocking people’s hats off—then, I account it high time to +get to sea as soon as I can. This is my substitute for pistol and ball. +With a philosophical flourish Cato throws himself upon his sword; I +quietly take to the ship. There is nothing su \ No newline at end of file diff --git a/tools/afl-fuzz/compress/inputs/xpress50 b/tools/afl-fuzz/compress/inputs/xpress50 new file mode 100644 index 00000000..0a8f87f5 --- /dev/null +++ b/tools/afl-fuzz/compress/inputs/xpress50 @@ -0,0 +1,16 @@ +2CHAPTER 1. Loomings. + +Call me Ishmael. Some years ago—never mind how long precisely—having +little or no money in my purse, and nothing particular to interest me +on shore, I thought I would sail about a little and see the watery part +of the world. It is a way I have of driving off the spleen and +regulating the circulation. Whenever I find myself growing grim about +the mouth; whenever it is a damp, drizzly November in my soul; whenever +I find myself involuntarily pausing before coffin warehouses, and +bringing up the rear of every funeral I meet; and especially whenever +my hypos get such an upper hand of me, that it requires a strong moral +principle to prevent me from deliberately stepping into the street, and +methodically knocking people’s hats off—then, I account it high time to +get to sea as soon as I can. This is my substitute for pistol and ball. +With a philosophical flourish Cato throws himself upon his sword; I +quietly take to the ship. There is nothing su \ No newline at end of file diff --git a/tools/afl-fuzz/compress/inputs/xpress80 b/tools/afl-fuzz/compress/inputs/xpress80 new file mode 100644 index 00000000..22e87612 --- /dev/null +++ b/tools/afl-fuzz/compress/inputs/xpress80 @@ -0,0 +1,16 @@ +PCHAPTER 1. Loomings. + +Call me Ishmael. Some years ago—never mind how long precisely—having +little or no money in my purse, and nothing particular to interest me +on shore, I thought I would sail about a little and see the watery part +of the world. It is a way I have of driving off the spleen and +regulating the circulation. Whenever I find myself growing grim about +the mouth; whenever it is a damp, drizzly November in my soul; whenever +I find myself involuntarily pausing before coffin warehouses, and +bringing up the rear of every funeral I meet; and especially whenever +my hypos get such an upper hand of me, that it requires a strong moral +principle to prevent me from deliberately stepping into the street, and +methodically knocking people’s hats off—then, I account it high time to +get to sea as soon as I can. This is my substitute for pistol and ball. +With a philosophical flourish Cato throws himself upon his sword; I +quietly take to the ship. There is nothing su \ No newline at end of file diff --git a/tools/afl-fuzz/decompress/fuzz.c b/tools/afl-fuzz/decompress/fuzz.c new file mode 100644 index 00000000..546a695e --- /dev/null +++ b/tools/afl-fuzz/decompress/fuzz.c @@ -0,0 +1,46 @@ +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + int fd; + struct stat stbuf; + uint8_t ctype; + size_t csize, uspace; + void *cdata, *udata; + struct wimlib_decompressor *d; + int ret; + + fd = open(argv[1], O_RDONLY); + assert(fd >= 0); + ret = fstat(fd, &stbuf); + assert(!ret); + + if (stbuf.st_size < 1) + return 0; + ret = read(fd, &ctype, 1); + assert(ret == 1); + ctype = 1 + ((ctype - 1) % 3); /* 1-3 */ + csize = stbuf.st_size - 1; + uspace = csize * 8; + + cdata = malloc(csize); + udata = malloc(uspace); + + ret = read(fd, cdata, csize); + assert(ret == csize); + + ret = wimlib_create_decompressor(ctype, uspace, &d); + if (ret == 0) + wimlib_decompress(cdata, csize, udata, uspace, d); + + free(udata); + free(cdata); + wimlib_free_decompressor(d); + return 0; +} diff --git a/tools/afl-fuzz/decompress/inputs/lzms b/tools/afl-fuzz/decompress/inputs/lzms new file mode 100644 index 0000000000000000000000000000000000000000..739dd4982a2c884a1d58ac94bd4d9be92548e60b GIT binary patch literal 14261 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 literal 0 HcmV?d00001 diff --git a/tools/afl-fuzz/decompress/inputs/lzx b/tools/afl-fuzz/decompress/inputs/lzx new file mode 100644 index 0000000000000000000000000000000000000000..e555efe23999355aa19e0b5904f520a5118bbb21 GIT binary patch literal 13607 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%0Ah63`FjO@A!LWGnHE;wjSaM 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 + exit 1 +} + +asan=false +ubsan=false +may_resume=true + +longopts_array=( +asan +help +no-resume +ubsan +) +longopts=$(echo "${longopts_array[@]}" | tr ' ' ',') + +if ! options=$(getopt -o "" -l "$longopts" -- "$@"); then + usage 1>&2 + exit 1 +fi +eval set -- "$options" +while (( $# >= 0 )); do + case "$1" in + --asan) + asan=true + ;; + --help) + usage + exit 0 + ;; + --no-resume) + may_resume=false + ;; + --ubsan) + ubsan=true + ;; + --) + shift + break + ;; + *) + echo 1>&2 "Invalid option: \"$1\"" + usage 1>&2 + exit 1 + esac + shift +done + +if $asan && $ubsan; then + die "--asan and --ubsan are mutually exclusive" +fi + +if ! type -P afl-fuzz > /dev/null; then + die "afl-fuzz is not installed" +fi + +if (( $# == 0 )); then + targets=("${AVAILABLE_TARGETS[@]}") +else + for target; do + found=false + for t in "${AVAILABLE_TARGETS[@]}"; do + if [ "$target" = "$t" ]; then + found=true + fi + done + if ! $found; then + echo 1>&2 "Unknown target '$target'" + echo 1>&2 "Available targets: ${AVAILABLE_TARGETS[*]}" + exit 1 + fi + done + targets=("$@") +fi +if (( ${#targets[@]} > 1 )) && ! type -P urxvt > /dev/null; then + die "urxvt is not installed" +fi + +afl_opts="" +if $asan; then + export AFL_USE_ASAN=1 + export CFLAGS="-O2 -m32" + export CC=afl-clang + afl_opts+=" -m 800" +elif $ubsan; then + export CFLAGS="-fsanitize=undefined -fno-sanitize-recover=undefined" + export CC=afl-gcc +else + export AFL_HARDEN=1 + export CFLAGS="-O2" + export CC=afl-gcc +fi + +sudo sh -c "echo core > /proc/sys/kernel/core_pattern" +sudo sh -c "echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor" + +NPROC=$(getconf _NPROCESSORS_ONLN) + +( +cd ../../ +./configure CC="$CC" CFLAGS="$CFLAGS" +make "-j$NPROC" +) +make "-j$NPROC" -B +export LD_LIBRARY_PATH=$PWD/../../.libs + +for dir in "${targets[@]}"; do + workdir=/tmp/wimlib_$dir + cp -vaT "$dir" "$workdir" + indir=$workdir/inputs + outdir=$workdir/outputs + if [ -e "$outdir" ]; then + if $may_resume; then + indir="-" + else + rm -rf "${outdir:?}"/* + fi + else + mkdir "$outdir" + fi + cmd="afl-fuzz -i $indir -o $outdir -T wimlib_$dir $afl_opts -- $workdir/fuzz @@" + if (( ${#targets[@]} > 1 )); then + urxvt -e bash -c "$cmd" & + else + $cmd + fi +done +wait -- 2.43.0