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

1 // SPDX-License-Identifier: GPL-2.0-only
59 /* Attempt to de-conflict with the selftests tree. */
316 return -1; in __filecmp()
390 EXPECT_EQ(-1, ret); in TEST()
418 EXPECT_EQ(-1, ret); in TEST()
457 prog.len -= 1; in TEST()
499 TH_LOG("Allowed %d %d-insn filters (total with penalties:%d)", in TEST()
522 EXPECT_EQ(-1, ret); in TEST()
584 EXPECT_EQ(-1, ret); in TEST()
706 /* Only both with lower 32-bit for now. */ in TEST_SIGNAL()
746 /* Only both with lower 32-bit for now. */ in TEST_SIGNAL()
771 ASSERT_NE(-1, fd); in TEST_SIGNAL()
930 /* TODO(wad) add 64-bit versus 32-bit arg tests. */
947 EXPECT_EQ(-1, ret); in TEST()
978 EXPECT_EQ(-1, read(-1, NULL, 0)); in TEST()
997 EXPECT_EQ(0, read(-1, NULL, 0)); in TEST()
1018 EXPECT_EQ(-1, read(-1, NULL, 0)); in TEST()
1049 EXPECT_EQ(-1, read(-1, NULL, 0)); in TEST()
1067 memset(&self->prog, 0, sizeof(self->prog)); in FIXTURE_SETUP()
1068 self->prog.filter = malloc(sizeof(filter)); in FIXTURE_SETUP()
1069 ASSERT_NE(NULL, self->prog.filter); in FIXTURE_SETUP()
1070 memcpy(self->prog.filter, filter, sizeof(filter)); in FIXTURE_SETUP()
1071 self->prog.len = (unsigned short)ARRAY_SIZE(filter); in FIXTURE_SETUP()
1076 if (self->prog.filter) in FIXTURE_TEARDOWN()
1077 free(self->prog.filter); in FIXTURE_TEARDOWN()
1087 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog); in TEST_F_SIGNAL()
1102 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog); in TEST_F_SIGNAL()
1138 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog); in TEST_F()
1158 EXPECT_EQ(__NR_getpid, sigsys->_syscall); in TEST_F()
1159 /* Make sure arch is non-zero. */ in TEST_F()
1160 EXPECT_NE(0, sigsys->_arch); in TEST_F()
1161 EXPECT_NE(0, (unsigned long)sigsys->_call_addr); in TEST_F()
1216 self->_x.filter = malloc(sizeof(_x##_insns)); \ in FIXTURE_SETUP()
1217 ASSERT_NE(NULL, self->_x.filter); \ in FIXTURE_SETUP()
1218 memcpy(self->_x.filter, &_x##_insns, sizeof(_x##_insns)); \ in FIXTURE_SETUP()
1219 self->_x.len = (unsigned short)ARRAY_SIZE(_x##_insns) in FIXTURE_SETUP()
1230 #define FILTER_FREE(_x) if (self->_x.filter) free(self->_x.filter) in FIXTURE_TEARDOWN()
1248 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1250 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1252 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1254 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F()
1256 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F()
1258 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->kill); in TEST_F()
1274 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F_SIGNAL()
1276 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F_SIGNAL()
1278 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F_SIGNAL()
1280 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F_SIGNAL()
1282 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F_SIGNAL()
1284 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->kill); in TEST_F_SIGNAL()
1303 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F_SIGNAL()
1305 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->kill); in TEST_F_SIGNAL()
1307 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F_SIGNAL()
1309 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F_SIGNAL()
1311 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F_SIGNAL()
1313 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F_SIGNAL()
1330 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F_SIGNAL()
1332 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F_SIGNAL()
1334 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F_SIGNAL()
1336 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F_SIGNAL()
1338 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F_SIGNAL()
1355 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F_SIGNAL()
1357 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F_SIGNAL()
1359 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F_SIGNAL()
1361 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F_SIGNAL()
1363 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F_SIGNAL()
1380 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1382 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1384 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1386 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F()
1402 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1404 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F()
1406 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1408 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1424 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1426 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1428 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1433 EXPECT_EQ(-1, syscall(__NR_getpid)); in TEST_F()
1445 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1447 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1449 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1454 EXPECT_EQ(-1, syscall(__NR_getpid)); in TEST_F()
1467 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1469 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1487 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1489 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1523 int ret = -1; in start_tracer()
1533 while (ret == -1 && errno != EINVAL) in start_tracer()
1586 syscall(__NR_exit, _metadata->exit_code); in start_tracer()
1633 _metadata->exit_code = KSFT_FAIL; in teardown_trace_fixture()
1660 ret = ptrace(PTRACE_POKEDATA, tracee, info->poke_addr, 0x1001); in tracer_poke()
1681 self->poked = 0; in FIXTURE_SETUP()
1682 memset(&self->prog, 0, sizeof(self->prog)); in FIXTURE_SETUP()
1683 self->prog.filter = malloc(sizeof(filter)); in FIXTURE_SETUP()
1684 ASSERT_NE(NULL, self->prog.filter); in FIXTURE_SETUP()
1685 memcpy(self->prog.filter, filter, sizeof(filter)); in FIXTURE_SETUP()
1686 self->prog.len = (unsigned short)ARRAY_SIZE(filter); in FIXTURE_SETUP()
1689 self->tracer_args.poke_addr = (unsigned long)&self->poked; in FIXTURE_SETUP()
1692 self->tracer = setup_trace_fixture(_metadata, tracer_poke, in FIXTURE_SETUP()
1693 &self->tracer_args, false); in FIXTURE_SETUP()
1698 teardown_trace_fixture(_metadata, self->tracer); in FIXTURE_TEARDOWN()
1699 if (self->prog.filter) in FIXTURE_TEARDOWN()
1700 free(self->prog.filter); in FIXTURE_TEARDOWN()
1710 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog, 0, 0); in TEST_F()
1713 EXPECT_EQ(0, self->poked); in TEST_F()
1714 ret = read(-1, NULL, 0); in TEST_F()
1715 EXPECT_EQ(-1, ret); in TEST_F()
1716 EXPECT_EQ(0x1001, self->poked); in TEST_F()
1726 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog, 0, 0); in TEST_F()
1729 EXPECT_EQ(0, self->poked); in TEST_F()
1731 EXPECT_EQ(0, self->poked); in TEST_F()
1796 * scv 0 system call uses -ve result \
1807 SYSCALL_RET(_regs) = -_result; \
1879 * shared), report it with TH_LOG() in an arch-specific definition
1894 # define EXPECT_SYSCALL_RETURN(val, action) EXPECT_EQ(-1, action)
1900 EXPECT_EQ(-1, action); \
1901 EXPECT_EQ(-(val), errno); \
1922 * architectures without HAVE_ARCH_TRACEHOOK (e.g. User-mode Linux).
1942 /* Architecture-specific syscall fetching routine. */
1948 return -1; in get_syscall()
1954 /* Architecture-specific syscall changing routine. */
1987 /* Change syscall return value (and set syscall number to -1). */
1991 long syscall = -1; in change_syscall_ret()
2026 change_syscall_ret(_metadata, tracee, -ESRCH); in tracer_seccomp()
2082 self->syscall_nr = get_syscall(_metadata, tracee); in tracer_ptrace()
2094 switch (self->syscall_nr) { in tracer_ptrace()
2101 syscall_nr_val = -1; in tracer_ptrace()
2105 syscall_nr_val = -1; in tracer_ptrace()
2106 syscall_ret_val = -ESRCH; in tracer_ptrace()
2156 self->mytid = syscall(__NR_gettid); in FIXTURE_SETUP()
2157 ASSERT_GT(self->mytid, 0); in FIXTURE_SETUP()
2158 ASSERT_NE(self->mytid, 1) { in FIXTURE_SETUP()
2162 self->mypid = getpid(); in FIXTURE_SETUP()
2163 ASSERT_GT(self->mypid, 0); in FIXTURE_SETUP()
2164 ASSERT_EQ(self->mytid, self->mypid); in FIXTURE_SETUP()
2166 self->parent = getppid(); in FIXTURE_SETUP()
2167 ASSERT_GT(self->parent, 0); in FIXTURE_SETUP()
2168 ASSERT_NE(self->parent, self->mypid); in FIXTURE_SETUP()
2171 self->tracer = setup_trace_fixture(_metadata, in FIXTURE_SETUP()
2172 variant->use_ptrace ? tracer_ptrace in FIXTURE_SETUP()
2174 self, variant->use_ptrace); in FIXTURE_SETUP()
2180 if (variant->use_ptrace) in FIXTURE_SETUP()
2189 teardown_trace_fixture(_metadata, self->tracer); in FIXTURE_TEARDOWN()
2195 SKIP(return, "arm32 does not support calling syscall -1"); in TEST()
2199 * and userspace asking for syscall "-1". in TEST()
2202 EXPECT_EQ(-1, syscall(-1)); in TEST()
2204 /* And no difference for "still not valid but not -1". */ in TEST()
2206 EXPECT_EQ(-1, syscall(-101)); in TEST()
2218 EXPECT_EQ(self->parent, syscall(__NR_getppid)); in TEST_F()
2219 EXPECT_NE(self->mypid, syscall(__NR_getppid)); in TEST_F()
2225 EXPECT_EQ(self->parent, syscall(__NR_getpid)); in TEST_F()
2226 EXPECT_NE(self->mypid, syscall(__NR_getpid)); in TEST_F()
2232 EXPECT_SYSCALL_RETURN(-ESRCH, syscall(__NR_openat)); in TEST_F()
2261 EXPECT_EQ(-1, syscall(__NR_mknodat, -1, NULL, 0, 0)); in TEST_F_SIGNAL()
2285 EXPECT_EQ(-1, syscall(__NR_getpid)); in TEST_F()
2309 EXPECT_NE(self->mypid, syscall(__NR_getpid)); in TEST_F_SIGNAL()
2329 ret = seccomp(-1, 0, &prog); in TEST()
2338 ret = seccomp(SECCOMP_SET_MODE_STRICT, -1, NULL); in TEST()
2348 ret = seccomp(SECCOMP_SET_MODE_FILTER, -1, &prog); in TEST()
2421 /* Test detection of individual known-good filter flags */ in TEST()
2439 EXPECT_EQ(-1, ret); in TEST()
2441 TH_LOG("Failed to detect that a known-good filter flag (0x%X) is supported!", in TEST()
2449 * Test detection of all known-good filter flags combined. But in TEST()
2461 EXPECT_EQ(-1, ret); in TEST()
2463 TH_LOG("Failed to detect that all known-good filter flags (0x%X) are supported!", in TEST()
2469 flag = -1; in TEST()
2472 EXPECT_EQ(-1, ret); in TEST()
2482 flag = flags[ARRAY_SIZE(flags) - 1] << 1; in TEST()
2484 EXPECT_EQ(-1, ret); in TEST()
2569 memset(&self->root_prog, 0, sizeof(self->root_prog)); in FIXTURE_SETUP()
2570 memset(&self->apply_prog, 0, sizeof(self->apply_prog)); in FIXTURE_SETUP()
2571 memset(&self->sibling, 0, sizeof(self->sibling)); in FIXTURE_SETUP()
2572 self->root_prog.filter = malloc(sizeof(root_filter)); in FIXTURE_SETUP()
2573 ASSERT_NE(NULL, self->root_prog.filter); in FIXTURE_SETUP()
2574 memcpy(self->root_prog.filter, &root_filter, sizeof(root_filter)); in FIXTURE_SETUP()
2575 self->root_prog.len = (unsigned short)ARRAY_SIZE(root_filter); in FIXTURE_SETUP()
2577 self->apply_prog.filter = malloc(sizeof(apply_filter)); in FIXTURE_SETUP()
2578 ASSERT_NE(NULL, self->apply_prog.filter); in FIXTURE_SETUP()
2579 memcpy(self->apply_prog.filter, &apply_filter, sizeof(apply_filter)); in FIXTURE_SETUP()
2580 self->apply_prog.len = (unsigned short)ARRAY_SIZE(apply_filter); in FIXTURE_SETUP()
2582 self->sibling_count = 0; in FIXTURE_SETUP()
2583 pthread_mutex_init(&self->mutex, NULL); in FIXTURE_SETUP()
2584 pthread_cond_init(&self->cond, NULL); in FIXTURE_SETUP()
2585 sem_init(&self->started, 0, 0); in FIXTURE_SETUP()
2586 self->sibling[0].tid = 0; in FIXTURE_SETUP()
2587 self->sibling[0].cond = &self->cond; in FIXTURE_SETUP()
2588 self->sibling[0].started = &self->started; in FIXTURE_SETUP()
2589 self->sibling[0].mutex = &self->mutex; in FIXTURE_SETUP()
2590 self->sibling[0].diverge = 0; in FIXTURE_SETUP()
2591 self->sibling[0].num_waits = 1; in FIXTURE_SETUP()
2592 self->sibling[0].prog = &self->root_prog; in FIXTURE_SETUP()
2593 self->sibling[0].metadata = _metadata; in FIXTURE_SETUP()
2594 self->sibling[1].tid = 0; in FIXTURE_SETUP()
2595 self->sibling[1].cond = &self->cond; in FIXTURE_SETUP()
2596 self->sibling[1].started = &self->started; in FIXTURE_SETUP()
2597 self->sibling[1].mutex = &self->mutex; in FIXTURE_SETUP()
2598 self->sibling[1].diverge = 0; in FIXTURE_SETUP()
2599 self->sibling[1].prog = &self->root_prog; in FIXTURE_SETUP()
2600 self->sibling[1].num_waits = 1; in FIXTURE_SETUP()
2601 self->sibling[1].metadata = _metadata; in FIXTURE_SETUP()
2608 if (self->root_prog.filter) in FIXTURE_TEARDOWN()
2609 free(self->root_prog.filter); in FIXTURE_TEARDOWN()
2610 if (self->apply_prog.filter) in FIXTURE_TEARDOWN()
2611 free(self->apply_prog.filter); in FIXTURE_TEARDOWN()
2613 for ( ; sib < self->sibling_count; ++sib) { in FIXTURE_TEARDOWN()
2614 struct tsync_sibling *s = &self->sibling[sib]; in FIXTURE_TEARDOWN()
2616 if (!s->tid) in FIXTURE_TEARDOWN()
2622 pthread_kill(s->tid, 9); in FIXTURE_TEARDOWN()
2624 pthread_mutex_destroy(&self->mutex); in FIXTURE_TEARDOWN()
2625 pthread_cond_destroy(&self->cond); in FIXTURE_TEARDOWN()
2626 sem_destroy(&self->started); in FIXTURE_TEARDOWN()
2634 me->system_tid = syscall(__NR_gettid); in tsync_sibling()
2636 pthread_mutex_lock(me->mutex); in tsync_sibling()
2637 if (me->diverge) { in tsync_sibling()
2638 /* Just re-apply the root prog to fork the tree */ in tsync_sibling()
2640 me->prog, 0, 0); in tsync_sibling()
2642 sem_post(me->started); in tsync_sibling()
2645 pthread_mutex_unlock(me->mutex); in tsync_sibling()
2649 pthread_cond_wait(me->cond, me->mutex); in tsync_sibling()
2650 me->num_waits = me->num_waits - 1; in tsync_sibling()
2651 } while (me->num_waits); in tsync_sibling()
2652 pthread_mutex_unlock(me->mutex); in tsync_sibling()
2657 read(-1, NULL, 0); in tsync_sibling()
2663 pthread_create(&sibling->tid, NULL, tsync_sibling, (void *)sibling); in tsync_start_sibling()
2695 self->sibling[0].diverge = 1; in TEST_F()
2696 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2697 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2699 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2700 sem_wait(&self->started); in TEST_F()
2701 self->sibling_count++; in TEST_F()
2705 pthread_mutex_lock(&self->mutex); in TEST_F()
2706 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2707 TH_LOG("cond broadcast non-zero"); in TEST_F()
2709 pthread_mutex_unlock(&self->mutex); in TEST_F()
2712 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2714 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2727 ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); in TEST_F()
2734 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2735 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2737 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2738 sem_wait(&self->started); in TEST_F()
2739 self->sibling_count++; in TEST_F()
2743 &self->apply_prog); in TEST_F()
2748 pthread_mutex_lock(&self->mutex); in TEST_F()
2749 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2750 TH_LOG("cond broadcast non-zero"); in TEST_F()
2752 pthread_mutex_unlock(&self->mutex); in TEST_F()
2754 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2756 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2765 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2766 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2767 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2768 sem_wait(&self->started); in TEST_F()
2769 self->sibling_count++; in TEST_F()
2773 pthread_mutex_lock(&self->mutex); in TEST_F()
2774 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2775 TH_LOG("cond broadcast non-zero"); in TEST_F()
2777 pthread_mutex_unlock(&self->mutex); in TEST_F()
2780 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2782 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2792 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2793 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2794 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2795 sem_wait(&self->started); in TEST_F()
2796 self->sibling_count++; in TEST_F()
2804 &self->apply_prog); in TEST_F()
2813 pthread_mutex_lock(&self->mutex); in TEST_F()
2814 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2815 TH_LOG("cond broadcast non-zero"); in TEST_F()
2817 pthread_mutex_unlock(&self->mutex); in TEST_F()
2820 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2822 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2835 ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); in TEST_F()
2842 self->sibling[0].diverge = 1; in TEST_F()
2843 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2844 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2846 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2847 sem_wait(&self->started); in TEST_F()
2848 self->sibling_count++; in TEST_F()
2852 &self->apply_prog); in TEST_F()
2853 ASSERT_EQ(self->sibling[0].system_tid, ret) { in TEST_F()
2858 pthread_mutex_lock(&self->mutex); in TEST_F()
2859 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2860 TH_LOG("cond broadcast non-zero"); in TEST_F()
2862 pthread_mutex_unlock(&self->mutex); in TEST_F()
2865 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2867 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2880 ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); in TEST_F()
2887 self->sibling[0].diverge = 1; in TEST_F()
2888 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2889 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2891 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2892 sem_wait(&self->started); in TEST_F()
2893 self->sibling_count++; in TEST_F()
2898 ret = seccomp(SECCOMP_SET_MODE_FILTER, flags, &self->apply_prog); in TEST_F()
2902 ASSERT_EQ(-1, ret) { in TEST_F()
2907 pthread_mutex_lock(&self->mutex); in TEST_F()
2908 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2909 TH_LOG("cond broadcast non-zero"); in TEST_F()
2911 pthread_mutex_unlock(&self->mutex); in TEST_F()
2914 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2916 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2936 self->sibling[0].diverge = 1; in TEST_F()
2937 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2938 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2940 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2941 sem_wait(&self->started); in TEST_F()
2942 self->sibling_count++; in TEST_F()
2945 ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); in TEST_F()
2954 &self->apply_prog); in TEST_F()
2955 ASSERT_EQ(ret, self->sibling[0].system_tid) { in TEST_F()
2959 if (ret == self->sibling[0].system_tid) in TEST_F()
2962 pthread_mutex_lock(&self->mutex); in TEST_F()
2965 * the one we just saw. in TEST_F()
2967 self->sibling[!sib].num_waits += 1; in TEST_F()
2970 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2971 TH_LOG("cond broadcast non-zero"); in TEST_F()
2973 pthread_mutex_unlock(&self->mutex); in TEST_F()
2974 PTHREAD_JOIN(self->sibling[sib].tid, &status); in TEST_F()
2977 while (!kill(self->sibling[sib].system_tid, 0)) in TEST_F()
2983 &self->apply_prog); in TEST_F()
2988 pthread_mutex_lock(&self->mutex); in TEST_F()
2993 if (self->sibling[sib].num_waits > 1) in TEST_F()
2994 self->sibling[sib].num_waits = 1; in TEST_F()
2995 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2996 TH_LOG("cond broadcast non-zero"); in TEST_F()
2998 pthread_mutex_unlock(&self->mutex); in TEST_F()
2999 PTHREAD_JOIN(self->sibling[sib].tid, &status); in TEST_F()
3002 while (!kill(self->sibling[sib].system_tid, 0)) in TEST_F()
3006 &self->apply_prog); in TEST_F()
3098 syscall(__NR_exit, _metadata->exit_code); in TEST()
3126 /* Verify signal delivery came from child (seccomp-triggered). */ in TEST()
3164 * - native ARM registers do NOT expose true syscall. in TEST()
3165 * - compat ARM registers on ARM64 DO expose true syscall. in TEST()
3183 _metadata->exit_code = KSFT_FAIL; in TEST()
3275 EXPECT_EQ(ret, -1); in TEST()
3392 /* Check that we get -ENOSYS with no listener attached */ in TEST()
3404 /* Add some no-op filters for grins. */ in TEST()
3418 -1); in TEST()
3432 EXPECT_GT(poll(&pollfd, 1, -1), 0); in TEST()
3437 req.pid = -1; in TEST()
3440 EXPECT_EQ(-1, ret); in TEST()
3451 EXPECT_GT(poll(&pollfd, 1, -1), 0); in TEST()
3462 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), -1); in TEST()
3486 ASSERT_EQ(-1, user_notif_syscall(__NR_getppid, flags)); in TEST()
3531 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ID_VALID, &req.id), -1); in TEST()
3535 EXPECT_EQ(ret, -1); in TEST()
3539 static int handled = -1;
3584 exit(!(ret == -1 && errno == 512)); in TEST()
3602 resp.error = -EPERM; in TEST()
3605 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), -1); in TEST()
3612 resp.error = -512; /* -ERESTARTSYS */ in TEST()
3645 exit(ret != -1 && errno != ENOSYS); in TEST()
3799 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_RECV, NULL), -1); in TEST()
3864 EXPECT_GT(poll(&pollfd, 1, -1), 0); in TEST()
3872 EXPECT_GT(poll(&pollfd, 1, -1), 0); in TEST()
3886 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), -1); in TEST()
3891 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), -1); in TEST()
4010 EXPECT_EQ(ioctl(200, SECCOMP_IOCTL_NOTIF_RECV, &req), -1); in TEST()
4111 if (fcntl(i, F_GETFD) == -1) in get_next_fd()
4130 /* There may be arbitrary already-open fds at test start. */ in TEST()
4156 if (fcntl(syscall(__NR_getppid), F_GETFD) == -1) in TEST()
4171 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -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()
4188 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD_SMALL, &small), -1); in TEST()
4194 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD_BIG, &big), -1); in TEST()
4231 while (ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd) != -1 && in TEST()
4232 errno != -EINPROGRESS) in TEST()
4258 while (ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd) != -1 && in TEST()
4259 errno != -EINPROGRESS) in TEST()
4322 /* Should probably spot check /proc/sys/fs/file-nr */ in TEST()
4323 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4327 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4332 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4372 EXPECT_SYSCALL_RETURN(-EINVAL, in TEST()
4415 self->pid = 0; in FIXTURE_SETUP()
4427 self->pid = fork(); in FIXTURE_SETUP()
4428 ASSERT_GE(self->pid, 0); in FIXTURE_SETUP()
4430 if (self->pid == 0) { in FIXTURE_SETUP()
4439 if (self->pid) in FIXTURE_TEARDOWN()
4440 kill(self->pid, SIGKILL); in FIXTURE_TEARDOWN()
4447 ASSERT_EQ(0, ptrace(PTRACE_ATTACH, self->pid, NULL, 0)); in TEST_F()
4448 ASSERT_EQ(self->pid, wait(&wstatus)); in TEST_F()
4449 ASSERT_EQ(-1, ptrace(PTRACE_SETOPTIONS, self->pid, NULL, PTRACE_O_SUSPEND_SECCOMP)); in TEST_F()
4459 ret = ptrace(PTRACE_SEIZE, self->pid, NULL, PTRACE_O_SUSPEND_SECCOMP); in TEST_F()
4460 ASSERT_EQ(-1, ret); in TEST_F()
4467 * get_nth - Get the nth, space separated entry in a file.
4470 * Throws error if field is zero-lengthed.
4499 return nread - 1; in get_nth()
4597 /* get_proc_syscall - Get the syscall in progress for a given pid
4600 * Returns -1 if not in syscall (running or blocked)
4605 long ret = -1; in get_proc_syscall()
4620 /* Ensure non-fatal signals prior to receive are unmodified */
4660 /* Setup the non-fatal sigaction without SA_RESTART */ in TEST()
4668 exit(ret != -1 || errno != EINTR); in TEST()
4679 /* Send non-fatal kill signal */ in TEST()
4690 /* Ensure non-fatal signals after receive are blocked */
4740 * non-preemptible (TASK_KILLABLE) state. in TEST()
4743 /* Send non-fatal kill signal */ in TEST()
4748 * D (Disk Sleep) state after receiving non-fatal signal. in TEST()
4804 * non-preemptible (TASK_KILLABLE) state. in TEST()
4820 pthread_t leader; member
4836 ret = pthread_join(args->leader, &retval); in tsync_vs_dead_thread_leader_sibling()
4849 * Ensure that a dead thread leader doesn't prevent installing new filters with
4879 args->leader = pthread_self(); in TEST()
4885 /* Install a new filter just to the leader thread. */ in TEST()
4903 int err = -1, ret; in parse_uint_from_file()
4937 return -1; in get_uprobe_offset()
4939 while (fscanf(f, "%zx-%zx %s %zx %*[^\n]\n", &start, &end, buf, &base) == 4) { in get_uprobe_offset()
4946 return found ? (uintptr_t)addr - start + base : -1; in get_uprobe_offset()
4980 if (!variant->attach) in FIXTURE_SETUP()
4998 self->fd = syscall(__NR_perf_event_open, &attr, in FIXTURE_SETUP()
4999 getpid() /* pid */, -1 /* cpu */, -1 /* group_fd */, in FIXTURE_SETUP()
5005 /* we could call close(self->fd), but we'd need extra filter for in FIXTURE_TEARDOWN()
5014 return -1; in run_probed_with_filter()
5092 * - expand NNP testing
5093 * - better arch-specific TRACE and TRAP handlers.
5094 * - endianness checking when appropriate
5095 * - 64-bit arg prodding
5096 * - arch value testing (x86 modes especially)
5097 * - verify that FILTER_FLAG_LOG filters generate log messages
5098 * - verify that RET_LOG generates log messages