1#!/usr/bin/env bash 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright (C) 2022 Intel Corporation 4# All rights reserved. 5# 6FUZZER=vfio 7if [[ $SPDK_TEST_FUZZER_SHORT -eq 0 ]]; then 8 TIME=60000 9else 10 TIME=1 11fi 12 13for i in "$@"; do 14 case "$i" in 15 --time=*) 16 TIME="${i#*=}" 17 ;; 18 esac 19done 20 21function start_llvm_fuzz() { 22 local fuzzer_type=$1 23 local timen=$2 24 local core=$3 25 local corpus_dir=$rootdir/../corpus/llvm_vfio_$fuzzer_type 26 local fuzzer_dir=/tmp/vfio-user-$fuzzer_type 27 local vfiouser_dir=$fuzzer_dir/domain/1 28 local vfiouser_io_dir=$fuzzer_dir/domain/2 29 local vfiouser_cfg=$fuzzer_dir/fuzz_vfio_json.conf 30 31 mkdir -p $fuzzer_dir $vfiouser_dir $vfiouser_io_dir $corpus_dir 32 33 # Adjust paths to allow multiply instance of fuzzer 34 sed -e "s%/tmp/vfio-user/domain/1%$vfiouser_dir%; 35 s%/tmp/vfio-user/domain/2%$vfiouser_io_dir%" $testdir/fuzz_vfio_json.conf > $vfiouser_cfg 36 37 $rootdir/test/app/fuzz/llvm_vfio_fuzz/llvm_vfio_fuzz \ 38 -m $core \ 39 -s $mem_size \ 40 -P $output_dir/llvm/ \ 41 -F $vfiouser_dir \ 42 -c $vfiouser_cfg \ 43 -t $timen \ 44 -D $corpus_dir \ 45 -Y $vfiouser_io_dir \ 46 -r $fuzzer_dir/spdk$fuzzer_type.sock \ 47 -Z $fuzzer_type 48 49 rm -rf $fuzzer_dir 50} 51 52testdir=$(readlink -f $(dirname $0)) 53rootdir=$(readlink -f $testdir/../../../../) 54source $rootdir/test/common/autotest_common.sh 55source $rootdir/test/setup/common.sh 56source $testdir/../common.sh 57 58fuzzfile=$rootdir/test/app/fuzz/llvm_vfio_fuzz/llvm_vfio_fuzz.c 59fuzz_num=$(($(grep -c "\.fn =" $fuzzfile) - 1)) 60((fuzz_num != 0)) 61 62trap 'cleanup /tmp/vfio-user-*; exit 1' SIGINT SIGTERM EXIT 63 64# vfiouser transport is unable to connect if memory is restricted 65mem_size=0 66if [[ $SPDK_TEST_FUZZER_SHORT -eq 1 ]]; then 67 start_llvm_fuzz_short $fuzz_num $TIME 68elif [[ $SPDK_TEST_FUZZER -eq 1 ]]; then 69 get_testn $fuzz_num 2048 70 start_llvm_fuzz_all $TESTN $fuzz_num $TIME 71else 72 start_llvm_fuzz $1 $TIME 0x1 73fi 74 75trap - SIGINT SIGTERM EXIT 76