Two process families, two conventions. The main nexsiz binary uses a minimal Unix-style scheme. Official and custom NXS binaries follow the binding table in nxs/CONTRACT.md §2 (implemented in nxs-lib as ExitCode).

Nexsiz fuzzer (nexsiz)

Source: src/main.rs.

CodeMeaningTypical cause
0SuccessCampaign finished (or offline path completed): normal run end, --infer-model success, --nxs-list success, --help / --version
1FailureConfig parse error, engine init failure, campaign error, infer-model error, nxs-list error, -L requested without libafl feature
Campaigns and crashes

Finding crashes does not by itself change the fuzzer process exit code. Artefacts land under output/crashes (and related dirs). Automate triage via NXS exit codes and report.json, not by assuming nexsiz returns non-zero on every finding.

nexsiz -h 127.0.0.1 -p 21 -m ftp -s seeds/ftp -o out/ftp
echo $?
# 0 — clean stop
# 1 — config/init/runtime failure

NXS existence scripts

Binding contract: nxs/CONTRACT.md §2. Canonical enum: nxs/src/lib/src/exit.rs.

CodeNameMeaning
0OkCompleted normally; no further vulnerability indication
1ErrorOperational error (missing file, unreachable target, invalid args)
2EscalateIndication of further vulnerability / successful exploit-assist → escalate
3TimeoutInternal timeout
4InterruptedInterrupted / cancelled
≥10Script-specificSuccess variants reserved for the script; document in header / nxs.toml

SCRIPT_SUCCESS_BASE = 10 — script-specific success codes start at ≥10.

Escalate (2)

Exit 2 is the primary signal operators and pipelines should watch. Official tools such as crash/auto-repro return 2 when a refined input confirms the crash. Wire this into SIEM / job controllers, not only into human log review.

Operator patterns

# Fuzzer — fail the job only on operational failure
nexsiz -c campaign.conf -v || exit 1

# NXS standalone — escalate on confirmed secondary finding
nxs-auto-repro --crash out/crashes/id_000042 --target 10.0.0.5:21 --out nxs-out
case $? in
  0) echo "no escalate" ;;
  1) echo "ops error" >&2; exit 1 ;;
  2) echo "ESCALATE" >&2; exit 2 ;;
  3) echo "timeout" >&2; exit 3 ;;
  4) echo "interrupted" >&2; exit 4 ;;
  *) echo "script-specific or unknown: $?" ;;
esac

Related