| #!/bin/sh | |
| # SPDX-License-Identifier: GPL-2.0 | |
| # Usage: | |
| # ./test_kmod.sh [module_param]... | |
| # Ex.: ./test_kmod.sh test_range=1,3 | |
| # All the parameters are passed to the kernel module. | |
| # Kselftest framework requirement - SKIP code is 4. | |
| ksft_skip=4 | |
| msg="skip all tests:" | |
| if [ "$(id -u)" != "0" ]; then | |
| echo $msg please run this as root >&2 | |
| exit $ksft_skip | |
| fi | |
| if [ "$building_out_of_srctree" ]; then | |
| # We are in linux-build/kselftest/bpf | |
| OUTPUT=../../ | |
| else | |
| # We are in linux/tools/testing/selftests/bpf | |
| OUTPUT=../../../../ | |
| fi | |
| test_run() | |
| { | |
| sysctl -w net.core.bpf_jit_enable=$1 2>&1 > /dev/null | |
| sysctl -w net.core.bpf_jit_harden=$2 2>&1 > /dev/null | |
| echo "[ JIT enabled:$1 hardened:$2 ]" | |
| shift 2 | |
| dmesg -C | |
| if [ -f ${OUTPUT}/lib/test_bpf.ko ]; then | |
| insmod ${OUTPUT}/lib/test_bpf.ko "$@" 2> /dev/null | |
| if [ $? -ne 0 ]; then | |
| rc=1 | |
| fi | |
| else | |
| # Use modprobe dry run to check for missing test_bpf module | |
| if ! /sbin/modprobe -q -n test_bpf "$@"; then | |
| echo "test_bpf: [SKIP]" | |
| elif /sbin/modprobe -q test_bpf "$@"; then | |
| echo "test_bpf: ok" | |
| else | |
| echo "test_bpf: [FAIL]" | |
| rc=1 | |
| fi | |
| fi | |
| rmmod test_bpf 2> /dev/null | |
| dmesg | grep FAIL | |
| } | |
| test_save() | |
| { | |
| JE=`sysctl -n net.core.bpf_jit_enable` | |
| JH=`sysctl -n net.core.bpf_jit_harden` | |
| } | |
| test_restore() | |
| { | |
| sysctl -w net.core.bpf_jit_enable=$JE 2>&1 > /dev/null | |
| sysctl -w net.core.bpf_jit_harden=$JH 2>&1 > /dev/null | |
| } | |
| rc=0 | |
| test_save | |
| test_run 0 0 "$@" | |
| test_run 1 0 "$@" | |
| test_run 1 1 "$@" | |
| test_run 1 2 "$@" | |
| test_restore | |
| exit $rc |