From: Tonghao Zhang <xiangxia.m.yue@xxxxxxxxx> Cc: Luis Chamberlain <mcgrof@xxxxxxxxxx> Cc: Kees Cook <keescook@xxxxxxxxxxxx> Cc: Iurii Zaikin <yzaikin@xxxxxxxxxx> Cc: "David S. Miller" <davem@xxxxxxxxxxxxx> Cc: Jakub Kicinski <kuba@xxxxxxxxxx> Cc: Paolo Abeni <pabeni@xxxxxxxxxx> Cc: Hideaki YOSHIFUJI <yoshfuji@xxxxxxxxxxxxxx> Cc: David Ahern <dsahern@xxxxxxxxxx> Cc: Simon Horman <horms@xxxxxxxxxxxx> Cc: Julian Anastasov <ja@xxxxxx> Cc: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx> Cc: Jozsef Kadlecsik <kadlec@xxxxxxxxxxxxx> Cc: Florian Westphal <fw@xxxxxxxxx> Cc: Shuah Khan <shuah@xxxxxxxxxx> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Cc: Alexei Starovoitov <ast@xxxxxxxxxx> Cc: Eric Dumazet <edumazet@xxxxxxxxxx> Cc: Lorenz Bauer <lmb@xxxxxxxxxxxxxx> Cc: Akhmat Karakotov <hmukos@xxxxxxxxxxxxxx> Signed-off-by: Tonghao Zhang <xiangxia.m.yue@xxxxxxxxx> --- lib/test_sysctl.c | 21 ++++++++++++ tools/testing/selftests/sysctl/sysctl.sh | 43 ++++++++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/lib/test_sysctl.c b/lib/test_sysctl.c index a5a3d6c27e1f..43b8d502f4c7 100644 --- a/lib/test_sysctl.c +++ b/lib/test_sysctl.c @@ -43,6 +43,7 @@ struct test_sysctl_data { int int_0001; int int_0002; int int_0003[4]; + int match_int[12]; int boot_int; @@ -95,6 +96,13 @@ static struct ctl_table test_table[] = { .mode = 0644, .proc_handler = proc_dointvec, }, + { + .procname = "match_int", + .data = &test_data.match_int, + .maxlen = sizeof(test_data.match_int), + .mode = 0444, + .proc_handler = proc_dointvec, + }, { .procname = "boot_int", .data = &test_data.boot_int, @@ -132,6 +140,19 @@ static struct ctl_table_header *test_sysctl_header; static int __init test_sysctl_init(void) { + test_data.match_int[0] = *(int *)SYSCTL_ZERO, + test_data.match_int[1] = *(int *)SYSCTL_ONE, + test_data.match_int[2] = *(int *)SYSCTL_TWO, + test_data.match_int[3] = *(int *)SYSCTL_THREE, + test_data.match_int[4] = *(int *)SYSCTL_FOUR, + test_data.match_int[5] = *(int *)SYSCTL_ONE_HUNDRED, + test_data.match_int[6] = *(int *)SYSCTL_TWO_HUNDRED, + test_data.match_int[7] = *(int *)SYSCTL_ONE_THOUSAND, + test_data.match_int[8] = *(int *)SYSCTL_THREE_THOUSAND, + test_data.match_int[9] = *(int *)SYSCTL_INT_MAX, + test_data.match_int[10] = *(int *)SYSCTL_MAXOLDUID, + test_data.match_int[11] = *(int *)SYSCTL_NEG_ONE, + test_data.bitmap_0001 = kzalloc(SYSCTL_TEST_BITMAP_SIZE/8, GFP_KERNEL); if (!test_data.bitmap_0001) return -ENOMEM; diff --git a/tools/testing/selftests/sysctl/sysctl.sh b/tools/testing/selftests/sysctl/sysctl.sh index 19515dcb7d04..cd74f4749748 100755 --- a/tools/testing/selftests/sysctl/sysctl.sh +++ b/tools/testing/selftests/sysctl/sysctl.sh @@ -40,6 +40,7 @@ ALL_TESTS="$ALL_TESTS 0004:1:1:uint_0001" ALL_TESTS="$ALL_TESTS 0005:3:1:int_0003" ALL_TESTS="$ALL_TESTS 0006:50:1:bitmap_0001" ALL_TESTS="$ALL_TESTS 0007:1:1:boot_int" +ALL_TESTS="$ALL_TESTS 0008:1:1:match_int" function allow_user_defaults() { @@ -785,6 +786,47 @@ sysctl_test_0007() return $ksft_skip } +sysctl_test_0008() +{ + TARGET="${SYSCTL}/match_int" + if [ ! -f $TARGET ]; then + echo "Skipping test for $TARGET as it is not present ..." + return $ksft_skip + fi + + echo -n "Testing if $TARGET is matched with kernel ..." + ORIG_VALUES=$(cat "${TARGET}") + + # SYSCTL_ZERO 0 + # SYSCTL_ONE 1 + # SYSCTL_TWO 2 + # SYSCTL_THREE 3 + # SYSCTL_FOUR 4 + # SYSCTL_ONE_HUNDRED 100 + # SYSCTL_TWO_HUNDRED 200 + # SYSCTL_ONE_THOUSAND 1000 + # SYSCTL_THREE_THOUSAND 3000 + # SYSCTL_INT_MAX INT_MAX + # SYSCTL_MAXOLDUID 65535 + # SYSCTL_NEG_ONE -1 + local VALUES=(0 1 2 3 4 100 200 1000 3000 $INT_MAX 65535 -1) + idx=0 + + for ori in $ORIG_VALUES; do + val=${VALUES[$idx]} + if [ $ori -ne $val ]; then + echo "Expected $val, got $ori, TEST FAILED" + rc=1 + test_rc + fi + + let idx=$idx+1 + done + + echo "ok" + return 0 +} + list_tests() { echo "Test ID list:" @@ -800,6 +842,7 @@ list_tests() echo "0005 x $(get_test_count 0005) - tests proc_douintvec() array" echo "0006 x $(get_test_count 0006) - tests proc_do_large_bitmap()" echo "0007 x $(get_test_count 0007) - tests setting sysctl from kernel boot param" + echo "0008 x $(get_test_count 0008) - tests sysctl macro values match" } usage() -- 2.27.0