blob: b96e78fd150827e9b13f13b429a92540700326b1 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.fuzzer;
using zx;
/// See |Controller.Configure|.
type Options = table {
/// Perform this many fuzzing runs, then exit normally. If unset (or zero), fuzz indefinitely.
1: runs uint32;
/// If non-zero, fuzz for this duration and then exit normally. If zero, fuzz indefinitely.
/// Defaults to 0.
2: max_total_time zx.duration;
// PRNG seed to use when generating inputs. The same seed for the same target should produce the
// same inputs. If zero, the current ticks will be used. Defaults to 0.
3: seed uint32;
/// If non-zero, limit the maximum size of a test input to this size, in bytes. Use 0 to disable
/// the limit. Defaults to 1 MB.
4: max_input_size uint64;
// Maximum number of consecutive mutations to apply to an input. Defaults to 5.
5: mutation_depth uint16;
/// If an AFL-style dictionary is supplied using |Controller.WriteDictionary|, include words up
/// to this level. Defaults to 0, i.e. words without an explicit level.
6: dictionary_level uint16;
/// If true, treat instrumented process exits as fuzzing errors. Defaults to false.
7: detect_exits bool;
/// If true, and ASan or LSan are available, try to detect memory leaks. Defaults to false.
/// Leak detection can be expensive, so it is recommended to first develop a corpus that covers
/// a reasonable amount of the code under test before attempting to detect leaks.
8: detect_leaks bool;
/// If non-zero, any run that takes longer than this duration will raise a TIMEOUT error.
/// Use 0 to disable the limit. Defaults to 20 minutes.
9: run_limit zx.duration;
/// If non-zero, any allocation over this size in bytes will raise a BAD_MALLOC error. Use 0 to
/// disable the limit. Defaults to 2 GB.
10: malloc_limit uint64;
/// If non-zero, any process that uses more than this amount of memory in bytes will raise an
/// OOM error. Use 0 to disable the limit. Defaults to 2 GB.
11: oom_limit uint64;
/// If non-zero, purge the sanitizer's allocator quarantine and reclaim memory periodically
/// between runs after an interval of this many seconds. Use 0 to disable allocator purging.
/// Default to 1.
12: purge_interval zx.duration;
/// Exit code used by the instrumented process if it encounters a bad allocation. Set this
/// if the target already uses the default for another reason. Defaults to 2000.
13: malloc_exitcode int32;
/// Exit code used by the instrumented process if it encounters a sanitizer error. Set this
/// if the target already uses the default for another reason. Defaults to 2001.
14: death_exitcode int32;
/// Exit code used by the instrumented process if it encounters a leak. Set this if the target
/// already uses the default for another reason. Defaults to 2002.
15: leak_exitcode int32;
/// Exit code used by the instrumented process if it exceeds the OOM limit. Set this if the
/// target already uses the default for another reason. Defaults to 2003.
16: oom_exitcode int32;
/// If non-zero, the engine will periodically update any added monitors after this duration.
/// Defaults to 20.
17: pulse_interval zx.duration;
};