Skip to content

Commit

Permalink
tests: Add test for kernel version attribute
Browse files Browse the repository at this point in the history
Add a test, 63-sim-kernel_version.[c|py], to test the kernel version
logic.

Signed-off-by: Tom Hromatka <[email protected]>
  • Loading branch information
drakenclimber committed Jan 27, 2025
1 parent 49a17fb commit 5872ff7
Show file tree
Hide file tree
Showing 5 changed files with 175 additions and 0 deletions.
1 change: 1 addition & 0 deletions tests/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,4 @@ util.pyc
60-sim-precompute
61-sim-transactions
62-sim-arch_transactions
63-sim-kernel_version
85 changes: 85 additions & 0 deletions tests/63-sim-kernel_version.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/**
* Seccomp Library test program
*
* Copyright (c) 2025 Oracle and/or its affiliates.
* Author: Tom Hromatka <[email protected]>
*/

/*
* This library is free software; you can redistribute it and/or modify it
* under the terms of version 2.1 of the GNU Lesser General Public License as
* published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, see <http://www.gnu.org/licenses>.
*/

#include <errno.h>
#include <unistd.h>

#include <seccomp.h>

#include "util.h"

#include <stdio.h>
int main(int argc, char *argv[])
{
int rc;
struct util_options opts;
scmp_filter_ctx ctx = NULL;

rc = util_getopt(argc, argv, &opts);
if (rc < 0)
goto out;

ctx = seccomp_init(SCMP_ACT_KILL);
if (ctx == NULL)
return ENOMEM;

rc = seccomp_arch_remove(ctx, SCMP_ARCH_NATIVE);
if (rc != 0)
goto out;

rc = seccomp_arch_add(ctx, SCMP_ARCH_X86_64);
if (rc != 0)
goto out;
rc = seccomp_arch_add(ctx, SCMP_ARCH_X32);
if (rc != 0)
goto out;

rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 0);
if (rc != 0)
goto out;
rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 0);
if (rc != 0)
goto out;
rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(poll), 0);
if (rc != 0)
goto out;
rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(nanosleep), 0);
if (rc != 0)
goto out;

rc = seccomp_attr_set(ctx, SCMP_FLTATR_CTL_OPTIMIZE, 2);
if (rc != 0)
goto out;
rc = seccomp_attr_set(ctx, SCMP_FLTATR_CTL_KVER, SCMP_KV_6_5);
if (rc != 0)
goto out;
rc = seccomp_attr_set(ctx, SCMP_FLTATR_ACT_UNKNOWN, SCMP_ACT_ERRNO(3));
if (rc != 0)
goto out;

rc = util_filter_output(&opts, ctx);
if (rc)
goto out;

out:
seccomp_release(ctx);
return (rc < 0 ? -rc : rc);
}
55 changes: 55 additions & 0 deletions tests/63-sim-kernel_version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#!/usr/bin/env python

#
# Seccomp Library test program
#
# Copyright (c) 2025 Oracle and/or its affiliates.
# Author: Tom Hromatka <[email protected]>
#

#
# This library is free software; you can redistribute it and/or modify it
# under the terms of version 2.1 of the GNU Lesser General Public License as
# published by the Free Software Foundation.
#
# This library is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
# for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this library; if not, see <http://www.gnu.org/licenses>.
#

import argparse
import sys

import util

from seccomp import *

def test(args):
f = SyscallFilter(KILL)
# NOTE: some of these arch functions are not strictly necessary, but are
# here for test sanity/coverage
f.remove_arch(Arch())
f.add_arch(Arch("x86_64"))
f.add_arch(Arch("x32"))

f.add_rule(ALLOW, "read")
f.add_rule(ALLOW, "write")
f.add_rule(ALLOW, "poll")
f.add_rule(ALLOW, "nanosleep")

f.set_attr(Attr.CTL_OPTIMIZE, 2)
f.set_attr(Attr.ACT_UNKNOWN, ERRNO(3))
f.set_attr(Attr.CTL_KVER, Kver.v6_5)

return f

args = util.get_opt()
ctx = test(args)
util.filter_output(args, ctx)

# kate: syntax python;
# kate: indent-mode python; space-indent on; indent-width 4; mixedindent off;
31 changes: 31 additions & 0 deletions tests/63-sim-kernel_version.tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#
# libseccomp regression test automation data
#
# Copyright (c) 2025 Oracle and/or its affiliates.
# Author: Tom Hromatka <[email protected]>
#

test type: bpf-sim

# Testname Arch Syscall Arg0 Arg1 Arg2 Arg3 Arg4 Arg5 Result
63-sim-kernel_version +x86_64,+x32 read N N N N N N ALLOW
63-sim-kernel_version +x86_64,+x32 write N N N N N N ALLOW
63-sim-kernel_version +x86_64,+x32 poll N N N N N N ALLOW
63-sim-kernel_version +x86_64,+x32 nanosleep N N N N N N ALLOW

63-sim-kernel_version +x86_64,+x32 2-6 N N N N N N KILL
63-sim-kernel_version +x86_64,+x32 8-34 N N N N N N KILL
63-sim-kernel_version +x86_64,+x32 36-334 N N N N N N KILL
63-sim-kernel_version +x86_64,+x32 424-456 N N N N N N KILL

63-sim-kernel_version +x86_64,+x32 457-466 N N N N N N ERRNO(3)

test type: bpf-sim-fuzz

# Testname StressCount
63-sim-kernel_version 5

test type: bpf-valgrind

# Testname
63-sim-kernel_version
3 changes: 3 additions & 0 deletions tests/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ check_PROGRAMS = \
60-sim-precompute \
61-sim-transactions \
62-sim-arch_transactions
63-sim-kernel_version

EXTRA_DIST_TESTPYTHON = \
util.py \
Expand Down Expand Up @@ -161,6 +162,7 @@ EXTRA_DIST_TESTPYTHON = \
60-sim-precompute.py \
61-sim-transactions.py \
62-sim-arch_transactions.py
63-sim-kernel_version.py

EXTRA_DIST_TESTCFGS = \
01-sim-allow.tests \
Expand Down Expand Up @@ -225,6 +227,7 @@ EXTRA_DIST_TESTCFGS = \
60-sim-precompute.tests \
61-sim-transactions.tests \
62-sim-arch_transactions.tests
63-sim-kernel_version.tests

EXTRA_DIST_TESTSCRIPTS = \
38-basic-pfc_coverage.sh 38-basic-pfc_coverage.pfc \
Expand Down

0 comments on commit 5872ff7

Please sign in to comment.