Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/sysctl: add sysctl macro test

Cc: Luis Chamberlain <mcgrof@kernel.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: Iurii Zaikin <yzaikin@google.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
Cc: David Ahern <dsahern@kernel.org>
Cc: Simon Horman <horms@verge.net.au>
Cc: Julian Anastasov <ja@ssi.bg>
Cc: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: Jozsef Kadlecsik <kadlec@netfilter.org>
Cc: Florian Westphal <fw@strlen.de>
Cc: Shuah Khan <shuah@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Lorenz Bauer <lmb@cloudflare.com>
Cc: Akhmat Karakotov <hmukos@yandex-team.ru>
Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

authored by

Tonghao Zhang and committed by
Paolo Abeni
57b19468 4c7f24f8

+55
+32
lib/test_sysctl.c
··· 38 38 39 39 static int i_zero; 40 40 static int i_one_hundred = 100; 41 + static int match_int_ok = 1; 41 42 42 43 struct test_sysctl_data { 43 44 int int_0001; ··· 97 96 .proc_handler = proc_dointvec, 98 97 }, 99 98 { 99 + .procname = "match_int", 100 + .data = &match_int_ok, 101 + .maxlen = sizeof(match_int_ok), 102 + .mode = 0444, 103 + .proc_handler = proc_dointvec, 104 + }, 105 + { 100 106 .procname = "boot_int", 101 107 .data = &test_data.boot_int, 102 108 .maxlen = sizeof(test_data.boot_int), ··· 140 132 141 133 static int __init test_sysctl_init(void) 142 134 { 135 + int i; 136 + 137 + struct { 138 + int defined; 139 + int wanted; 140 + } match_int[] = { 141 + {.defined = *(int *)SYSCTL_ZERO, .wanted = 0}, 142 + {.defined = *(int *)SYSCTL_ONE, .wanted = 1}, 143 + {.defined = *(int *)SYSCTL_TWO, .wanted = 2}, 144 + {.defined = *(int *)SYSCTL_THREE, .wanted = 3}, 145 + {.defined = *(int *)SYSCTL_FOUR, .wanted = 4}, 146 + {.defined = *(int *)SYSCTL_ONE_HUNDRED, .wanted = 100}, 147 + {.defined = *(int *)SYSCTL_TWO_HUNDRED, .wanted = 200}, 148 + {.defined = *(int *)SYSCTL_ONE_THOUSAND, .wanted = 1000}, 149 + {.defined = *(int *)SYSCTL_THREE_THOUSAND, .wanted = 3000}, 150 + {.defined = *(int *)SYSCTL_INT_MAX, .wanted = INT_MAX}, 151 + {.defined = *(int *)SYSCTL_MAXOLDUID, .wanted = 65535}, 152 + {.defined = *(int *)SYSCTL_NEG_ONE, .wanted = -1}, 153 + }; 154 + 155 + for (i = 0; i < ARRAY_SIZE(match_int); i++) 156 + if (match_int[i].defined != match_int[i].wanted) 157 + match_int_ok = 0; 158 + 143 159 test_data.bitmap_0001 = kzalloc(SYSCTL_TEST_BITMAP_SIZE/8, GFP_KERNEL); 144 160 if (!test_data.bitmap_0001) 145 161 return -ENOMEM;
+23
tools/testing/selftests/sysctl/sysctl.sh
··· 40 40 ALL_TESTS="$ALL_TESTS 0005:3:1:int_0003" 41 41 ALL_TESTS="$ALL_TESTS 0006:50:1:bitmap_0001" 42 42 ALL_TESTS="$ALL_TESTS 0007:1:1:boot_int" 43 + ALL_TESTS="$ALL_TESTS 0008:1:1:match_int" 43 44 44 45 function allow_user_defaults() 45 46 { ··· 786 785 return $ksft_skip 787 786 } 788 787 788 + sysctl_test_0008() 789 + { 790 + TARGET="${SYSCTL}/match_int" 791 + if [ ! -f $TARGET ]; then 792 + echo "Skipping test for $TARGET as it is not present ..." 793 + return $ksft_skip 794 + fi 795 + 796 + echo -n "Testing if $TARGET is matched in kernel" 797 + ORIG_VALUE=$(cat "${TARGET}") 798 + 799 + if [ $ORIG_VALUE -ne 1 ]; then 800 + echo "TEST FAILED" 801 + rc=1 802 + test_rc 803 + fi 804 + 805 + echo "ok" 806 + return 0 807 + } 808 + 789 809 list_tests() 790 810 { 791 811 echo "Test ID list:" ··· 822 800 echo "0005 x $(get_test_count 0005) - tests proc_douintvec() array" 823 801 echo "0006 x $(get_test_count 0006) - tests proc_do_large_bitmap()" 824 802 echo "0007 x $(get_test_count 0007) - tests setting sysctl from kernel boot param" 803 + echo "0008 x $(get_test_count 0008) - tests sysctl macro values match" 825 804 } 826 805 827 806 usage()