> 1) Resume-by-sync:
> 2) Running afl-cmin before resuming:
> 3) AFL_SKIP_CRASHES
Normally, AFL takes all inputs as-is. It also preserves state
metadata, so a master instance that resumes a job won't needlessly
repeat deterministic fuzzing steps that take up the bulk of the first
few queue cycles. Use the normal -i logic whenever you can.
AFL_SKIP_CRASHES in conjunction with -i inhibits many of the "dry run"
error messages that would give you hints about memory limits and so
on, so don't set it unless you're running into some real problems with
concurrency-related intermittent crashes in the corpus (which should
be rare).
Sync functionality is designed to pull in only a subset of
sequentially numbered test cases from another fuzzer, choosing only
the ones that improve coverage and do not crash or time out. It's not
inherently faster or slower, but it ignores metadata and disables many
useful diagnostics that would warn you about your input corpus being
poorly chosen. It may optimize a corpus somewhat, but it doesn't do as
much as afl-cmin. So, don't use it unless you're actually syncing with
other fuzzers, or unless it scratches some other itch (with -t nn+ and
AFL_SKIP_CRASHES implemented, I imagine that it no longer offers any
real advantage).
The afl-cmin tool is useful for shrinking and optimizing a starting
corpus obtained from some other source (test suites, web crawls, ...),
so that you don't end up with more files than you really need. It's
also useful for optimizing the output corpus produced by afl-fuzz
before feeding it to other tools (e.g., testing harnesses for
interaction-requiring apps). You generally don't need to run it in
other circumstances.
/mz