Skip to content

Commit 7107c55

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 7107c55

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

infra/helper.py

Lines changed: 14 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,17 @@ 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, fuzzer_name
13281332
]
13291333

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

13491357
# Build fuzzers with ASAN.
1350-
build_fuzzers_command = [
1351-
'build_fuzzers', '--sanitizer=address', args.project.name
1358+
build_fuzzers_command = _env_to_docker_args(args.e or []) + [
1359+
'build_fuzzers', '--sanitizer=address', '--engine', args.engine, args.project.name
13521360
] + args_to_append
13531361
if not build_fuzzers(parse_args(parser, build_fuzzers_command)):
13541362
logger.error('Failed to build project with ASAN')

0 commit comments

Comments
 (0)