Erik Ekman 20c9b117e1 test: Fix speling issues 2 tahun lalu
..
inputs 844c201702 added fuzz tests (moved from contrib/ports/unix/fuzz to get them to a more prominent place, even if afl-fuzz still needs *nix to run) 9 tahun lalu
Makefile 5514d8eb63 test/fuzz: Build with -O2 by default 2 tahun lalu
README 95a63bc352 test/fuzz: Use HTTPS URLs and mention AFL++ 2 tahun lalu
config.h 844c201702 added fuzz tests (moved from contrib/ports/unix/fuzz to get them to a more prominent place, even if afl-fuzz still needs *nix to run) 9 tahun lalu
fuzz.c d05be56a50 fuzz: add more fuzz tests 5 tahun lalu
fuzz2.c d05be56a50 fuzz: add more fuzz tests 5 tahun lalu
fuzz3.c 003f5cc12d fuzz: whitespace fixes 5 tahun lalu
fuzz_common.c 20c9b117e1 test: Fix speling issues 2 tahun lalu
fuzz_common.h d05be56a50 fuzz: add more fuzz tests 5 tahun lalu
lwipopts.h e30d50710d fuzz: allow overriding LWIP_RAND for fuzz tests 5 tahun lalu
output_to_pcap.sh 844c201702 added fuzz tests (moved from contrib/ports/unix/fuzz to get them to a more prominent place, even if afl-fuzz still needs *nix to run) 9 tahun lalu

README


Fuzzing the lwIP stack (afl-fuzz requires linux/unix or similar)

This directory contains small apps that read Ethernet frames from stdin and
process them. They are used together with the 'american fuzzy lop' tool (found
at https://lcamtuf.coredump.cx/afl/) or its successor AFL++
(https://github.com/AFLplusplus/AFLplusplus) and the sample inputs to test how
unexpected inputs are handled. The afl tool will read the known inputs, and
try to modify them to exercise as many code paths as possible, by instrumenting
the code and keeping track of which code is executed.

Just running make will produce the test programs.

Then run afl with:

afl-fuzz -i inputs/ -o output ./lwip_fuzz

and it should start working. It will probably complain about CPU scheduler,
set AFL_SKIP_CPUFREQ=1 to ignore it.
If it complains about invalid "/proc/sys/kernel/core_pattern" setting, try
executing "sudo bash -c 'echo core > /proc/sys/kernel/core_pattern'".

The input is split into different subdirectories since they test different
parts of the code, and since you want to run one instance of afl-fuzz on each
core.

When afl finds a crash or a hang, the input that caused it will be placed in
the output directory. If you have hexdump and text2pcap tools installed,
running output_to_pcap.sh will create pcap files for each input
file to simplify viewing in wireshark.

The lwipopts.h file needs to have checksum checking off, otherwise almost every
packet will be discarded because of that. The other options can be tuned to
expose different parts of the code.