selftests/sysctl: add sysctl macro test
authorTonghao Zhang <xiangxia.m.yue@gmail.com>
Sun, 1 May 2022 03:55:24 +0000 (11:55 +0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 3 May 2022 08:15:07 +0000 (10:15 +0200)
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>
lib/test_sysctl.c
tools/testing/selftests/sysctl/sysctl.sh

index a5a3d6c27e1faf8f892ed65ec21b5e27277870ad..9a564971f539a71fe62b67d8c40f424c424f0eaa 100644 (file)
@@ -38,6 +38,7 @@
 
 static int i_zero;
 static int i_one_hundred = 100;
+static int match_int_ok = 1;
 
 struct test_sysctl_data {
        int int_0001;
@@ -95,6 +96,13 @@ static struct ctl_table test_table[] = {
                .mode           = 0644,
                .proc_handler   = proc_dointvec,
        },
+       {
+               .procname       = "match_int",
+               .data           = &match_int_ok,
+               .maxlen         = sizeof(match_int_ok),
+               .mode           = 0444,
+               .proc_handler   = proc_dointvec,
+       },
        {
                .procname       = "boot_int",
                .data           = &test_data.boot_int,
@@ -132,6 +140,30 @@ static struct ctl_table_header *test_sysctl_header;
 
 static int __init test_sysctl_init(void)
 {
+       int i;
+
+       struct {
+               int defined;
+               int wanted;
+       } match_int[] = {
+               {.defined = *(int *)SYSCTL_ZERO,        .wanted = 0},
+               {.defined = *(int *)SYSCTL_ONE,         .wanted = 1},
+               {.defined = *(int *)SYSCTL_TWO,         .wanted = 2},
+               {.defined = *(int *)SYSCTL_THREE,       .wanted = 3},
+               {.defined = *(int *)SYSCTL_FOUR,        .wanted = 4},
+               {.defined = *(int *)SYSCTL_ONE_HUNDRED, .wanted = 100},
+               {.defined = *(int *)SYSCTL_TWO_HUNDRED, .wanted = 200},
+               {.defined = *(int *)SYSCTL_ONE_THOUSAND, .wanted = 1000},
+               {.defined = *(int *)SYSCTL_THREE_THOUSAND, .wanted = 3000},
+               {.defined = *(int *)SYSCTL_INT_MAX,     .wanted = INT_MAX},
+               {.defined = *(int *)SYSCTL_MAXOLDUID,   .wanted = 65535},
+               {.defined = *(int *)SYSCTL_NEG_ONE,     .wanted = -1},
+       };
+
+       for (i = 0; i < ARRAY_SIZE(match_int); i++)
+               if (match_int[i].defined != match_int[i].wanted)
+                       match_int_ok = 0;
+
        test_data.bitmap_0001 = kzalloc(SYSCTL_TEST_BITMAP_SIZE/8, GFP_KERNEL);
        if (!test_data.bitmap_0001)
                return -ENOMEM;
index 19515dcb7d04e4a6a812616e6a51ae6f447a6acd..f50778a3d744513842eabd4cf7131c833b513c23 100755 (executable)
@@ -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,27 @@ 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 in kernel"
+       ORIG_VALUE=$(cat "${TARGET}")
+
+       if [ $ORIG_VALUE -ne 1 ]; then
+               echo "TEST FAILED"
+               rc=1
+               test_rc
+       fi
+
+       echo "ok"
+       return 0
+}
+
 list_tests()
 {
        echo "Test ID list:"
@@ -800,6 +822,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()