1d979e13aSRolf Eike Beer#!/bin/sh
2b2441318SGreg Kroah-Hartman# SPDX-License-Identifier: GPL-2.0
35aa5bd14SDaniel Borkmann
4*272d1f4cSYauheni Kaliuta# Usage:
5*272d1f4cSYauheni Kaliuta# ./test_kmod.sh [module_param]...
6*272d1f4cSYauheni Kaliuta# Ex.: ./test_kmod.sh test_range=1,3
7*272d1f4cSYauheni Kaliuta# All the parameters are passed to the kernel module.
8*272d1f4cSYauheni Kaliuta
981e167c2SJeffrin Jose T# Kselftest framework requirement - SKIP code is 4.
1081e167c2SJeffrin Jose Tksft_skip=4
1181e167c2SJeffrin Jose T
1281e167c2SJeffrin Jose Tmsg="skip all tests:"
1381e167c2SJeffrin Jose Tif [ "$(id -u)" != "0" ]; then
1481e167c2SJeffrin Jose T	echo $msg please run this as root >&2
1581e167c2SJeffrin Jose T	exit $ksft_skip
1681e167c2SJeffrin Jose Tfi
1781e167c2SJeffrin Jose T
182ea48598SIlya Leoshkevichif [ "$building_out_of_srctree" ]; then
192ea48598SIlya Leoshkevich	# We are in linux-build/kselftest/bpf
202ea48598SIlya Leoshkevich	OUTPUT=../../
212ea48598SIlya Leoshkevichelse
222ea48598SIlya Leoshkevich	# We are in linux/tools/testing/selftests/bpf
232ea48598SIlya Leoshkevich	OUTPUT=../../../../
242ea48598SIlya Leoshkevichfi
255aa5bd14SDaniel Borkmann
265aa5bd14SDaniel Borkmanntest_run()
275aa5bd14SDaniel Borkmann{
285aa5bd14SDaniel Borkmann	sysctl -w net.core.bpf_jit_enable=$1 2>&1 > /dev/null
295aa5bd14SDaniel Borkmann	sysctl -w net.core.bpf_jit_harden=$2 2>&1 > /dev/null
305aa5bd14SDaniel Borkmann
315aa5bd14SDaniel Borkmann	echo "[ JIT enabled:$1 hardened:$2 ]"
325aa5bd14SDaniel Borkmann	dmesg -C
332ea48598SIlya Leoshkevich	if [ -f ${OUTPUT}/lib/test_bpf.ko ]; then
34*272d1f4cSYauheni Kaliuta		insmod ${OUTPUT}/lib/test_bpf.ko "$@" 2> /dev/null
355aa5bd14SDaniel Borkmann		if [ $? -ne 0 ]; then
365aa5bd14SDaniel Borkmann			rc=1
375aa5bd14SDaniel Borkmann		fi
38035d808fSNaresh Kamboju	else
39035d808fSNaresh Kamboju		# Use modprobe dry run to check for missing test_bpf module
40*272d1f4cSYauheni Kaliuta		if ! /sbin/modprobe -q -n test_bpf "$@"; then
41035d808fSNaresh Kamboju			echo "test_bpf: [SKIP]"
42*272d1f4cSYauheni Kaliuta		elif /sbin/modprobe -q test_bpf "$@"; then
43035d808fSNaresh Kamboju			echo "test_bpf: ok"
44035d808fSNaresh Kamboju		else
45035d808fSNaresh Kamboju			echo "test_bpf: [FAIL]"
46035d808fSNaresh Kamboju			rc=1
47035d808fSNaresh Kamboju		fi
48035d808fSNaresh Kamboju	fi
495aa5bd14SDaniel Borkmann	rmmod  test_bpf 2> /dev/null
505aa5bd14SDaniel Borkmann	dmesg | grep FAIL
515aa5bd14SDaniel Borkmann}
525aa5bd14SDaniel Borkmann
535aa5bd14SDaniel Borkmanntest_save()
545aa5bd14SDaniel Borkmann{
555aa5bd14SDaniel Borkmann	JE=`sysctl -n net.core.bpf_jit_enable`
565aa5bd14SDaniel Borkmann	JH=`sysctl -n net.core.bpf_jit_harden`
575aa5bd14SDaniel Borkmann}
585aa5bd14SDaniel Borkmann
595aa5bd14SDaniel Borkmanntest_restore()
605aa5bd14SDaniel Borkmann{
615aa5bd14SDaniel Borkmann	sysctl -w net.core.bpf_jit_enable=$JE 2>&1 > /dev/null
625aa5bd14SDaniel Borkmann	sysctl -w net.core.bpf_jit_harden=$JH 2>&1 > /dev/null
635aa5bd14SDaniel Borkmann}
645aa5bd14SDaniel Borkmann
655aa5bd14SDaniel Borkmannrc=0
665aa5bd14SDaniel Borkmanntest_save
675aa5bd14SDaniel Borkmanntest_run 0 0
685aa5bd14SDaniel Borkmanntest_run 1 0
695aa5bd14SDaniel Borkmanntest_run 1 1
705aa5bd14SDaniel Borkmanntest_run 1 2
715aa5bd14SDaniel Borkmanntest_restore
725aa5bd14SDaniel Borkmannexit $rc
73