Skip to content

Commit 15525fa

Browse files
committed
[infra] Improve Fuzz-Introspector support
This patch enhances introspector by adding engine-specific and environment variable arguments. This allows performance measurement not only for libFuzzer but also for other fuzzing engines.
1 parent f47a2da commit 15525fa

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

infra/helper.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,8 @@ def get_parser(): # pylint: disable=too-many-statements,too-many-locals
464464
help='if specified, will use private corpora',
465465
default=False,
466466
action='store_true')
467+
_add_engine_args(introspector_parser)
468+
_add_environment_args(introspector_parser)
467469

468470
download_corpora_parser = subparsers.add_parser(
469471
'download_corpora', help='Download all corpora for a project.')
@@ -1080,6 +1082,8 @@ def _get_fuzz_targets(project):
10801082
continue
10811083
if name == 'llvm-symbolizer':
10821084
continue
1085+
if name.endswith('.so'):
1086+
continue
10831087

10841088
path = os.path.join(project.out, name)
10851089
# Python and JVM fuzz targets are only executable for the root user, so
@@ -1324,13 +1328,18 @@ def _introspector_prepare_corpus(args):
13241328
os.makedirs(fuzzer_corpus_dir)
13251329
run_fuzzer_command = [
13261330
'run_fuzzer', '--sanitizer', 'address', '--corpus-dir',
1327-
fuzzer_corpus_dir, args.project.name, fuzzer_name
1331+
fuzzer_corpus_dir, '--engine', args.engine, args.project.name,
1332+
fuzzer_name
13281333
]
13291334

13301335
parsed_args = parse_args(parser, run_fuzzer_command)
1331-
parsed_args.fuzzer_args = [
1332-
f'-max_total_time={args.seconds}', '-detect_leaks=0'
1333-
]
1336+
parsed_args.fuzzer_args = {
1337+
'afl': [f'-V {args.seconds}'],
1338+
'centipede': [f'--stop_after={args.seconds}s'],
1339+
'honggfuzz': [f'--run_time={args.seconds}'],
1340+
'libfuzzer': [f'-max_total_time={args.seconds}', '-detect_leaks=0'],
1341+
}[args.engine]
1342+
13341343
# Continue even if run command fails, because we do not have 100%
13351344
# accuracy in fuzz target detection, i.e. we might try to run something
13361345
# that is not a target.
@@ -1347,8 +1356,9 @@ def introspector(args):
13471356
args_to_append.append(_get_absolute_path(args.source_path))
13481357

13491358
# Build fuzzers with ASAN.
1350-
build_fuzzers_command = [
1351-
'build_fuzzers', '--sanitizer=address', args.project.name
1359+
build_fuzzers_command = _env_to_docker_args(args.e or []) + [
1360+
'build_fuzzers', '--sanitizer=address', '--engine', args.engine,
1361+
args.project.name
13521362
] + args_to_append
13531363
if not build_fuzzers(parse_args(parser, build_fuzzers_command)):
13541364
logger.error('Failed to build project with ASAN')

0 commit comments

Comments
 (0)