Skip to content

Commit d38bdd0

Browse files
committed
feat(fuzzing_image): add rss_limit_mb libfuzzer flag support
Rss limits Co-authored-by: jewelofchaos9 <[email protected]>
1 parent e844749 commit d38bdd0

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

container-builds/fuzzing-container/run.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ mem="16G"
1313
jobs_="$cpus"
1414
workers='0'
1515
avm='off'
16+
rss_limit='2048 '
1617

1718
show_help() {
1819
echo "Usage: $0 [options]"
@@ -28,6 +29,7 @@ show_help() {
2829
echo " -m, --mode <mode> Set the mode of operation (fuzzing, coverage or regress-only) (default: $mode)"
2930
echo " -a, --asm <mode> Set the flag to enable/disable asm instructions (on/off) (default: $asm)"
3031
echo " -A, --avm Enable AVM fuzzing mode (uses build-fuzzing-avm) (default: $avm)"
32+
echo " -r, --rss-limit <MB> Set RSS limit in megabytes (default: 2048 MB)"
3133
echo " -h, --help Display this help and exit"
3234
echo " --show-fuzzers Display the available fuzzers"
3335
echo ""
@@ -73,6 +75,10 @@ while [[ $# -gt 0 ]]; do
7375
avm='on'
7476
shift
7577
;;
78+
-r | --rss-limit)
79+
rss_limit="$2"
80+
shift 2
81+
;;
7682
-c | --cpus)
7783
cpus="$2"
7884
shift 2
@@ -147,6 +153,7 @@ entrypoint_args=(
147153
--workers "$workers"
148154
--jobs "$jobs_"
149155
--verbosity "$verbosity"
156+
--rss-limit "$rss_limit"
150157
)
151158

152159
docker run "${docker_args[@]}" "${entrypoint_args[@]}"

container-builds/fuzzing-container/src/entrypoint.sh

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ workers='0'
1414
asm='on'
1515
show_only=0
1616
avm='off'
17+
rss_limit='2048'
1718

1819
set_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

Comments
 (0)