1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00
samba-mirror/lib/fuzzing
Samuel Cabrero 49a0f6170b oss-fuzz: Update build script to be compatible with rpm distros
The /etc/default/locale file does not exists in the rpm family distros
so the do_build.sh script failed with:

./lib/fuzzing/oss-fuzz/do_build.sh: line 31: /etc/default/locale: No
such file or directory

Signed-off-by: Samuel Cabrero <scabrero@samba.org>
Reviewed-by: David Mulder <dmulder@samba.org>

Autobuild-User(master): Samuel Cabrero <scabrero@samba.org>
Autobuild-Date(master): Tue Apr  6 15:54:54 UTC 2021 on sn-devel-184
2021-04-06 15:54:54 +00:00
..
oss-fuzz oss-fuzz: Update build script to be compatible with rpm distros 2021-04-06 15:54:54 +00:00
afl-fuzz-main.c fuzz:afl main: run the initialisation function 2021-03-16 17:09:32 +00:00
decode_ndr_X_crash decode_ndr_X_crash: always find pipe in honggfuzz file 2020-01-12 19:50:37 +00:00
fuzz_cli_credentials_parse_string.c fuzz: add a LLVMFuzzerInitialize() to all fuzzers 2021-03-16 17:09:32 +00:00
fuzz_dcerpc_parse_binding.c fuzz: add a LLVMFuzzerInitialize() to all fuzzers 2021-03-16 17:09:32 +00:00
fuzz_ldap_decode.c CVE-2020-10704: libcli ldap_message: Add search size limits to ldap_decode 2020-05-04 02:59:32 +00:00
fuzz_ldb_dn_explode.c fuzz: add a LLVMFuzzerInitialize() to all fuzzers 2021-03-16 17:09:32 +00:00
fuzz_ldb_ldif_read.c fuzz: add a LLVMFuzzerInitialize() to all fuzzers 2021-03-16 17:09:32 +00:00
fuzz_ldb_parse_binary_decode.c fuzz: add a LLVMFuzzerInitialize() to all fuzzers 2021-03-16 17:09:32 +00:00
fuzz_ldb_parse_control.c fuzz: add a LLVMFuzzerInitialize() to all fuzzers 2021-03-16 17:09:32 +00:00
fuzz_ldb_parse_tree.c lib/fuzzing: Fix argument order to ldb_filter_from_tree in fuzz_ldb_parse_tree 2019-12-11 04:21:28 +00:00
fuzz_lzxpress.c Add fuzzing binary for lzxpress 2019-10-18 07:31:45 +00:00
fuzz_ndr_X.c fuzz: add a LLVMFuzzerInitialize() to all fuzzers 2021-03-16 17:09:32 +00:00
fuzz_nmblib_parse_packet.c fuzz: add a LLVMFuzzerInitialize() to all fuzzers 2021-03-16 17:09:32 +00:00
fuzz_oLschema2ldif.c fuzz_oLschema2ldif: check multiple possible NULLs 2020-01-17 14:33:18 +00:00
fuzz_reg_parse.c lib/fuzzing: Tell the compiler we know we are ignoring errors in fuzz_reg_parse 2019-12-10 07:50:28 +00:00
fuzz_regfio.c Add fuzzing binary for regfio 2019-10-18 07:31:45 +00:00
fuzz_tiniparser.c lib/fuzzing: Free memory after successful load in fuzz_tiniparser 2019-11-18 21:02:52 +00:00
fuzzing.c
fuzzing.h
README.md fuzzing/README: link to wiki 2020-10-21 02:28:38 +00:00
wscript_build fuzz: add fuzz_cli_credentials_parse_string 2020-10-16 04:45:40 +00:00

Fuzzing Samba

See also https://wiki.samba.org/index.php/Fuzzing

Fuzzing supplies valid, invalid, unexpected or random data as input to a piece of code. Instrumentation, usually compiler-implemented, is used to monitor for exceptions such as crashes, assertions or memory corruption.

See Wikipedia article on fuzzing for more information.

Honggfuzz

Configure with fuzzing

Example command line to build binaries for use with honggfuzz:

buildtools/bin/waf -C --without-gettext --enable-debug --enable-developer \
	--address-sanitizer --enable-libfuzzer --abi-check-disable \
	CC=.../honggfuzz/hfuzz_cc/hfuzz-clang configure \
	LINK_CC=.../honggfuzz/hfuzz_cc/hfuzz-clang

Fuzzing tiniparser

Example for fuzzing tiniparser using honggfuzz (see --help for more options):

buildtools/bin/waf --targets=fuzz_tiniparser build && \
.../honggfuzz/honggfuzz --sanitizers --timeout 3 --max_file_size 256 \
  --rlimit_rss 100 -f .../tiniparser-corpus -- bin/fuzz_tiniparser

AFL (american fuzzy lop)

Configure with fuzzing

Example command line to build binaries for use with afl

buildtools/bin/waf -C --without-gettext --enable-debug --enable-developer \
	--enable-afl-fuzzer --abi-check-disable \
	CC=afl-gcc configure

Fuzzing tiniparser

Example for fuzzing tiniparser using afl-fuzz (see --help for more options):

buildtools/bin/waf --targets=fuzz_tiniparser build && \
afl-fuzz -m 200 -i inputdir -o outputdir -- bin/fuzz_tiniparser

oss-fuzz

Samba can be fuzzed by Google's oss-fuzz system. Assuming you have an oss-fuzz checkout from https://github.com/google/oss-fuzz with Samba's metadata in projects/samba, the following guides will help:

Testing locally

https://google.github.io/oss-fuzz/getting-started/new-project-guide/#testing-locally

Debugging oss-fuzz

See https://google.github.io/oss-fuzz/advanced-topics/debugging/

Samba-specific hints

A typical debugging workflow is:

oss-fuzz$ python infra/helper.py shell samba git fetch $REMOTE $BRANCH git checkout FETCH_HEAD lib/fuzzing/oss-fuzz/build_image.sh compile

This will pull in any new Samba deps and build Samba's fuzzers.

vim: set sw=8 sts=8 ts=8 tw=79 :