Skip to content

Commit

Permalink
selftests/sysctl: add sysctl macro test
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Tonghao Zhang authored and Paolo Abeni committed May 3, 2022
1 parent 4c7f24f commit 57b1946
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 0 deletions.
32 changes: 32 additions & 0 deletions lib/test_sysctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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;
Expand Down
23 changes: 23 additions & 0 deletions tools/testing/selftests/sysctl/sysctl.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down Expand Up @@ -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:"
Expand All @@ -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()
Expand Down

0 comments on commit 57b1946

Please sign in to comment.