1*08b48e0bSAndroid Build Coastguard Worker#!/bin/sh 2*08b48e0bSAndroid Build Coastguard Worker# 3*08b48e0bSAndroid Build Coastguard Worker# american fuzzy lop++ - status check tool 4*08b48e0bSAndroid Build Coastguard Worker# ---------------------------------------- 5*08b48e0bSAndroid Build Coastguard Worker# 6*08b48e0bSAndroid Build Coastguard Worker# Originally written by Michal Zalewski 7*08b48e0bSAndroid Build Coastguard Worker# 8*08b48e0bSAndroid Build Coastguard Worker# Copyright 2015 Google Inc. All rights reserved. 9*08b48e0bSAndroid Build Coastguard Worker# Copyright 2019-2024 AFLplusplus Project. All rights reserved. 10*08b48e0bSAndroid Build Coastguard Worker# 11*08b48e0bSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 12*08b48e0bSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 13*08b48e0bSAndroid Build Coastguard Worker# You may obtain a copy of the License at: 14*08b48e0bSAndroid Build Coastguard Worker# 15*08b48e0bSAndroid Build Coastguard Worker# https://www.apache.org/licenses/LICENSE-2.0 16*08b48e0bSAndroid Build Coastguard Worker# 17*08b48e0bSAndroid Build Coastguard Worker# This tool summarizes the status of any locally-running synchronized 18*08b48e0bSAndroid Build Coastguard Worker# instances of afl-fuzz. 19*08b48e0bSAndroid Build Coastguard Worker# 20*08b48e0bSAndroid Build Coastguard Worker 21*08b48e0bSAndroid Build Coastguard Workertest "$1" = "-h" -o "$1" = "-hh" && { 22*08b48e0bSAndroid Build Coastguard Worker echo "$0 status check tool for afl-fuzz by Michal Zalewski" 23*08b48e0bSAndroid Build Coastguard Worker echo 24*08b48e0bSAndroid Build Coastguard Worker echo "Usage: $0 [-s] [-d] afl_output_directory" 25*08b48e0bSAndroid Build Coastguard Worker echo 26*08b48e0bSAndroid Build Coastguard Worker echo Options: 27*08b48e0bSAndroid Build Coastguard Worker echo " -d - include dead fuzzer stats" 28*08b48e0bSAndroid Build Coastguard Worker echo " -m - just show minimal stats" 29*08b48e0bSAndroid Build Coastguard Worker echo " -n - no color output" 30*08b48e0bSAndroid Build Coastguard Worker echo " -s - skip details and output summary results only" 31*08b48e0bSAndroid Build Coastguard Worker echo 32*08b48e0bSAndroid Build Coastguard Worker exit 1 33*08b48e0bSAndroid Build Coastguard Worker} 34*08b48e0bSAndroid Build Coastguard Worker 35*08b48e0bSAndroid Build Coastguard Workerunset MINIMAL_ONLY 36*08b48e0bSAndroid Build Coastguard Workerunset NO_COLOR 37*08b48e0bSAndroid Build Coastguard Workerunset PROCESS_DEAD 38*08b48e0bSAndroid Build Coastguard Workerunset SUMMARY_ONLY 39*08b48e0bSAndroid Build Coastguard Workerunset RED 40*08b48e0bSAndroid Build Coastguard Workerunset GREEN 41*08b48e0bSAndroid Build Coastguard Workerunset YELLOW 42*08b48e0bSAndroid Build Coastguard Workerunset BLUE 43*08b48e0bSAndroid Build Coastguard Workerunset NC 44*08b48e0bSAndroid Build Coastguard Workerunset RESET 45*08b48e0bSAndroid Build Coastguard Worker 46*08b48e0bSAndroid Build Coastguard Workerif [ -z "$TERM" ]; then export TERM=vt220; fi 47*08b48e0bSAndroid Build Coastguard Worker 48*08b48e0bSAndroid Build Coastguard Workerwhile [ "$1" = "-d" -o "$1" = "-m" -o "$1" = "-n" -o "$1" = "-s" ]; do 49*08b48e0bSAndroid Build Coastguard Worker 50*08b48e0bSAndroid Build Coastguard Worker if [ "$1" = "-d" ]; then 51*08b48e0bSAndroid Build Coastguard Worker PROCESS_DEAD=1 52*08b48e0bSAndroid Build Coastguard Worker fi 53*08b48e0bSAndroid Build Coastguard Worker 54*08b48e0bSAndroid Build Coastguard Worker if [ "$1" = "-m" ]; then 55*08b48e0bSAndroid Build Coastguard Worker MINIMAL_ONLY=1 56*08b48e0bSAndroid Build Coastguard Worker fi 57*08b48e0bSAndroid Build Coastguard Worker 58*08b48e0bSAndroid Build Coastguard Worker if [ "$1" = "-n" ]; then 59*08b48e0bSAndroid Build Coastguard Worker NO_COLOR=1 60*08b48e0bSAndroid Build Coastguard Worker fi 61*08b48e0bSAndroid Build Coastguard Worker 62*08b48e0bSAndroid Build Coastguard Worker if [ "$1" = "-s" ]; then 63*08b48e0bSAndroid Build Coastguard Worker SUMMARY_ONLY=1 64*08b48e0bSAndroid Build Coastguard Worker fi 65*08b48e0bSAndroid Build Coastguard Worker 66*08b48e0bSAndroid Build Coastguard Worker shift 67*08b48e0bSAndroid Build Coastguard Worker 68*08b48e0bSAndroid Build Coastguard Workerdone 69*08b48e0bSAndroid Build Coastguard Worker 70*08b48e0bSAndroid Build Coastguard WorkerDIR="$1" 71*08b48e0bSAndroid Build Coastguard Worker 72*08b48e0bSAndroid Build Coastguard Workerif [ "$DIR" = "" -o "$DIR" = "-h" -o "$DIR" = "--help" ]; then 73*08b48e0bSAndroid Build Coastguard Worker 74*08b48e0bSAndroid Build Coastguard Worker echo "$0 status check tool for afl-fuzz by Michal Zalewski" 1>&2 75*08b48e0bSAndroid Build Coastguard Worker echo 1>&2 76*08b48e0bSAndroid Build Coastguard Worker echo "Usage: $0 [-d] [-m] [-n] [-s] afl_output_directory" 1>&2 77*08b48e0bSAndroid Build Coastguard Worker echo 1>&2 78*08b48e0bSAndroid Build Coastguard Worker echo Options: 1>&2 79*08b48e0bSAndroid Build Coastguard Worker echo " -d - include dead fuzzer stats" 1>&2 80*08b48e0bSAndroid Build Coastguard Worker echo " -m - just show minimal stats" 1>&2 81*08b48e0bSAndroid Build Coastguard Worker echo " -n - no color output" 1>&2 82*08b48e0bSAndroid Build Coastguard Worker echo " -s - skip details and output summary results only" 1>&2 83*08b48e0bSAndroid Build Coastguard Worker echo 1>&2 84*08b48e0bSAndroid Build Coastguard Worker exit 1 85*08b48e0bSAndroid Build Coastguard Worker 86*08b48e0bSAndroid Build Coastguard Workerfi 87*08b48e0bSAndroid Build Coastguard Worker 88*08b48e0bSAndroid Build Coastguard Workerif [ -z "$MINIMAL_ONLY" ]; then 89*08b48e0bSAndroid Build Coastguard Worker echo "$0 status check tool for afl-fuzz by Michal Zalewski" 90*08b48e0bSAndroid Build Coastguard Worker echo 91*08b48e0bSAndroid Build Coastguard Workerfi 92*08b48e0bSAndroid Build Coastguard Worker 93*08b48e0bSAndroid Build Coastguard Workercd "$DIR" || exit 1 94*08b48e0bSAndroid Build Coastguard Worker 95*08b48e0bSAndroid Build Coastguard Workerif [ -d queue ]; then 96*08b48e0bSAndroid Build Coastguard Worker 97*08b48e0bSAndroid Build Coastguard Worker echo "[-] Error: parameter is an individual output directory, not a sync dir." 1>&2 98*08b48e0bSAndroid Build Coastguard Worker exit 1 99*08b48e0bSAndroid Build Coastguard Worker 100*08b48e0bSAndroid Build Coastguard Workerfi 101*08b48e0bSAndroid Build Coastguard Worker 102*08b48e0bSAndroid Build Coastguard WorkerBC=`which bc 2>/dev/null` 103*08b48e0bSAndroid Build Coastguard WorkerFUSER=`which fuser 2>/dev/null` 104*08b48e0bSAndroid Build Coastguard Worker 105*08b48e0bSAndroid Build Coastguard Workerif [ -z "$NO_COLOR" ]; then 106*08b48e0bSAndroid Build Coastguard Worker RED=`tput setaf 9 1 1 2>/dev/null` 107*08b48e0bSAndroid Build Coastguard Worker GREEN=`tput setaf 2 1 1 2>/dev/null` 108*08b48e0bSAndroid Build Coastguard Worker BLUE=`tput setaf 4 1 1 2>/dev/null` 109*08b48e0bSAndroid Build Coastguard Worker YELLOW=`tput setaf 11 1 1 2>/dev/null` 110*08b48e0bSAndroid Build Coastguard Worker NC=`tput sgr0` 111*08b48e0bSAndroid Build Coastguard Worker RESET="$NC" 112*08b48e0bSAndroid Build Coastguard Workerfi 113*08b48e0bSAndroid Build Coastguard Worker 114*08b48e0bSAndroid Build Coastguard WorkerCUR_TIME=`date +%s` 115*08b48e0bSAndroid Build Coastguard Worker 116*08b48e0bSAndroid Build Coastguard WorkerTMP=`mktemp -t .afl-whatsup-XXXXXXXX` || TMP=`mktemp -p /data/local/tmp .afl-whatsup-XXXXXXXX` || TMP=`mktemp -p /data/local/tmp .afl-whatsup-XXXXXXXX` || exit 1 117*08b48e0bSAndroid Build Coastguard Worker 118*08b48e0bSAndroid Build Coastguard WorkerALIVE_CNT=0 119*08b48e0bSAndroid Build Coastguard WorkerDEAD_CNT=0 120*08b48e0bSAndroid Build Coastguard WorkerSTART_CNT=0 121*08b48e0bSAndroid Build Coastguard Worker 122*08b48e0bSAndroid Build Coastguard WorkerTOTAL_TIME=0 123*08b48e0bSAndroid Build Coastguard WorkerTOTAL_EXECS=0 124*08b48e0bSAndroid Build Coastguard WorkerTOTAL_EPS=0 125*08b48e0bSAndroid Build Coastguard WorkerTOTAL_CRASHES=0 126*08b48e0bSAndroid Build Coastguard WorkerTOTAL_HANGS=0 127*08b48e0bSAndroid Build Coastguard WorkerTOTAL_PFAV=0 128*08b48e0bSAndroid Build Coastguard WorkerTOTAL_PENDING=0 129*08b48e0bSAndroid Build Coastguard WorkerTOTAL_COVERAGE= 130*08b48e0bSAndroid Build Coastguard Worker 131*08b48e0bSAndroid Build Coastguard Worker# Time since last find / crash / hang, formatted as string 132*08b48e0bSAndroid Build Coastguard WorkerFMT_TIME="0 days 0 hours" 133*08b48e0bSAndroid Build Coastguard WorkerFMT_FIND="${RED}none seen yet${NC}" 134*08b48e0bSAndroid Build Coastguard WorkerFMT_CRASH="none seen yet" 135*08b48e0bSAndroid Build Coastguard WorkerFMT_HANG="none seen yet" 136*08b48e0bSAndroid Build Coastguard Worker 137*08b48e0bSAndroid Build Coastguard Workerif [ "$SUMMARY_ONLY" = "" ]; then 138*08b48e0bSAndroid Build Coastguard Worker 139*08b48e0bSAndroid Build Coastguard Worker echo "Individual fuzzers" 140*08b48e0bSAndroid Build Coastguard Worker echo "==================" 141*08b48e0bSAndroid Build Coastguard Worker echo 142*08b48e0bSAndroid Build Coastguard Worker 143*08b48e0bSAndroid Build Coastguard Workerfi 144*08b48e0bSAndroid Build Coastguard Worker 145*08b48e0bSAndroid Build Coastguard Workerfmt_duration() 146*08b48e0bSAndroid Build Coastguard Worker{ 147*08b48e0bSAndroid Build Coastguard Worker DUR_STRING= 148*08b48e0bSAndroid Build Coastguard Worker if [ $1 -le 0 ]; then 149*08b48e0bSAndroid Build Coastguard Worker return 1 150*08b48e0bSAndroid Build Coastguard Worker fi 151*08b48e0bSAndroid Build Coastguard Worker 152*08b48e0bSAndroid Build Coastguard Worker local duration=$((CUR_TIME - $1)) 153*08b48e0bSAndroid Build Coastguard Worker local days=$((duration / 60 / 60 / 24)) 154*08b48e0bSAndroid Build Coastguard Worker local hours=$(((duration / 60 / 60) % 24)) 155*08b48e0bSAndroid Build Coastguard Worker local minutes=$(((duration / 60) % 60)) 156*08b48e0bSAndroid Build Coastguard Worker local seconds=$((duration % 60)) 157*08b48e0bSAndroid Build Coastguard Worker 158*08b48e0bSAndroid Build Coastguard Worker if [ $duration -le 0 ]; then 159*08b48e0bSAndroid Build Coastguard Worker DUR_STRING="0 seconds" 160*08b48e0bSAndroid Build Coastguard Worker elif [ $duration -eq 1 ]; then 161*08b48e0bSAndroid Build Coastguard Worker DUR_STRING="1 second" 162*08b48e0bSAndroid Build Coastguard Worker elif [ $days -gt 0 ]; then 163*08b48e0bSAndroid Build Coastguard Worker DUR_STRING="$days days, $hours hours" 164*08b48e0bSAndroid Build Coastguard Worker elif [ $hours -gt 0 ]; then 165*08b48e0bSAndroid Build Coastguard Worker DUR_STRING="$hours hours, $minutes minutes" 166*08b48e0bSAndroid Build Coastguard Worker elif [ $minutes -gt 0 ]; then 167*08b48e0bSAndroid Build Coastguard Worker DUR_STRING="$minutes minutes, $seconds seconds" 168*08b48e0bSAndroid Build Coastguard Worker else 169*08b48e0bSAndroid Build Coastguard Worker DUR_STRING="$seconds seconds" 170*08b48e0bSAndroid Build Coastguard Worker fi 171*08b48e0bSAndroid Build Coastguard Worker} 172*08b48e0bSAndroid Build Coastguard Worker 173*08b48e0bSAndroid Build Coastguard WorkerFIRST=true 174*08b48e0bSAndroid Build Coastguard WorkerTOTAL_WCOP= 175*08b48e0bSAndroid Build Coastguard WorkerTOTAL_LAST_FIND=0 176*08b48e0bSAndroid Build Coastguard Worker 177*08b48e0bSAndroid Build Coastguard Workerfor j in `find . -maxdepth 2 -iname fuzzer_setup | sort`; do 178*08b48e0bSAndroid Build Coastguard Worker 179*08b48e0bSAndroid Build Coastguard Worker DIR=$(dirname "$j") 180*08b48e0bSAndroid Build Coastguard Worker i=$DIR/fuzzer_stats 181*08b48e0bSAndroid Build Coastguard Worker 182*08b48e0bSAndroid Build Coastguard Worker if [ -f "$i" ]; then 183*08b48e0bSAndroid Build Coastguard Worker 184*08b48e0bSAndroid Build Coastguard Worker sed 's/^command_line.*$/_skip:1/;s/[ ]*:[ ]*/="/;s/$/"/' "$i" >"$TMP" 185*08b48e0bSAndroid Build Coastguard Worker . "$TMP" 186*08b48e0bSAndroid Build Coastguard Worker DIRECTORY=$DIR 187*08b48e0bSAndroid Build Coastguard Worker DIR=${DIR##*/} 188*08b48e0bSAndroid Build Coastguard Worker RUN_UNIX=$run_time 189*08b48e0bSAndroid Build Coastguard Worker RUN_DAYS=$((RUN_UNIX / 60 / 60 / 24)) 190*08b48e0bSAndroid Build Coastguard Worker RUN_HRS=$(((RUN_UNIX / 60 / 60) % 24)) 191*08b48e0bSAndroid Build Coastguard Worker COVERAGE=$(echo $bitmap_cvg|tr -d %) 192*08b48e0bSAndroid Build Coastguard Worker if [ -n "$TOTAL_COVERAGE" -a -n "$COVERAGE" -a -n "$BC" ]; then 193*08b48e0bSAndroid Build Coastguard Worker if [ "$(echo "$TOTAL_COVERAGE < $COVERAGE" | bc)" -eq 1 ]; then 194*08b48e0bSAndroid Build Coastguard Worker TOTAL_COVERAGE=$COVERAGE 195*08b48e0bSAndroid Build Coastguard Worker fi 196*08b48e0bSAndroid Build Coastguard Worker fi 197*08b48e0bSAndroid Build Coastguard Worker if [ -z "$TOTAL_COVERAGE" ]; then TOTAL_COVERAGE=$COVERAGE ; fi 198*08b48e0bSAndroid Build Coastguard Worker 199*08b48e0bSAndroid Build Coastguard Worker test -n "$cycles_wo_finds" && { 200*08b48e0bSAndroid Build Coastguard Worker test -z "$FIRST" && TOTAL_WCOP="${TOTAL_WCOP}/" 201*08b48e0bSAndroid Build Coastguard Worker TOTAL_WCOP="${TOTAL_WCOP}${cycles_wo_finds}" 202*08b48e0bSAndroid Build Coastguard Worker FIRST= 203*08b48e0bSAndroid Build Coastguard Worker } 204*08b48e0bSAndroid Build Coastguard Worker 205*08b48e0bSAndroid Build Coastguard Worker if [ "$SUMMARY_ONLY" = "" ]; then 206*08b48e0bSAndroid Build Coastguard Worker 207*08b48e0bSAndroid Build Coastguard Worker echo ">>> $afl_banner instance: $DIR ($RUN_DAYS days, $RUN_HRS hrs) fuzzer PID: $fuzzer_pid <<<" 208*08b48e0bSAndroid Build Coastguard Worker echo 209*08b48e0bSAndroid Build Coastguard Worker 210*08b48e0bSAndroid Build Coastguard Worker fi 211*08b48e0bSAndroid Build Coastguard Worker 212*08b48e0bSAndroid Build Coastguard Worker if ! kill -0 "$fuzzer_pid" 2>/dev/null; then 213*08b48e0bSAndroid Build Coastguard Worker 214*08b48e0bSAndroid Build Coastguard Worker IS_STARTING= 215*08b48e0bSAndroid Build Coastguard Worker IS_DEAD= 216*08b48e0bSAndroid Build Coastguard Worker 217*08b48e0bSAndroid Build Coastguard Worker if [ -e "$i" ] && [ -e "$j" ] && [ -n "$FUSER" ]; then 218*08b48e0bSAndroid Build Coastguard Worker 219*08b48e0bSAndroid Build Coastguard Worker if [ "$i" -ot "$j" ]; then 220*08b48e0bSAndroid Build Coastguard Worker 221*08b48e0bSAndroid Build Coastguard Worker # fuzzer_setup is newer than fuzzer_stats, maybe the instance is starting? 222*08b48e0bSAndroid Build Coastguard Worker TMP_PID=`fuser -v "$DIRECTORY" 2>&1 | grep afl-fuzz` 223*08b48e0bSAndroid Build Coastguard Worker 224*08b48e0bSAndroid Build Coastguard Worker if [ -n "$TMP_PID" ]; then 225*08b48e0bSAndroid Build Coastguard Worker 226*08b48e0bSAndroid Build Coastguard Worker if [ "$SUMMARY_ONLY" = "" ]; then 227*08b48e0bSAndroid Build Coastguard Worker 228*08b48e0bSAndroid Build Coastguard Worker echo " Instance is still starting up, skipping." 229*08b48e0bSAndroid Build Coastguard Worker echo 230*08b48e0bSAndroid Build Coastguard Worker 231*08b48e0bSAndroid Build Coastguard Worker fi 232*08b48e0bSAndroid Build Coastguard Worker 233*08b48e0bSAndroid Build Coastguard Worker START_CNT=$((START_CNT + 1)) 234*08b48e0bSAndroid Build Coastguard Worker last_find=0 235*08b48e0bSAndroid Build Coastguard Worker IS_STARTING=1 236*08b48e0bSAndroid Build Coastguard Worker 237*08b48e0bSAndroid Build Coastguard Worker if [ "$PROCESS_DEAD" = "" ]; then 238*08b48e0bSAndroid Build Coastguard Worker 239*08b48e0bSAndroid Build Coastguard Worker continue 240*08b48e0bSAndroid Build Coastguard Worker 241*08b48e0bSAndroid Build Coastguard Worker fi 242*08b48e0bSAndroid Build Coastguard Worker 243*08b48e0bSAndroid Build Coastguard Worker fi 244*08b48e0bSAndroid Build Coastguard Worker 245*08b48e0bSAndroid Build Coastguard Worker fi 246*08b48e0bSAndroid Build Coastguard Worker 247*08b48e0bSAndroid Build Coastguard Worker fi 248*08b48e0bSAndroid Build Coastguard Worker 249*08b48e0bSAndroid Build Coastguard Worker if [ -z "$IS_STARTING" ]; then 250*08b48e0bSAndroid Build Coastguard Worker 251*08b48e0bSAndroid Build Coastguard Worker if [ "$SUMMARY_ONLY" = "" ]; then 252*08b48e0bSAndroid Build Coastguard Worker 253*08b48e0bSAndroid Build Coastguard Worker echo " Instance is dead or running remotely, skipping." 254*08b48e0bSAndroid Build Coastguard Worker echo 255*08b48e0bSAndroid Build Coastguard Worker 256*08b48e0bSAndroid Build Coastguard Worker fi 257*08b48e0bSAndroid Build Coastguard Worker 258*08b48e0bSAndroid Build Coastguard Worker DEAD_CNT=$((DEAD_CNT + 1)) 259*08b48e0bSAndroid Build Coastguard Worker IS_DEAD=1 260*08b48e0bSAndroid Build Coastguard Worker last_find=0 261*08b48e0bSAndroid Build Coastguard Worker 262*08b48e0bSAndroid Build Coastguard Worker if [ "$PROCESS_DEAD" = "" ]; then 263*08b48e0bSAndroid Build Coastguard Worker 264*08b48e0bSAndroid Build Coastguard Worker continue 265*08b48e0bSAndroid Build Coastguard Worker 266*08b48e0bSAndroid Build Coastguard Worker fi 267*08b48e0bSAndroid Build Coastguard Worker 268*08b48e0bSAndroid Build Coastguard Worker fi 269*08b48e0bSAndroid Build Coastguard Worker 270*08b48e0bSAndroid Build Coastguard Worker fi 271*08b48e0bSAndroid Build Coastguard Worker 272*08b48e0bSAndroid Build Coastguard Worker ALIVE_CNT=$((ALIVE_CNT + 1)) 273*08b48e0bSAndroid Build Coastguard Worker 274*08b48e0bSAndroid Build Coastguard Worker EXEC_SEC=0 275*08b48e0bSAndroid Build Coastguard Worker test -z "$RUN_UNIX" -o "$RUN_UNIX" = 0 || EXEC_SEC=$((execs_done / RUN_UNIX)) 276*08b48e0bSAndroid Build Coastguard Worker PATH_PERC=$((cur_item * 100 / corpus_count)) 277*08b48e0bSAndroid Build Coastguard Worker 278*08b48e0bSAndroid Build Coastguard Worker TOTAL_TIME=$((TOTAL_TIME + RUN_UNIX)) 279*08b48e0bSAndroid Build Coastguard Worker TOTAL_EPS=$((TOTAL_EPS + EXEC_SEC)) 280*08b48e0bSAndroid Build Coastguard Worker TOTAL_EXECS=$((TOTAL_EXECS + execs_done)) 281*08b48e0bSAndroid Build Coastguard Worker TOTAL_CRASHES=$((TOTAL_CRASHES + saved_crashes)) 282*08b48e0bSAndroid Build Coastguard Worker TOTAL_HANGS=$((TOTAL_HANGS + saved_hangs)) 283*08b48e0bSAndroid Build Coastguard Worker TOTAL_PENDING=$((TOTAL_PENDING + pending_total)) 284*08b48e0bSAndroid Build Coastguard Worker TOTAL_PFAV=$((TOTAL_PFAV + pending_favs)) 285*08b48e0bSAndroid Build Coastguard Worker 286*08b48e0bSAndroid Build Coastguard Worker if [ "$last_find" -gt "$TOTAL_LAST_FIND" ]; then 287*08b48e0bSAndroid Build Coastguard Worker TOTAL_LAST_FIND=$last_find 288*08b48e0bSAndroid Build Coastguard Worker fi 289*08b48e0bSAndroid Build Coastguard Worker 290*08b48e0bSAndroid Build Coastguard Worker if [ "$SUMMARY_ONLY" = "" ]; then 291*08b48e0bSAndroid Build Coastguard Worker 292*08b48e0bSAndroid Build Coastguard Worker # Warnings in red 293*08b48e0bSAndroid Build Coastguard Worker TIMEOUT_PERC=$((exec_timeout * 100 / execs_done)) 294*08b48e0bSAndroid Build Coastguard Worker if [ $TIMEOUT_PERC -ge 10 ]; then 295*08b48e0bSAndroid Build Coastguard Worker echo " ${RED}timeout_ratio $TIMEOUT_PERC%${NC}" 296*08b48e0bSAndroid Build Coastguard Worker fi 297*08b48e0bSAndroid Build Coastguard Worker 298*08b48e0bSAndroid Build Coastguard Worker if [ $EXEC_SEC -eq 0 ]; then 299*08b48e0bSAndroid Build Coastguard Worker echo " ${YELLOW}no data yet, 0 execs/sec${NC}" 300*08b48e0bSAndroid Build Coastguard Worker elif [ $EXEC_SEC -lt 100 ]; then 301*08b48e0bSAndroid Build Coastguard Worker echo " ${RED}slow execution, $EXEC_SEC execs/sec${NC}" 302*08b48e0bSAndroid Build Coastguard Worker fi 303*08b48e0bSAndroid Build Coastguard Worker 304*08b48e0bSAndroid Build Coastguard Worker fmt_duration $last_find && FMT_FIND=$DUR_STRING 305*08b48e0bSAndroid Build Coastguard Worker fmt_duration $last_crash && FMT_CRASH=$DUR_STRING 306*08b48e0bSAndroid Build Coastguard Worker fmt_duration $last_hang && FMT_HANG=$DUR_STRING 307*08b48e0bSAndroid Build Coastguard Worker FMT_CWOP="not available" 308*08b48e0bSAndroid Build Coastguard Worker test -n "$cycles_wo_finds" && { 309*08b48e0bSAndroid Build Coastguard Worker test "$cycles_wo_finds" = 0 && FMT_CWOP="$cycles_wo_finds" 310*08b48e0bSAndroid Build Coastguard Worker test "$cycles_wo_finds" -gt 10 && FMT_CWOP="${YELLOW}$cycles_wo_finds${NC}" 311*08b48e0bSAndroid Build Coastguard Worker test "$cycles_wo_finds" -gt 50 && FMT_CWOP="${RED}$cycles_wo_finds${NC}" 312*08b48e0bSAndroid Build Coastguard Worker } 313*08b48e0bSAndroid Build Coastguard Worker 314*08b48e0bSAndroid Build Coastguard Worker echo " last_find : $FMT_FIND" 315*08b48e0bSAndroid Build Coastguard Worker echo " last_crash : $FMT_CRASH" 316*08b48e0bSAndroid Build Coastguard Worker if [ -z "$MINIMAL_ONLY" ]; then 317*08b48e0bSAndroid Build Coastguard Worker echo " last_hang : $FMT_HANG" 318*08b48e0bSAndroid Build Coastguard Worker echo " cycles_wo_finds : $FMT_CWOP" 319*08b48e0bSAndroid Build Coastguard Worker fi 320*08b48e0bSAndroid Build Coastguard Worker echo " coverage : $COVERAGE%" 321*08b48e0bSAndroid Build Coastguard Worker 322*08b48e0bSAndroid Build Coastguard Worker if [ -z "$MINIMAL_ONLY" ]; then 323*08b48e0bSAndroid Build Coastguard Worker 324*08b48e0bSAndroid Build Coastguard Worker CPU_USAGE=$(ps aux | grep -w $fuzzer_pid | grep -v grep | awk '{print $3}') 325*08b48e0bSAndroid Build Coastguard Worker MEM_USAGE=$(ps aux | grep -w $fuzzer_pid | grep -v grep | awk '{print $4}') 326*08b48e0bSAndroid Build Coastguard Worker 327*08b48e0bSAndroid Build Coastguard Worker echo " cpu usage $CPU_USAGE%, memory usage $MEM_USAGE%" 328*08b48e0bSAndroid Build Coastguard Worker 329*08b48e0bSAndroid Build Coastguard Worker fi 330*08b48e0bSAndroid Build Coastguard Worker 331*08b48e0bSAndroid Build Coastguard Worker echo " cycles $((cycles_done + 1)), lifetime speed $EXEC_SEC execs/sec, items $cur_item/$corpus_count (${PATH_PERC}%)" 332*08b48e0bSAndroid Build Coastguard Worker 333*08b48e0bSAndroid Build Coastguard Worker if [ "$saved_crashes" = "0" ]; then 334*08b48e0bSAndroid Build Coastguard Worker echo " pending $pending_favs/$pending_total, coverage $bitmap_cvg, no crashes yet" 335*08b48e0bSAndroid Build Coastguard Worker else 336*08b48e0bSAndroid Build Coastguard Worker echo " pending $pending_favs/$pending_total, coverage $bitmap_cvg, crashes saved $saved_crashes (!)" 337*08b48e0bSAndroid Build Coastguard Worker fi 338*08b48e0bSAndroid Build Coastguard Worker 339*08b48e0bSAndroid Build Coastguard Worker echo 340*08b48e0bSAndroid Build Coastguard Worker 341*08b48e0bSAndroid Build Coastguard Worker fi 342*08b48e0bSAndroid Build Coastguard Worker 343*08b48e0bSAndroid Build Coastguard Worker else 344*08b48e0bSAndroid Build Coastguard Worker 345*08b48e0bSAndroid Build Coastguard Worker if [ ! -e "$i" -a -e "$j" ]; then 346*08b48e0bSAndroid Build Coastguard Worker 347*08b48e0bSAndroid Build Coastguard Worker if [ '!' "$PROCESS_DEAD" = "" ]; then 348*08b48e0bSAndroid Build Coastguard Worker ALIVE_CNT=$((ALIVE_CNT + 1)) 349*08b48e0bSAndroid Build Coastguard Worker fi 350*08b48e0bSAndroid Build Coastguard Worker START_CNT=$((START_CNT + 1)) 351*08b48e0bSAndroid Build Coastguard Worker last_find=0 352*08b48e0bSAndroid Build Coastguard Worker IS_STARTING=1 353*08b48e0bSAndroid Build Coastguard Worker 354*08b48e0bSAndroid Build Coastguard Worker fi 355*08b48e0bSAndroid Build Coastguard Worker 356*08b48e0bSAndroid Build Coastguard Worker fi 357*08b48e0bSAndroid Build Coastguard Worker 358*08b48e0bSAndroid Build Coastguard Workerdone 359*08b48e0bSAndroid Build Coastguard Worker 360*08b48e0bSAndroid Build Coastguard Worker# Formatting for total time, time since last find, crash, and hang 361*08b48e0bSAndroid Build Coastguard Workerfmt_duration $((CUR_TIME - TOTAL_TIME)) && FMT_TIME=$DUR_STRING 362*08b48e0bSAndroid Build Coastguard Worker# Formatting for total execution 363*08b48e0bSAndroid Build Coastguard WorkerFMT_EXECS="0 millions" 364*08b48e0bSAndroid Build Coastguard WorkerEXECS_MILLION=$((TOTAL_EXECS / 1000 / 1000)) 365*08b48e0bSAndroid Build Coastguard WorkerEXECS_THOUSAND=$((TOTAL_EXECS / 1000 % 1000)) 366*08b48e0bSAndroid Build Coastguard Workerif [ $EXECS_MILLION -gt 9 ]; then 367*08b48e0bSAndroid Build Coastguard Worker FMT_EXECS="$EXECS_MILLION millions" 368*08b48e0bSAndroid Build Coastguard Worker elif [ $EXECS_MILLION -gt 0 ]; then 369*08b48e0bSAndroid Build Coastguard Worker FMT_EXECS="$EXECS_MILLION millions, $EXECS_THOUSAND thousands" 370*08b48e0bSAndroid Build Coastguard Workerelse 371*08b48e0bSAndroid Build Coastguard Worker FMT_EXECS="$EXECS_THOUSAND thousands" 372*08b48e0bSAndroid Build Coastguard Workerfi 373*08b48e0bSAndroid Build Coastguard Worker 374*08b48e0bSAndroid Build Coastguard Workerrm -f "$TMP" 375*08b48e0bSAndroid Build Coastguard Worker 376*08b48e0bSAndroid Build Coastguard WorkerTOTAL_DAYS=$((TOTAL_TIME / 60 / 60 / 24)) 377*08b48e0bSAndroid Build Coastguard WorkerTOTAL_HRS=$(((TOTAL_TIME / 60 / 60) % 24)) 378*08b48e0bSAndroid Build Coastguard Worker 379*08b48e0bSAndroid Build Coastguard Workertest -z "$TOTAL_WCOP" && TOTAL_WCOP="not available" 380*08b48e0bSAndroid Build Coastguard Workerfmt_duration $TOTAL_LAST_FIND && TOTAL_LAST_FIND=$DUR_STRING 381*08b48e0bSAndroid Build Coastguard Worker 382*08b48e0bSAndroid Build Coastguard Workertest "$TOTAL_TIME" = "0" && TOTAL_TIME=1 383*08b48e0bSAndroid Build Coastguard Worker 384*08b48e0bSAndroid Build Coastguard Workerif [ "$PROCESS_DEAD" = "" ]; then 385*08b48e0bSAndroid Build Coastguard Worker 386*08b48e0bSAndroid Build Coastguard Worker TXT="excluded from stats" 387*08b48e0bSAndroid Build Coastguard Worker 388*08b48e0bSAndroid Build Coastguard Workerelse 389*08b48e0bSAndroid Build Coastguard Worker 390*08b48e0bSAndroid Build Coastguard Worker TXT="included in stats" 391*08b48e0bSAndroid Build Coastguard Worker ALIVE_CNT=$(($ALIVE_CNT - $DEAD_CNT - $START_CNT)) 392*08b48e0bSAndroid Build Coastguard Worker 393*08b48e0bSAndroid Build Coastguard Workerfi 394*08b48e0bSAndroid Build Coastguard Worker 395*08b48e0bSAndroid Build Coastguard Workerecho "Summary stats" 396*08b48e0bSAndroid Build Coastguard Workerecho "=============" 397*08b48e0bSAndroid Build Coastguard Workerif [ -z "$SUMMARY_ONLY" -o -z "$MINIMAL_ONLY" ]; then 398*08b48e0bSAndroid Build Coastguard Worker echo 399*08b48e0bSAndroid Build Coastguard Workerfi 400*08b48e0bSAndroid Build Coastguard Worker 401*08b48e0bSAndroid Build Coastguard Workerecho " Fuzzers alive : $ALIVE_CNT" 402*08b48e0bSAndroid Build Coastguard Worker 403*08b48e0bSAndroid Build Coastguard Workerif [ ! "$START_CNT" = "0" ]; then 404*08b48e0bSAndroid Build Coastguard Worker echo " Starting up : $START_CNT ($TXT)" 405*08b48e0bSAndroid Build Coastguard Workerfi 406*08b48e0bSAndroid Build Coastguard Worker 407*08b48e0bSAndroid Build Coastguard Workerif [ ! "$DEAD_CNT" = "0" ]; then 408*08b48e0bSAndroid Build Coastguard Worker echo " Dead or remote : $DEAD_CNT ($TXT)" 409*08b48e0bSAndroid Build Coastguard Workerfi 410*08b48e0bSAndroid Build Coastguard Worker 411*08b48e0bSAndroid Build Coastguard Workerecho " Total run time : $FMT_TIME" 412*08b48e0bSAndroid Build Coastguard Workerif [ -z "$MINIMAL_ONLY" ]; then 413*08b48e0bSAndroid Build Coastguard Worker echo " Total execs : $FMT_EXECS" 414*08b48e0bSAndroid Build Coastguard Worker echo " Cumulative speed : $TOTAL_EPS execs/sec" 415*08b48e0bSAndroid Build Coastguard Workerfi 416*08b48e0bSAndroid Build Coastguard Workerif [ "$ALIVE_CNT" -gt "0" ]; then 417*08b48e0bSAndroid Build Coastguard Worker echo " Average speed : $((TOTAL_EPS / ALIVE_CNT)) execs/sec" 418*08b48e0bSAndroid Build Coastguard Workerfi 419*08b48e0bSAndroid Build Coastguard Workerif [ -z "$MINIMAL_ONLY" ]; then 420*08b48e0bSAndroid Build Coastguard Worker echo " Pending items : $TOTAL_PFAV faves, $TOTAL_PENDING total" 421*08b48e0bSAndroid Build Coastguard Workerfi 422*08b48e0bSAndroid Build Coastguard Worker 423*08b48e0bSAndroid Build Coastguard Workerif [ "$ALIVE_CNT" -gt "1" -o -n "$MINIMAL_ONLY" ]; then 424*08b48e0bSAndroid Build Coastguard Worker if [ "$ALIVE_CNT" -gt "0" ]; then 425*08b48e0bSAndroid Build Coastguard Worker echo " Pending per fuzzer : $((TOTAL_PFAV/ALIVE_CNT)) faves, $((TOTAL_PENDING/ALIVE_CNT)) total (on average)" 426*08b48e0bSAndroid Build Coastguard Worker fi 427*08b48e0bSAndroid Build Coastguard Workerfi 428*08b48e0bSAndroid Build Coastguard Worker 429*08b48e0bSAndroid Build Coastguard Workerecho " Coverage reached : ${TOTAL_COVERAGE}%" 430*08b48e0bSAndroid Build Coastguard Workerecho " Crashes saved : $TOTAL_CRASHES" 431*08b48e0bSAndroid Build Coastguard Workerif [ -z "$MINIMAL_ONLY" ]; then 432*08b48e0bSAndroid Build Coastguard Worker echo " Hangs saved : $TOTAL_HANGS" 433*08b48e0bSAndroid Build Coastguard Worker echo "Cycles without finds : $TOTAL_WCOP" 434*08b48e0bSAndroid Build Coastguard Workerfi 435*08b48e0bSAndroid Build Coastguard Workerecho " Time without finds : $TOTAL_LAST_FIND" 436*08b48e0bSAndroid Build Coastguard Workerecho 437*08b48e0bSAndroid Build Coastguard Worker 438*08b48e0bSAndroid Build Coastguard Workerexit 0 439