Index: third_party/afl/src/afl-whatsup |
diff --git a/third_party/afl/src/afl-whatsup b/third_party/afl/src/afl-whatsup |
new file mode 100755 |
index 0000000000000000000000000000000000000000..9a186f96f72f0a026869cdc8f605e77bad375ec8 |
--- /dev/null |
+++ b/third_party/afl/src/afl-whatsup |
@@ -0,0 +1,163 @@ |
+#!/bin/sh |
+# |
+# american fuzzy lop - status check tool |
+# -------------------------------------- |
+# |
+# Written and maintained by Michal Zalewski <lcamtuf@google.com> |
+# |
+# Copyright 2015 Google Inc. All rights reserved. |
+# |
+# Licensed under the Apache License, Version 2.0 (the "License"); |
+# you may not use this file except in compliance with the License. |
+# You may obtain a copy of the License at: |
+# |
+# http://www.apache.org/licenses/LICENSE-2.0 |
+# |
+# This tool summarizes the status of any locally-running synchronized |
+# instances of afl-fuzz. |
+# |
+ |
+echo "status check tool for afl-fuzz by <lcamtuf@google.com>" |
+echo |
+ |
+if [ "$1" = "-s" ]; then |
+ |
+ SUMMARY_ONLY=1 |
+ DIR="$2" |
+ |
+else |
+ |
+ unset SUMMARY_ONLY |
+ DIR="$1" |
+ |
+fi |
+ |
+if [ "$DIR" = "" ]; then |
+ |
+ echo "Usage: $0 [ -s ] afl_sync_dir" 1>&2 |
+ echo 1>&2 |
+ echo "The -s option causes the tool to skip all the per-fuzzer trivia and show" 1>&2 |
+ echo "just the summary results. See docs/parallel_fuzzing.txt for additional tips." 1>&2 |
+ echo 1>&2 |
+ exit 1 |
+ |
+fi |
+ |
+cd "$DIR" || exit 1 |
+ |
+if [ -d queue ]; then |
+ |
+ echo "[-] Error: parameter is an individual output directory, not a sync dir." 1>&2 |
+ exit 1 |
+ |
+fi |
+ |
+CUR_TIME=`date +%s` |
+ |
+TMP=`mktemp -t .afl-whatsup-XXXXXXXX` || exit 1 |
+ |
+ALIVE_CNT=0 |
+DEAD_CNT=0 |
+ |
+TOTAL_TIME=0 |
+TOTAL_EXECS=0 |
+TOTAL_EPS=0 |
+TOTAL_CRASHES=0 |
+TOTAL_PFAV=0 |
+TOTAL_PENDING=0 |
+ |
+if [ "$SUMMARY_ONLY" = "" ]; then |
+ |
+ echo "Individual fuzzers" |
+ echo "==================" |
+ echo |
+ |
+fi |
+ |
+for i in `find . -maxdepth 2 -iname fuzzer_stats`; do |
+ |
+ sed 's/^command_line.*$/_skip:1/;s/[ ]*:[ ]*/="/;s/$/"/' "$i" >"$TMP" |
+ . "$TMP" |
+ |
+ RUN_UNIX=$((CUR_TIME - start_time)) |
+ RUN_DAYS=$((RUN_UNIX / 60 / 60 / 24)) |
+ RUN_HRS=$(((RUN_UNIX / 60 / 60) % 24)) |
+ |
+ if [ "$SUMMARY_ONLY" = "" ]; then |
+ |
+ echo ">>> $afl_banner ($RUN_DAYS days, $RUN_HRS hrs) <<<" |
+ echo |
+ |
+ fi |
+ |
+ if ! kill -0 "$fuzzer_pid" 2>/dev/null; then |
+ |
+ if [ "$SUMMARY_ONLY" = "" ]; then |
+ |
+ echo " Instance is dead or running remotely, skipping." |
+ echo |
+ |
+ fi |
+ |
+ DEAD_CNT=$((DEAD_CNT + 1)) |
+ continue |
+ |
+ fi |
+ |
+ ALIVE_CNT=$((ALIVE_CNT + 1)) |
+ |
+ EXEC_SEC=$((execs_done / RUN_UNIX)) |
+ PATH_PERC=$((cur_path * 100 / paths_total)) |
+ |
+ TOTAL_TIME=$((TOTAL_TIME + RUN_UNIX)) |
+ TOTAL_EPS=$((TOTAL_EPS + EXEC_SEC)) |
+ TOTAL_EXECS=$((TOTAL_EXECS + execs_done)) |
+ TOTAL_CRASHES=$((TOTAL_CRASHES + unique_crashes)) |
+ TOTAL_PENDING=$((TOTAL_PENDING + pending_total)) |
+ TOTAL_PFAV=$((TOTAL_PFAV + pending_favs)) |
+ |
+ if [ "$SUMMARY_ONLY" = "" ]; then |
+ |
+ echo " cycle $((cycles_done + 1)), lifetime speed $EXEC_SEC execs/sec, path $cur_path/$paths_total (${PATH_PERC}%)" |
+ |
+ if [ "$unique_crashes" = "0" ]; then |
+ echo " pending $pending_favs/$pending_total, coverage $bitmap_cvg, no crashes yet" |
+ else |
+ echo " pending $pending_favs/$pending_total, coverage $bitmap_cvg, crash count $unique_crashes (!)" |
+ fi |
+ |
+ echo |
+ |
+ fi |
+ |
+done |
+ |
+rm -f "$TMP" |
+ |
+TOTAL_DAYS=$((TOTAL_TIME / 60 / 60 / 24)) |
+TOTAL_HRS=$(((TOTAL_TIME / 60 / 60) % 24)) |
+ |
+test "$TOTAL_TIME" = "0" && TOTAL_TIME=1 |
+ |
+echo "Summary stats" |
+echo "=============" |
+echo |
+echo " Fuzzers alive : $ALIVE_CNT" |
+ |
+if [ ! "$DEAD_CNT" = "0" ]; then |
+ echo " Dead or remote : $DEAD_CNT (excluded from stats)" |
+fi |
+ |
+echo " Total run time : $TOTAL_DAYS days, $TOTAL_HRS hours" |
+echo " Total execs : $((TOTAL_EXECS / 1000 / 1000)) million" |
+echo " Cumulative speed : $TOTAL_EPS execs/sec" |
+echo " Pending paths : $TOTAL_PFAV faves, $TOTAL_PENDING total" |
+ |
+if [ "$ALIVE_CNT" -gt "1" ]; then |
+ echo " Pending per fuzzer : $((TOTAL_PFAV/ALIVE_CNT)) faves, $((TOTAL_PENDING/ALIVE_CNT)) total (on average)" |
+fi |
+ |
+echo " Crashes found : $TOTAL_CRASHES locally unique" |
+echo |
+ |
+exit 0 |