xref: /spdk/test/fuzz/llvm/vfio/run.sh (revision 1078198e78653b2f39414c1566740018d76ee73d)
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