Lines Matching +full:saw +full:- +full:leader

1 // SPDX-License-Identifier: GPL-2.0-only
59 /* Attempt to de-conflict with the selftests tree. */
322 return -1; in __filecmp()
396 EXPECT_EQ(-1, ret); in TEST()
424 EXPECT_EQ(-1, ret); in TEST()
463 prog.len -= 1; in TEST()
505 TH_LOG("Allowed %d %d-insn filters (total with penalties:%d)", in TEST()
528 EXPECT_EQ(-1, ret); in TEST()
590 EXPECT_EQ(-1, ret); in TEST()
712 /* Only both with lower 32-bit for now. */ in TEST_SIGNAL()
752 /* Only both with lower 32-bit for now. */ in TEST_SIGNAL()
777 ASSERT_NE(-1, fd); in TEST_SIGNAL()
936 /* TODO(wad) add 64-bit versus 32-bit arg tests. */
953 EXPECT_EQ(-1, ret); in TEST()
984 EXPECT_EQ(-1, read(-1, NULL, 0)); in TEST()
1003 EXPECT_EQ(0, read(-1, NULL, 0)); in TEST()
1024 EXPECT_EQ(-1, read(-1, NULL, 0)); in TEST()
1055 EXPECT_EQ(-1, read(-1, NULL, 0)); in TEST()
1073 memset(&self->prog, 0, sizeof(self->prog)); in FIXTURE_SETUP()
1074 self->prog.filter = malloc(sizeof(filter)); in FIXTURE_SETUP()
1075 ASSERT_NE(NULL, self->prog.filter); in FIXTURE_SETUP()
1076 memcpy(self->prog.filter, filter, sizeof(filter)); in FIXTURE_SETUP()
1077 self->prog.len = (unsigned short)ARRAY_SIZE(filter); in FIXTURE_SETUP()
1082 if (self->prog.filter) in FIXTURE_TEARDOWN()
1083 free(self->prog.filter); in FIXTURE_TEARDOWN()
1093 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog); in TEST_F_SIGNAL()
1108 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog); in TEST_F_SIGNAL()
1144 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog); in TEST_F()
1164 EXPECT_EQ(__NR_getpid, sigsys->_syscall); in TEST_F()
1165 /* Make sure arch is non-zero. */ in TEST_F()
1166 EXPECT_NE(0, sigsys->_arch); in TEST_F()
1167 EXPECT_NE(0, (unsigned long)sigsys->_call_addr); in TEST_F()
1222 self->_x.filter = malloc(sizeof(_x##_insns)); \ in FIXTURE_SETUP()
1223 ASSERT_NE(NULL, self->_x.filter); \ in FIXTURE_SETUP()
1224 memcpy(self->_x.filter, &_x##_insns, sizeof(_x##_insns)); \ in FIXTURE_SETUP()
1225 self->_x.len = (unsigned short)ARRAY_SIZE(_x##_insns) in FIXTURE_SETUP()
1236 #define FILTER_FREE(_x) if (self->_x.filter) free(self->_x.filter) in FIXTURE_TEARDOWN()
1254 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1256 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1258 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1260 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F()
1262 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F()
1264 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->kill); in TEST_F()
1280 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F_SIGNAL()
1282 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F_SIGNAL()
1284 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F_SIGNAL()
1286 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F_SIGNAL()
1288 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F_SIGNAL()
1290 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->kill); in TEST_F_SIGNAL()
1309 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F_SIGNAL()
1311 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->kill); in TEST_F_SIGNAL()
1313 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F_SIGNAL()
1315 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F_SIGNAL()
1317 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F_SIGNAL()
1319 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F_SIGNAL()
1336 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F_SIGNAL()
1338 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F_SIGNAL()
1340 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F_SIGNAL()
1342 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F_SIGNAL()
1344 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F_SIGNAL()
1361 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F_SIGNAL()
1363 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F_SIGNAL()
1365 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F_SIGNAL()
1367 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F_SIGNAL()
1369 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F_SIGNAL()
1386 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1388 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1390 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1392 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F()
1408 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1410 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F()
1412 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1414 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1430 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1432 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1434 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1439 EXPECT_EQ(-1, syscall(__NR_getpid)); in TEST_F()
1451 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1453 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1455 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1460 EXPECT_EQ(-1, syscall(__NR_getpid)); in TEST_F()
1473 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1475 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1493 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1495 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1529 int ret = -1; in start_tracer()
1539 while (ret == -1 && errno != EINVAL) in start_tracer()
1592 syscall(__NR_exit, _metadata->exit_code); in start_tracer()
1639 _metadata->exit_code = KSFT_FAIL; in teardown_trace_fixture()
1666 ret = ptrace(PTRACE_POKEDATA, tracee, info->poke_addr, 0x1001); in tracer_poke()
1687 self->poked = 0; in FIXTURE_SETUP()
1688 memset(&self->prog, 0, sizeof(self->prog)); in FIXTURE_SETUP()
1689 self->prog.filter = malloc(sizeof(filter)); in FIXTURE_SETUP()
1690 ASSERT_NE(NULL, self->prog.filter); in FIXTURE_SETUP()
1691 memcpy(self->prog.filter, filter, sizeof(filter)); in FIXTURE_SETUP()
1692 self->prog.len = (unsigned short)ARRAY_SIZE(filter); in FIXTURE_SETUP()
1695 self->tracer_args.poke_addr = (unsigned long)&self->poked; in FIXTURE_SETUP()
1698 self->tracer = setup_trace_fixture(_metadata, tracer_poke, in FIXTURE_SETUP()
1699 &self->tracer_args, false); in FIXTURE_SETUP()
1704 teardown_trace_fixture(_metadata, self->tracer); in FIXTURE_TEARDOWN()
1705 if (self->prog.filter) in FIXTURE_TEARDOWN()
1706 free(self->prog.filter); in FIXTURE_TEARDOWN()
1716 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog, 0, 0); in TEST_F()
1719 EXPECT_EQ(0, self->poked); in TEST_F()
1720 ret = read(-1, NULL, 0); in TEST_F()
1721 EXPECT_EQ(-1, ret); in TEST_F()
1722 EXPECT_EQ(0x1001, self->poked); in TEST_F()
1732 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog, 0, 0); in TEST_F()
1735 EXPECT_EQ(0, self->poked); in TEST_F()
1737 EXPECT_EQ(0, self->poked); in TEST_F()
1802 * scv 0 system call uses -ve result \
1813 SYSCALL_RET(_regs) = -_result; \
1885 * shared), report it with TH_LOG() in an arch-specific definition
1900 # define EXPECT_SYSCALL_RETURN(val, action) EXPECT_EQ(-1, action)
1906 EXPECT_EQ(-1, action); \
1907 EXPECT_EQ(-(val), errno); \
1928 * architectures without HAVE_ARCH_TRACEHOOK (e.g. User-mode Linux).
1948 /* Architecture-specific syscall fetching routine. */
1954 return -1; in get_syscall()
1960 /* Architecture-specific syscall changing routine. */
1993 /* Change syscall return value (and set syscall number to -1). */
1997 long syscall = -1; in change_syscall_ret()
2032 change_syscall_ret(_metadata, tracee, -ESRCH); in tracer_seccomp()
2088 self->syscall_nr = get_syscall(_metadata, tracee); in tracer_ptrace()
2100 switch (self->syscall_nr) { in tracer_ptrace()
2107 syscall_nr_val = -1; in tracer_ptrace()
2111 syscall_nr_val = -1; in tracer_ptrace()
2112 syscall_ret_val = -ESRCH; in tracer_ptrace()
2162 self->mytid = syscall(__NR_gettid); in FIXTURE_SETUP()
2163 ASSERT_GT(self->mytid, 0); in FIXTURE_SETUP()
2164 ASSERT_NE(self->mytid, 1) { in FIXTURE_SETUP()
2168 self->mypid = getpid(); in FIXTURE_SETUP()
2169 ASSERT_GT(self->mypid, 0); in FIXTURE_SETUP()
2170 ASSERT_EQ(self->mytid, self->mypid); in FIXTURE_SETUP()
2172 self->parent = getppid(); in FIXTURE_SETUP()
2173 ASSERT_GT(self->parent, 0); in FIXTURE_SETUP()
2174 ASSERT_NE(self->parent, self->mypid); in FIXTURE_SETUP()
2177 self->tracer = setup_trace_fixture(_metadata, in FIXTURE_SETUP()
2178 variant->use_ptrace ? tracer_ptrace in FIXTURE_SETUP()
2180 self, variant->use_ptrace); in FIXTURE_SETUP()
2186 if (variant->use_ptrace) in FIXTURE_SETUP()
2195 teardown_trace_fixture(_metadata, self->tracer); in FIXTURE_TEARDOWN()
2201 SKIP(return, "arm32 does not support calling syscall -1"); in TEST()
2205 * and userspace asking for syscall "-1". in TEST()
2208 EXPECT_EQ(-1, syscall(-1)); in TEST()
2210 /* And no difference for "still not valid but not -1". */ in TEST()
2212 EXPECT_EQ(-1, syscall(-101)); in TEST()
2224 EXPECT_EQ(self->parent, syscall(__NR_getppid)); in TEST_F()
2225 EXPECT_NE(self->mypid, syscall(__NR_getppid)); in TEST_F()
2231 EXPECT_EQ(self->parent, syscall(__NR_getpid)); in TEST_F()
2232 EXPECT_NE(self->mypid, syscall(__NR_getpid)); in TEST_F()
2238 EXPECT_SYSCALL_RETURN(-ESRCH, syscall(__NR_openat)); in TEST_F()
2267 EXPECT_EQ(-1, syscall(__NR_mknodat, -1, NULL, 0, 0)); in TEST_F_SIGNAL()
2291 EXPECT_EQ(-1, syscall(__NR_getpid)); in TEST_F()
2315 EXPECT_NE(self->mypid, syscall(__NR_getpid)); in TEST_F_SIGNAL()
2335 ret = seccomp(-1, 0, &prog); in TEST()
2344 ret = seccomp(SECCOMP_SET_MODE_STRICT, -1, NULL); in TEST()
2354 ret = seccomp(SECCOMP_SET_MODE_FILTER, -1, &prog); in TEST()
2427 /* Test detection of individual known-good filter flags */ in TEST()
2445 EXPECT_EQ(-1, ret); in TEST()
2447 TH_LOG("Failed to detect that a known-good filter flag (0x%X) is supported!", in TEST()
2455 * Test detection of all known-good filter flags combined. But in TEST()
2467 EXPECT_EQ(-1, ret); in TEST()
2469 TH_LOG("Failed to detect that all known-good filter flags (0x%X) are supported!", in TEST()
2475 flag = -1; in TEST()
2478 EXPECT_EQ(-1, ret); in TEST()
2488 flag = flags[ARRAY_SIZE(flags) - 1] << 1; in TEST()
2490 EXPECT_EQ(-1, ret); in TEST()
2575 memset(&self->root_prog, 0, sizeof(self->root_prog)); in FIXTURE_SETUP()
2576 memset(&self->apply_prog, 0, sizeof(self->apply_prog)); in FIXTURE_SETUP()
2577 memset(&self->sibling, 0, sizeof(self->sibling)); in FIXTURE_SETUP()
2578 self->root_prog.filter = malloc(sizeof(root_filter)); in FIXTURE_SETUP()
2579 ASSERT_NE(NULL, self->root_prog.filter); in FIXTURE_SETUP()
2580 memcpy(self->root_prog.filter, &root_filter, sizeof(root_filter)); in FIXTURE_SETUP()
2581 self->root_prog.len = (unsigned short)ARRAY_SIZE(root_filter); in FIXTURE_SETUP()
2583 self->apply_prog.filter = malloc(sizeof(apply_filter)); in FIXTURE_SETUP()
2584 ASSERT_NE(NULL, self->apply_prog.filter); in FIXTURE_SETUP()
2585 memcpy(self->apply_prog.filter, &apply_filter, sizeof(apply_filter)); in FIXTURE_SETUP()
2586 self->apply_prog.len = (unsigned short)ARRAY_SIZE(apply_filter); in FIXTURE_SETUP()
2588 self->sibling_count = 0; in FIXTURE_SETUP()
2589 pthread_mutex_init(&self->mutex, NULL); in FIXTURE_SETUP()
2590 pthread_cond_init(&self->cond, NULL); in FIXTURE_SETUP()
2591 sem_init(&self->started, 0, 0); in FIXTURE_SETUP()
2592 self->sibling[0].tid = 0; in FIXTURE_SETUP()
2593 self->sibling[0].cond = &self->cond; in FIXTURE_SETUP()
2594 self->sibling[0].started = &self->started; in FIXTURE_SETUP()
2595 self->sibling[0].mutex = &self->mutex; in FIXTURE_SETUP()
2596 self->sibling[0].diverge = 0; in FIXTURE_SETUP()
2597 self->sibling[0].num_waits = 1; in FIXTURE_SETUP()
2598 self->sibling[0].prog = &self->root_prog; in FIXTURE_SETUP()
2599 self->sibling[0].metadata = _metadata; in FIXTURE_SETUP()
2600 self->sibling[1].tid = 0; in FIXTURE_SETUP()
2601 self->sibling[1].cond = &self->cond; in FIXTURE_SETUP()
2602 self->sibling[1].started = &self->started; in FIXTURE_SETUP()
2603 self->sibling[1].mutex = &self->mutex; in FIXTURE_SETUP()
2604 self->sibling[1].diverge = 0; in FIXTURE_SETUP()
2605 self->sibling[1].prog = &self->root_prog; in FIXTURE_SETUP()
2606 self->sibling[1].num_waits = 1; in FIXTURE_SETUP()
2607 self->sibling[1].metadata = _metadata; in FIXTURE_SETUP()
2614 if (self->root_prog.filter) in FIXTURE_TEARDOWN()
2615 free(self->root_prog.filter); in FIXTURE_TEARDOWN()
2616 if (self->apply_prog.filter) in FIXTURE_TEARDOWN()
2617 free(self->apply_prog.filter); in FIXTURE_TEARDOWN()
2619 for ( ; sib < self->sibling_count; ++sib) { in FIXTURE_TEARDOWN()
2620 struct tsync_sibling *s = &self->sibling[sib]; in FIXTURE_TEARDOWN()
2622 if (!s->tid) in FIXTURE_TEARDOWN()
2628 pthread_kill(s->tid, 9); in FIXTURE_TEARDOWN()
2630 pthread_mutex_destroy(&self->mutex); in FIXTURE_TEARDOWN()
2631 pthread_cond_destroy(&self->cond); in FIXTURE_TEARDOWN()
2632 sem_destroy(&self->started); in FIXTURE_TEARDOWN()
2640 me->system_tid = syscall(__NR_gettid); in tsync_sibling()
2642 pthread_mutex_lock(me->mutex); in tsync_sibling()
2643 if (me->diverge) { in tsync_sibling()
2644 /* Just re-apply the root prog to fork the tree */ in tsync_sibling()
2646 me->prog, 0, 0); in tsync_sibling()
2648 sem_post(me->started); in tsync_sibling()
2651 pthread_mutex_unlock(me->mutex); in tsync_sibling()
2655 pthread_cond_wait(me->cond, me->mutex); in tsync_sibling()
2656 me->num_waits = me->num_waits - 1; in tsync_sibling()
2657 } while (me->num_waits); in tsync_sibling()
2658 pthread_mutex_unlock(me->mutex); in tsync_sibling()
2663 read(-1, NULL, 0); in tsync_sibling()
2669 pthread_create(&sibling->tid, NULL, tsync_sibling, (void *)sibling); in tsync_start_sibling()
2701 self->sibling[0].diverge = 1; in TEST_F()
2702 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2703 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2705 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2706 sem_wait(&self->started); in TEST_F()
2707 self->sibling_count++; in TEST_F()
2711 pthread_mutex_lock(&self->mutex); in TEST_F()
2712 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2713 TH_LOG("cond broadcast non-zero"); in TEST_F()
2715 pthread_mutex_unlock(&self->mutex); in TEST_F()
2718 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2720 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2733 ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); in TEST_F()
2740 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2741 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2743 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2744 sem_wait(&self->started); in TEST_F()
2745 self->sibling_count++; in TEST_F()
2749 &self->apply_prog); in TEST_F()
2754 pthread_mutex_lock(&self->mutex); in TEST_F()
2755 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2756 TH_LOG("cond broadcast non-zero"); in TEST_F()
2758 pthread_mutex_unlock(&self->mutex); in TEST_F()
2760 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2762 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2771 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2772 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2773 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2774 sem_wait(&self->started); in TEST_F()
2775 self->sibling_count++; in TEST_F()
2779 pthread_mutex_lock(&self->mutex); in TEST_F()
2780 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2781 TH_LOG("cond broadcast non-zero"); in TEST_F()
2783 pthread_mutex_unlock(&self->mutex); in TEST_F()
2786 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2788 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2798 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2799 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2800 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2801 sem_wait(&self->started); in TEST_F()
2802 self->sibling_count++; in TEST_F()
2810 &self->apply_prog); in TEST_F()
2819 pthread_mutex_lock(&self->mutex); in TEST_F()
2820 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2821 TH_LOG("cond broadcast non-zero"); in TEST_F()
2823 pthread_mutex_unlock(&self->mutex); in TEST_F()
2826 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2828 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2841 ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); in TEST_F()
2848 self->sibling[0].diverge = 1; in TEST_F()
2849 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2850 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2852 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2853 sem_wait(&self->started); in TEST_F()
2854 self->sibling_count++; in TEST_F()
2858 &self->apply_prog); in TEST_F()
2859 ASSERT_EQ(self->sibling[0].system_tid, ret) { in TEST_F()
2864 pthread_mutex_lock(&self->mutex); in TEST_F()
2865 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2866 TH_LOG("cond broadcast non-zero"); in TEST_F()
2868 pthread_mutex_unlock(&self->mutex); in TEST_F()
2871 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2873 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2886 ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); in TEST_F()
2893 self->sibling[0].diverge = 1; in TEST_F()
2894 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2895 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2897 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2898 sem_wait(&self->started); in TEST_F()
2899 self->sibling_count++; in TEST_F()
2904 ret = seccomp(SECCOMP_SET_MODE_FILTER, flags, &self->apply_prog); in TEST_F()
2908 ASSERT_EQ(-1, ret) { in TEST_F()
2913 pthread_mutex_lock(&self->mutex); in TEST_F()
2914 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2915 TH_LOG("cond broadcast non-zero"); in TEST_F()
2917 pthread_mutex_unlock(&self->mutex); in TEST_F()
2920 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2922 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2942 self->sibling[0].diverge = 1; in TEST_F()
2943 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2944 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2946 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2947 sem_wait(&self->started); in TEST_F()
2948 self->sibling_count++; in TEST_F()
2951 ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); in TEST_F()
2960 &self->apply_prog); in TEST_F()
2961 ASSERT_EQ(ret, self->sibling[0].system_tid) { in TEST_F()
2965 if (ret == self->sibling[0].system_tid) in TEST_F()
2968 pthread_mutex_lock(&self->mutex); in TEST_F()
2971 * the one we just saw. in TEST_F()
2973 self->sibling[!sib].num_waits += 1; in TEST_F()
2976 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2977 TH_LOG("cond broadcast non-zero"); in TEST_F()
2979 pthread_mutex_unlock(&self->mutex); in TEST_F()
2980 PTHREAD_JOIN(self->sibling[sib].tid, &status); in TEST_F()
2983 while (!kill(self->sibling[sib].system_tid, 0)) in TEST_F()
2989 &self->apply_prog); in TEST_F()
2994 pthread_mutex_lock(&self->mutex); in TEST_F()
2999 if (self->sibling[sib].num_waits > 1) in TEST_F()
3000 self->sibling[sib].num_waits = 1; in TEST_F()
3001 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
3002 TH_LOG("cond broadcast non-zero"); in TEST_F()
3004 pthread_mutex_unlock(&self->mutex); in TEST_F()
3005 PTHREAD_JOIN(self->sibling[sib].tid, &status); in TEST_F()
3008 while (!kill(self->sibling[sib].system_tid, 0)) in TEST_F()
3012 &self->apply_prog); in TEST_F()
3104 syscall(__NR_exit, _metadata->exit_code); in TEST()
3132 /* Verify signal delivery came from child (seccomp-triggered). */ in TEST()
3170 * - native ARM registers do NOT expose true syscall. in TEST()
3171 * - compat ARM registers on ARM64 DO expose true syscall. in TEST()
3189 _metadata->exit_code = KSFT_FAIL; in TEST()
3281 EXPECT_EQ(ret, -1); in TEST()
3398 /* Check that we get -ENOSYS with no listener attached */ in TEST()
3410 /* Add some no-op filters for grins. */ in TEST()
3424 -1); in TEST()
3438 EXPECT_GT(poll(&pollfd, 1, -1), 0); in TEST()
3443 req.pid = -1; in TEST()
3446 EXPECT_EQ(-1, ret); in TEST()
3457 EXPECT_GT(poll(&pollfd, 1, -1), 0); in TEST()
3468 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), -1); in TEST()
3492 ASSERT_EQ(-1, user_notif_syscall(__NR_getppid, flags)); in TEST()
3537 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ID_VALID, &req.id), -1); in TEST()
3541 EXPECT_EQ(ret, -1); in TEST()
3545 static int handled = -1;
3590 exit(!(ret == -1 && errno == 512)); in TEST()
3608 resp.error = -EPERM; in TEST()
3611 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), -1); in TEST()
3618 resp.error = -512; /* -ERESTARTSYS */ in TEST()
3651 exit(ret != -1 && errno != ENOSYS); in TEST()
3805 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_RECV, NULL), -1); in TEST()
3870 EXPECT_GT(poll(&pollfd, 1, -1), 0); in TEST()
3878 EXPECT_GT(poll(&pollfd, 1, -1), 0); in TEST()
3892 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), -1); in TEST()
3897 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), -1); in TEST()
4016 EXPECT_EQ(ioctl(200, SECCOMP_IOCTL_NOTIF_RECV, &req), -1); in TEST()
4117 if (fcntl(i, F_GETFD) == -1) in get_next_fd()
4136 /* There may be arbitrary already-open fds at test start. */ in TEST()
4162 if (fcntl(syscall(__NR_getppid), F_GETFD) == -1) in TEST()
4177 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4183 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4189 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4194 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD_SMALL, &small), -1); in TEST()
4200 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD_BIG, &big), -1); in TEST()
4237 while (ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd) != -1 && in TEST()
4238 errno != -EINPROGRESS) in TEST()
4264 while (ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd) != -1 && in TEST()
4265 errno != -EINPROGRESS) in TEST()
4328 /* Should probably spot check /proc/sys/fs/file-nr */ in TEST()
4329 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4333 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4338 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4378 EXPECT_SYSCALL_RETURN(-EINVAL, in TEST()
4421 self->pid = 0; in FIXTURE_SETUP()
4433 self->pid = fork(); in FIXTURE_SETUP()
4434 ASSERT_GE(self->pid, 0); in FIXTURE_SETUP()
4436 if (self->pid == 0) { in FIXTURE_SETUP()
4445 if (self->pid) in FIXTURE_TEARDOWN()
4446 kill(self->pid, SIGKILL); in FIXTURE_TEARDOWN()
4453 ASSERT_EQ(0, ptrace(PTRACE_ATTACH, self->pid, NULL, 0)); in TEST_F()
4454 ASSERT_EQ(self->pid, wait(&wstatus)); in TEST_F()
4455 ASSERT_EQ(-1, ptrace(PTRACE_SETOPTIONS, self->pid, NULL, PTRACE_O_SUSPEND_SECCOMP)); in TEST_F()
4465 ret = ptrace(PTRACE_SEIZE, self->pid, NULL, PTRACE_O_SUSPEND_SECCOMP); in TEST_F()
4466 ASSERT_EQ(-1, ret); in TEST_F()
4473 * get_nth - Get the nth, space separated entry in a file.
4476 * Throws error if field is zero-lengthed.
4505 return nread - 1; in get_nth()
4603 /* get_proc_syscall - Get the syscall in progress for a given pid
4606 * Returns -1 if not in syscall (running or blocked)
4611 long ret = -1; in get_proc_syscall()
4626 /* Ensure non-fatal signals prior to receive are unmodified */
4666 /* Setup the non-fatal sigaction without SA_RESTART */ in TEST()
4674 exit(ret != -1 || errno != EINTR); in TEST()
4685 /* Send non-fatal kill signal */ in TEST()
4696 /* Ensure non-fatal signals after receive are blocked */
4746 * non-preemptible (TASK_KILLABLE) state. in TEST()
4749 /* Send non-fatal kill signal */ in TEST()
4754 * D (Disk Sleep) state after receiving non-fatal signal. in TEST()
4810 * non-preemptible (TASK_KILLABLE) state. in TEST()
4826 pthread_t leader; member
4842 ret = pthread_join(args->leader, &retval); in tsync_vs_dead_thread_leader_sibling()
4855 * Ensure that a dead thread leader doesn't prevent installing new filters with
4885 args->leader = pthread_self(); in TEST()
4891 /* Install a new filter just to the leader thread. */ in TEST()
4909 int err = -1, ret; in parse_uint_from_file()
4943 return -1; in get_uprobe_offset()
4945 while (fscanf(f, "%zx-%zx %s %zx %*[^\n]\n", &start, &end, buf, &base) == 4) { in get_uprobe_offset()
4952 return found ? (uintptr_t)addr - start + base : -1; in get_uprobe_offset()
4986 if (!variant->attach) in FIXTURE_SETUP()
5004 self->fd = syscall(__NR_perf_event_open, &attr, in FIXTURE_SETUP()
5005 getpid() /* pid */, -1 /* cpu */, -1 /* group_fd */, in FIXTURE_SETUP()
5011 /* we could call close(self->fd), but we'd need extra filter for in FIXTURE_TEARDOWN()
5020 return -1; in run_probed_with_filter()
5098 * - expand NNP testing
5099 * - better arch-specific TRACE and TRAP handlers.
5100 * - endianness checking when appropriate
5101 * - 64-bit arg prodding
5102 * - arch value testing (x86 modes especially)
5103 * - verify that FILTER_FLAG_LOG filters generate log messages
5104 * - verify that RET_LOG generates log messages