| #!/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 |