def generate_default_strategy_pool():
  """Return a strategy pool representing a random selection of strategies for
  launcher to consider."""
  pool = StrategyPool()

  # Decide whether to include radamsa, ml rnn, or no generator (mutually
  # exclusive).
  choose_generator(pool)

  # Decide whether or not to include remaining strategies.
  if engine_common.do_corpus_subset():
    pool.add_strategy(strategy.CORPUS_SUBSET_STRATEGY)

  for value in [
      strategy.DATAFLOW_TRACING_STRATEGY,
      strategy.FORK_STRATEGY,
      strategy.MUTATOR_PLUGIN_STRATEGY,
      strategy.RANDOM_MAX_LENGTH_STRATEGY,
      strategy.RECOMMENDED_DICTIONARY_STRATEGY,
      strategy.VALUE_PROFILE_STRATEGY,
  ]:
    if do_strategy(value):
      pool.add_strategy(value)
  logs.log("Strategy pool was generated according to default parameters. "
           "Chosen strategies: " + ", ".join(pool.strategy_names))
  return pool
Example #2
0
    def __init__(self):
        self.use_corpus_subset = engine_common.do_corpus_subset()

        if self.use_corpus_subset:
            self.corpus_subset_size = engine_common.random_choice(
                engine_common.CORPUS_SUBSET_NUM_TESTCASES)

        self.fast_cal = strategies.FastCal.NOT_SET
Example #3
0
def get_corpus_directories(main_corpus_directory,
                           fuzzer_path,
                           fuzzing_strategies,
                           minijail_chroot=None):
    """Return a list of corpus directories to be passed to the fuzzer binary for
  fuzzing."""
    corpus_directories = []

    # Set up scratch directory for writing new units.
    new_testcases_directory = create_corpus_directory('new')

    corpus_directories.append(new_testcases_directory)

    # Check for seed corpus and add it into corpus directory.
    engine_common.unpack_seed_corpus_if_needed(fuzzer_path,
                                               main_corpus_directory)

    # Pick a few testcases from our corpus to use as the initial corpus.
    subset_size = engine_common.random_choice(
        engine_common.CORPUS_SUBSET_NUM_TESTCASES)

    if (engine_common.do_corpus_subset()
            and shell.get_directory_file_count(main_corpus_directory) >
            subset_size):
        # Copy |subset_size| testcases into 'subset' directory.
        corpus_subset_directory = create_corpus_directory('subset')
        copy_from_corpus(corpus_subset_directory, main_corpus_directory,
                         subset_size)
        corpus_directories.append(corpus_subset_directory)
        fuzzing_strategies.append(strategy.CORPUS_SUBSET_STRATEGY + '_' +
                                  str(subset_size))
        if minijail_chroot:
            bind_corpus_dirs(minijail_chroot, [main_corpus_directory])
    else:
        # Regular fuzzing with the full main corpus directory.
        corpus_directories.append(main_corpus_directory)

    if minijail_chroot:
        bind_corpus_dirs(minijail_chroot, corpus_directories)

    return corpus_directories
Example #4
0
def generate_default_strategy_pool():
  """Return a strategy pool representing a random selection of strategies for
  launcher to consider."""
  pool = StrategyPool()

  # Decide whether to include radamsa, ml rnn, or no generator (mutually
  # exclusive).
  choose_generator(pool)

  # Decide whether or not to include remaining strategies.
  if engine_common.do_corpus_subset():
    pool.add_strategy(strategy.CORPUS_SUBSET_STRATEGY)
  if do_strategy(strategy.RANDOM_MAX_LENGTH_STRATEGY):
    pool.add_strategy(strategy.RANDOM_MAX_LENGTH_STRATEGY)
  if do_strategy(strategy.RECOMMENDED_DICTIONARY_STRATEGY):
    pool.add_strategy(strategy.RECOMMENDED_DICTIONARY_STRATEGY)
  if do_strategy(strategy.VALUE_PROFILE_STRATEGY):
    pool.add_strategy(strategy.VALUE_PROFILE_STRATEGY)
  if do_strategy(strategy.FORK_STRATEGY):
    pool.add_strategy(strategy.FORK_STRATEGY)
  if do_strategy(strategy.MUTATOR_PLUGIN_STRATEGY):
    pool.add_strategy(strategy.MUTATOR_PLUGIN_STRATEGY)
  return pool