@@ -14,6 +14,7 @@ workers='0'
1414asm=' on'
1515show_only=0
1616avm=' off'
17+ rss_limit=' 2048'
1718
1819set_main_fuzzer () {
1920 main_fuzzer=' '
@@ -62,6 +63,7 @@ show_help() {
6263 echo " -m, --mode <mode> Set the mode of operation (fuzzing, coverage or regress-only) (default: $mode )"
6364 echo " -a, --asm <mode> Set the flag to enable/disable asm instructions (on/off) (default: $asm )"
6465 echo " -A, --avm <mode> Enable AVM fuzzing mode (uses build-fuzzing-avm) (on/off) (default: $avm )"
66+ echo " -r, --rss-limit <MB> Set RSS limit in megabytes (default: 2048 MB)"
6567 echo " -h, --help Display this help and exit"
6668 echo " --show-fuzzers Display the available fuzzers"
6769 echo " "
@@ -113,6 +115,10 @@ while [[ $# -gt 0 ]]; do
113115 avm=" $2 "
114116 shift 2
115117 ;;
118+ -r | --rss-limit)
119+ rss_limit=" $2 "
120+ shift 2
121+ ;;
116122 -h | --help)
117123 show_help
118124 exit 0
@@ -214,18 +220,21 @@ fuzz() {
214220 MINDIR=" "
215221 trap ' rm -rf "$TMPOUT"' EXIT
216222
217- log " Start $fuzzer with: max_total_time: $timeout , $jobs_ jobs and $workers workers"
218- " $main_fuzzer " -max_total_time=" $timeout " -verbosity=" $verbosity " -artifact_prefix=" $TMPOUT /" -jobs=" $jobs_ " -workers=" $workers " -entropic=1 -shrink=1 -use_value_profile=1 -print_final_stats=1 " $CORPUS " & > " $TMPOUT /session.log"
223+
224+ log " Start $fuzzer with: max_total_time: $timeout , $jobs_ jobs and $workers workers, rss_limit: $rss_limit MB"
225+ log " Running command: $main_fuzzer -max_total_time=$timeout -verbosity=$verbosity -artifact_prefix=$TMPOUT / -jobs=$jobs_ -workers=$workers -rss_limit_mb=$rss_limit -entropic=1 -shrink=1 -use_value_profile=1 -print_final_stats=1 $CORPUS "
226+ " $main_fuzzer " -max_total_time=" $timeout " -verbosity=" $verbosity " -artifact_prefix=" $TMPOUT /" -jobs=" $jobs_ " -workers=" $workers " -rss_limit_mb=" $rss_limit " -entropic=1 -shrink=1 -use_value_profile=1 -print_final_stats=1 " $CORPUS " & > " $TMPOUT /session.log"
219227 status=$?
220228
221229 log " Fuzzer stopped"
222230
223231 files=(" $TMPOUT " /crash-* )
224232 timeout_files=(" $TMPOUT " /timeout-* )
233+ oom_files=(" $TMPOUT " /oom-* )
225234
226235 exit_code=0
227236 if [ ${# files[@]} -eq 0 ] || [ ! -e " ${files[0]} " ]; then
228- if [[ " $status " -ne 0 ]] && [ ! ${# timeout_files[@]} -eq " $workers " ]; then
237+ if [[ " $status " -ne 0 ]] && [ ! ${# timeout_files[@]} -eq " $workers " ] && [ ! ${ # oom_files[@]} -eq " $workers " ] ; then
229238 log " Something wrong with $fuzzer . Not related to fuzzing. Exit status: $status "
230239 exit_code=1
231240 else
@@ -239,7 +248,7 @@ fuzz() {
239248
240249 MINDIR=$( mktemp -d)
241250 mv " $TMPOUT /$crash_name " " $MINDIR "
242- " $main_fuzzer " -minimize_crash=1 -runs=10000 -artifact_prefix=" $MINDIR /" " $MINDIR /$crash_name " & >> " $TMPOUT /minimize.log"
251+ " $main_fuzzer " -minimize_crash=1 -runs=10000 -rss_limit_mb= " $rss_limit " - artifact_prefix=" $MINDIR /" " $MINDIR /$crash_name " & >> " $TMPOUT /minimize.log"
243252
244253 smallest_crash=$( ls -S " $MINDIR /" | tail -n 1)
245254 log " Minimized $smallest_crash : $( wc -c < $MINDIR /$smallest_crash ) B"
@@ -257,7 +266,7 @@ fuzz() {
257266 MINCORP=" $TMPOUT /corpus"
258267 mkdir -p " $MINCORP "
259268
260- " $main_fuzzer " -merge=1 -jobs=" $jobs_ " -workers=" $workers " " $MINCORP " " $CORPUS "
269+ " $main_fuzzer " -merge=1 -jobs=" $jobs_ " -rss_limit_mb= " $rss_limit " - workers=" $workers " " $MINCORP " " $CORPUS "
261270 rm -rf " $CORPUS "
262271 mv " $MINCORP " " $CORPUS "
263272 log " Minimized the corpus to size $( find " $CORPUS " -type f | wc -l) "
@@ -298,7 +307,7 @@ cov() {
298307
299308 log " Collecting coverage data on corpus..."
300309 LLVM_PROFILE_FILE=" $RAWCOV /${TS} -%p.profraw" \
301- " $cov_fuzzer " -merge=1 " $TMPOUT " " $CORPUS /"
310+ " $cov_fuzzer " -merge=1 -rss_limit_mb= " $rss_limit " " $TMPOUT " " $CORPUS /"
302311
303312 log " Merging coverage data..."
304313 llvm-profdata-18 merge -sparse " $RAWCOV /" * .profraw \
0 commit comments