@@ -1210,6 +1210,10 @@ TEST_F(TRACE_poke, getpid_runs_normally)
12101210# define ARCH_REGS struct pt_regs
12111211# define SYSCALL_NUM gpr[0]
12121212# define SYSCALL_RET gpr[3]
1213+ #elif defined(__s390__ )
1214+ # define ARCH_REGS s390_regs
1215+ # define SYSCALL_NUM gprs[2]
1216+ # define SYSCALL_RET gprs[2]
12131217#else
12141218# error "Do not know how to find your architecture's registers and syscalls"
12151219#endif
@@ -1243,7 +1247,8 @@ void change_syscall(struct __test_metadata *_metadata,
12431247 ret = ptrace (PTRACE_GETREGSET , tracee , NT_PRSTATUS , & iov );
12441248 EXPECT_EQ (0 , ret );
12451249
1246- #if defined(__x86_64__ ) || defined(__i386__ ) || defined(__aarch64__ ) || defined(__powerpc__ )
1250+ #if defined(__x86_64__ ) || defined(__i386__ ) || defined(__aarch64__ ) || \
1251+ defined(__powerpc__ ) || defined(__s390__ )
12471252 {
12481253 regs .SYSCALL_NUM = syscall ;
12491254 }
@@ -1281,17 +1286,21 @@ void tracer_syscall(struct __test_metadata *_metadata, pid_t tracee,
12811286 ret = ptrace (PTRACE_GETEVENTMSG , tracee , NULL , & msg );
12821287 EXPECT_EQ (0 , ret );
12831288
1289+ /* Validate and take action on expected syscalls. */
12841290 switch (msg ) {
12851291 case 0x1002 :
12861292 /* change getpid to getppid. */
1293+ EXPECT_EQ (__NR_getpid , get_syscall (_metadata , tracee ));
12871294 change_syscall (_metadata , tracee , __NR_getppid );
12881295 break ;
12891296 case 0x1003 :
12901297 /* skip gettid. */
1298+ EXPECT_EQ (__NR_gettid , get_syscall (_metadata , tracee ));
12911299 change_syscall (_metadata , tracee , -1 );
12921300 break ;
12931301 case 0x1004 :
12941302 /* do nothing (allow getppid) */
1303+ EXPECT_EQ (__NR_getppid , get_syscall (_metadata , tracee ));
12951304 break ;
12961305 default :
12971306 EXPECT_EQ (0 , msg ) {
@@ -1409,6 +1418,8 @@ TEST_F(TRACE_syscall, syscall_dropped)
14091418# define __NR_seccomp 277
14101419# elif defined(__powerpc__ )
14111420# define __NR_seccomp 358
1421+ # elif defined(__s390__ )
1422+ # define __NR_seccomp 348
14121423# else
14131424# warning "seccomp syscall number unknown for this architecture"
14141425# define __NR_seccomp 0xffff
@@ -1453,6 +1464,9 @@ TEST(seccomp_syscall)
14531464
14541465 /* Reject insane operation. */
14551466 ret = seccomp (-1 , 0 , & prog );
1467+ ASSERT_NE (ENOSYS , errno ) {
1468+ TH_LOG ("Kernel does not support seccomp syscall!" );
1469+ }
14561470 EXPECT_EQ (EINVAL , errno ) {
14571471 TH_LOG ("Did not reject crazy op value!" );
14581472 }
@@ -1501,6 +1515,9 @@ TEST(seccomp_syscall_mode_lock)
15011515 }
15021516
15031517 ret = seccomp (SECCOMP_SET_MODE_FILTER , 0 , & prog );
1518+ ASSERT_NE (ENOSYS , errno ) {
1519+ TH_LOG ("Kernel does not support seccomp syscall!" );
1520+ }
15041521 EXPECT_EQ (0 , ret ) {
15051522 TH_LOG ("Could not install filter!" );
15061523 }
@@ -1535,6 +1552,9 @@ TEST(TSYNC_first)
15351552
15361553 ret = seccomp (SECCOMP_SET_MODE_FILTER , SECCOMP_FLAG_FILTER_TSYNC ,
15371554 & prog );
1555+ ASSERT_NE (ENOSYS , errno ) {
1556+ TH_LOG ("Kernel does not support seccomp syscall!" );
1557+ }
15381558 EXPECT_EQ (0 , ret ) {
15391559 TH_LOG ("Could not install initial filter with TSYNC!" );
15401560 }
@@ -1694,6 +1714,9 @@ TEST_F(TSYNC, siblings_fail_prctl)
16941714
16951715 /* Check prctl failure detection by requesting sib 0 diverge. */
16961716 ret = seccomp (SECCOMP_SET_MODE_FILTER , 0 , & prog );
1717+ ASSERT_NE (ENOSYS , errno ) {
1718+ TH_LOG ("Kernel does not support seccomp syscall!" );
1719+ }
16971720 ASSERT_EQ (0 , ret ) {
16981721 TH_LOG ("setting filter failed" );
16991722 }
@@ -1731,6 +1754,9 @@ TEST_F(TSYNC, two_siblings_with_ancestor)
17311754 }
17321755
17331756 ret = seccomp (SECCOMP_SET_MODE_FILTER , 0 , & self -> root_prog );
1757+ ASSERT_NE (ENOSYS , errno ) {
1758+ TH_LOG ("Kernel does not support seccomp syscall!" );
1759+ }
17341760 ASSERT_EQ (0 , ret ) {
17351761 TH_LOG ("Kernel does not support SECCOMP_SET_MODE_FILTER!" );
17361762 }
@@ -1805,6 +1831,9 @@ TEST_F(TSYNC, two_siblings_with_no_filter)
18051831
18061832 ret = seccomp (SECCOMP_SET_MODE_FILTER , SECCOMP_FLAG_FILTER_TSYNC ,
18071833 & self -> apply_prog );
1834+ ASSERT_NE (ENOSYS , errno ) {
1835+ TH_LOG ("Kernel does not support seccomp syscall!" );
1836+ }
18081837 ASSERT_EQ (0 , ret ) {
18091838 TH_LOG ("Could install filter on all threads!" );
18101839 }
@@ -1833,6 +1862,9 @@ TEST_F(TSYNC, two_siblings_with_one_divergence)
18331862 }
18341863
18351864 ret = seccomp (SECCOMP_SET_MODE_FILTER , 0 , & self -> root_prog );
1865+ ASSERT_NE (ENOSYS , errno ) {
1866+ TH_LOG ("Kernel does not support seccomp syscall!" );
1867+ }
18361868 ASSERT_EQ (0 , ret ) {
18371869 TH_LOG ("Kernel does not support SECCOMP_SET_MODE_FILTER!" );
18381870 }
@@ -1890,6 +1922,9 @@ TEST_F(TSYNC, two_siblings_not_under_filter)
18901922 }
18911923
18921924 ret = seccomp (SECCOMP_SET_MODE_FILTER , 0 , & self -> root_prog );
1925+ ASSERT_NE (ENOSYS , errno ) {
1926+ TH_LOG ("Kernel does not support seccomp syscall!" );
1927+ }
18931928 ASSERT_EQ (0 , ret ) {
18941929 TH_LOG ("Kernel does not support SECCOMP_SET_MODE_FILTER!" );
18951930 }
0 commit comments