test/nvmf: add vfio-user fuzzing target
Add test to per-patch/nightly CI pipeline job Change-Id: I6e1f92158ccc549967234a9a4e78330f2ccb9c9e Signed-off-by: Sebastian Brzezinka <sebastian.brzezinka@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13818 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
ce57899f2d
commit
66e8a09181
@ -346,7 +346,11 @@ if [ $SPDK_RUN_FUNCTIONAL_TEST -eq 1 ]; then
|
||||
if [[ $SPDK_TEST_FUZZER -eq 1 ]]; then
|
||||
# TODO: Consider re-using test/fuzz directory for all fuzzing tests with proper
|
||||
# structure, e.g.: test/fuzz/nvmf/*, test/fuzz/vfio/*, etc.
|
||||
run_test "nvmf_llvm_fuzz" test/nvmf/target/llvm_nvme_fuzz.sh
|
||||
if [[ $SPDK_TEST_VFIOUSER -eq 1 ]]; then
|
||||
run_test "nvmf_vfio_llvm_fuzz" test/nvmf/target/llvm_vfio_fuzz.sh
|
||||
else
|
||||
run_test "nvmf_llvm_fuzz" test/nvmf/target/llvm_nvme_fuzz.sh
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
89
test/nvmf/target/fuzz_vfio_json.conf
Normal file
89
test/nvmf/target/fuzz_vfio_json.conf
Normal file
@ -0,0 +1,89 @@
|
||||
{
|
||||
"subsystems": [
|
||||
{
|
||||
"subsystem": "bdev",
|
||||
"config": [
|
||||
{
|
||||
"method": "bdev_malloc_create",
|
||||
"params": {
|
||||
"name": "Malloc0",
|
||||
"num_blocks": 131072,
|
||||
"block_size": 512,
|
||||
"uuid": "6d6a0bf0-b712-40a7-8730-8f45797cc355"
|
||||
}
|
||||
},
|
||||
{
|
||||
"method": "bdev_wait_for_examine"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"subsystem": "nvmf",
|
||||
"config": [
|
||||
{
|
||||
"method": "nvmf_set_config",
|
||||
"params": {
|
||||
"poll_groups_mask": "0x1",
|
||||
"admin_cmd_passthru": {
|
||||
"identify_ctrlr": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"method": "nvmf_create_transport",
|
||||
"params": {
|
||||
"trtype": "VFIOUSER",
|
||||
"max_queue_depth": 128,
|
||||
"max_io_qpairs_per_ctrlr": 127,
|
||||
"in_capsule_data_size": 4096,
|
||||
"max_io_size": 131072,
|
||||
"io_unit_size": 8192,
|
||||
"max_aq_depth": 128,
|
||||
"num_shared_buffers": 511,
|
||||
"buf_cache_size": 32,
|
||||
"dif_insert_or_strip": false,
|
||||
"c2h_success": false,
|
||||
"sock_priority": 0,
|
||||
"abort_timeout_sec": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"method": "nvmf_create_subsystem",
|
||||
"params": {
|
||||
"nqn": "nqn.2016-06.io.spdk:cnode1",
|
||||
"allow_any_host": true,
|
||||
"serial_number": "SPDK00000000000001",
|
||||
"model_number": "SPDK bdev Controller",
|
||||
"max_namespaces": 32,
|
||||
"min_cntlid": 1,
|
||||
"max_cntlid": 65519,
|
||||
"ana_reporting": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"method": "nvmf_subsystem_add_ns",
|
||||
"params": {
|
||||
"nqn": "nqn.2016-06.io.spdk:cnode1",
|
||||
"namespace": {
|
||||
"nsid": 1,
|
||||
"bdev_name": "Malloc0",
|
||||
"nguid": "6D6A0BF0B71240A787308F45797CC355",
|
||||
"uuid": "6d6a0bf0-b712-40a7-8730-8f45797cc355"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"method": "nvmf_subsystem_add_listener",
|
||||
"params": {
|
||||
"nqn": "nqn.2016-06.io.spdk:cnode1",
|
||||
"listen_address": {
|
||||
"trtype": "VFIOUSER",
|
||||
"traddr": "/tmp/vfio-user/domain/1",
|
||||
"trsvcid": "0"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
69
test/nvmf/target/llvm_vfio_fuzz.sh
Executable file
69
test/nvmf/target/llvm_vfio_fuzz.sh
Executable file
@ -0,0 +1,69 @@
|
||||
#!/usr/bin/env bash
|
||||
if [[ $SPDK_TEST_FUZZER_SHORT -eq 0 ]]; then
|
||||
TIME=60000
|
||||
else
|
||||
TIME=1
|
||||
fi
|
||||
|
||||
for i in "$@"; do
|
||||
case "$i" in
|
||||
--time=*)
|
||||
TIME="${i#*=}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
VFIOUSER_DIR=/tmp/vfio-user/domain/1
|
||||
mkdir -p $VFIOUSER_DIR
|
||||
|
||||
function start_llvm_fuzz() {
|
||||
local fuzzer_type=$1
|
||||
local corpus_dir
|
||||
corpus_dir=/tmp/llvm_fuzz$fuzzer_type
|
||||
mkdir -p $corpus_dir
|
||||
$rootdir/test/app/fuzz/llvm_vfio_fuzz/llvm_vfio_fuzz -m 0x1 -i 0 -F $VFIOUSER_DIR -c $testdir/fuzz_vfio_json.conf -t $TIME -D $corpus_dir -Z $fuzzer_type
|
||||
}
|
||||
|
||||
function run_fuzz() {
|
||||
local startday
|
||||
local today
|
||||
local interval=0
|
||||
local weekloop
|
||||
# Get the date number, format is like '22078'
|
||||
# The purpose is when Jenkins schedule one fuzz in Saturday
|
||||
# We can decide which one fuzz will be run , there are lots of fuzz, but only run one of them in Saturday each time
|
||||
# and make sure all fuzz will be tested, so use this function. Such run fuzz 0 in 03/26, and run fuzz 1 in 04/02, run fuzz 2 in 04/09 ....
|
||||
startday=$(date -d '2022-03-19' '+%y%j')
|
||||
today=$(date '+%y%j')
|
||||
interval=$(((today - startday) / 7))
|
||||
weekloop=$((interval / fuzz_num))
|
||||
if [[ $weekloop -lt 1 ]]; then # The first loop of fuzz
|
||||
fuzzer_type=$interval
|
||||
else
|
||||
fuzzer_type=$((interval % fuzz_num))
|
||||
fi
|
||||
start_llvm_fuzz $fuzzer_type
|
||||
}
|
||||
|
||||
testdir=$(readlink -f $(dirname $0))
|
||||
rootdir=$(readlink -f $testdir/../../..)
|
||||
source $rootdir/test/common/autotest_common.sh
|
||||
|
||||
fuzzfile=$rootdir/test/app/fuzz/llvm_vfio_fuzz/llvm_vfio_fuzz.c
|
||||
fuzz_num=$(($(grep -c "fn =" $fuzzfile) - 1))
|
||||
[[ $fuzz_num -ne 0 ]]
|
||||
|
||||
trap 'process_shm --id 0; rm -rf /tmp/llvm_fuzz* $VFIOUSER_DIR; exit 1' SIGINT SIGTERM EXIT
|
||||
|
||||
if [[ $SPDK_TEST_FUZZER_SHORT -eq 1 ]]; then
|
||||
for ((i = 0; i < fuzz_num; i++)); do
|
||||
start_llvm_fuzz $i
|
||||
done
|
||||
elif [[ $SPDK_TEST_FUZZER -eq 1 ]]; then
|
||||
run_fuzz
|
||||
else
|
||||
start_llvm_fuzz $1
|
||||
fi
|
||||
|
||||
rm -rf /tmp/llvm_fuzz* $VFIOUSER_DIR
|
||||
trap - SIGINT SIGTERM EXIT
|
Loading…
Reference in New Issue
Block a user