Lines Matching +full:endianness +full:- +full:agnostic

1 // SPDX-License-Identifier: GPL-2.0-only
60 /* Attempt to de-conflict with the selftests tree. */
331 return -1; in __filecmp()
405 EXPECT_EQ(-1, ret); in TEST()
433 EXPECT_EQ(-1, ret); in TEST()
472 prog.len -= 1; in TEST()
514 TH_LOG("Allowed %d %d-insn filters (total with penalties:%d)", in TEST()
537 EXPECT_EQ(-1, ret); in TEST()
599 EXPECT_EQ(-1, ret); in TEST()
721 /* Only both with lower 32-bit for now. */ in TEST_SIGNAL()
761 /* Only both with lower 32-bit for now. */ in TEST_SIGNAL()
786 ASSERT_NE(-1, fd); in TEST_SIGNAL()
945 /* TODO(wad) add 64-bit versus 32-bit arg tests. */
962 EXPECT_EQ(-1, ret); in TEST()
993 EXPECT_EQ(-1, read(-1, NULL, 0)); in TEST()
1012 EXPECT_EQ(0, read(-1, NULL, 0)); in TEST()
1033 EXPECT_EQ(-1, read(-1, NULL, 0)); in TEST()
1064 EXPECT_EQ(-1, read(-1, NULL, 0)); in TEST()
1082 memset(&self->prog, 0, sizeof(self->prog)); in FIXTURE_SETUP()
1083 self->prog.filter = malloc(sizeof(filter)); in FIXTURE_SETUP()
1084 ASSERT_NE(NULL, self->prog.filter); in FIXTURE_SETUP()
1085 memcpy(self->prog.filter, filter, sizeof(filter)); in FIXTURE_SETUP()
1086 self->prog.len = (unsigned short)ARRAY_SIZE(filter); in FIXTURE_SETUP()
1091 if (self->prog.filter) in FIXTURE_TEARDOWN()
1092 free(self->prog.filter); in FIXTURE_TEARDOWN()
1102 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog); in TEST_F_SIGNAL()
1117 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog); in TEST_F_SIGNAL()
1153 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog); in TEST_F()
1173 EXPECT_EQ(__NR_getpid, sigsys->_syscall); in TEST_F()
1174 /* Make sure arch is non-zero. */ in TEST_F()
1175 EXPECT_NE(0, sigsys->_arch); in TEST_F()
1176 EXPECT_NE(0, (unsigned long)sigsys->_call_addr); in TEST_F()
1231 self->_x.filter = malloc(sizeof(_x##_insns)); \ in FIXTURE_SETUP()
1232 ASSERT_NE(NULL, self->_x.filter); \ in FIXTURE_SETUP()
1233 memcpy(self->_x.filter, &_x##_insns, sizeof(_x##_insns)); \ in FIXTURE_SETUP()
1234 self->_x.len = (unsigned short)ARRAY_SIZE(_x##_insns) in FIXTURE_SETUP()
1245 #define FILTER_FREE(_x) if (self->_x.filter) free(self->_x.filter) in FIXTURE_TEARDOWN()
1263 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1265 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1267 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1269 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F()
1271 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F()
1273 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->kill); in TEST_F()
1289 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F_SIGNAL()
1291 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F_SIGNAL()
1293 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F_SIGNAL()
1295 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F_SIGNAL()
1297 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F_SIGNAL()
1299 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->kill); in TEST_F_SIGNAL()
1318 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F_SIGNAL()
1320 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->kill); in TEST_F_SIGNAL()
1322 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F_SIGNAL()
1324 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F_SIGNAL()
1326 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F_SIGNAL()
1328 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F_SIGNAL()
1345 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F_SIGNAL()
1347 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F_SIGNAL()
1349 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F_SIGNAL()
1351 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F_SIGNAL()
1353 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F_SIGNAL()
1370 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F_SIGNAL()
1372 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trap); in TEST_F_SIGNAL()
1374 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F_SIGNAL()
1376 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F_SIGNAL()
1378 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F_SIGNAL()
1395 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1397 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1399 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1401 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F()
1417 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1419 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->error); in TEST_F()
1421 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1423 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1439 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1441 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1443 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1448 EXPECT_EQ(-1, syscall(__NR_getpid)); in TEST_F()
1460 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->trace); in TEST_F()
1462 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1464 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1469 EXPECT_EQ(-1, syscall(__NR_getpid)); in TEST_F()
1482 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1484 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1502 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->log); in TEST_F()
1504 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->allow); in TEST_F()
1538 int ret = -1; in start_tracer()
1548 while (ret == -1 && errno != EINVAL) in start_tracer()
1601 syscall(__NR_exit, _metadata->exit_code); in start_tracer()
1667 * agnostic. in tracer_poke()
1669 ret = ptrace(PTRACE_POKEDATA, tracee, info->poke_addr, 0x1001); in tracer_poke()
1690 self->poked = 0; in FIXTURE_SETUP()
1691 memset(&self->prog, 0, sizeof(self->prog)); in FIXTURE_SETUP()
1692 self->prog.filter = malloc(sizeof(filter)); in FIXTURE_SETUP()
1693 ASSERT_NE(NULL, self->prog.filter); in FIXTURE_SETUP()
1694 memcpy(self->prog.filter, filter, sizeof(filter)); in FIXTURE_SETUP()
1695 self->prog.len = (unsigned short)ARRAY_SIZE(filter); in FIXTURE_SETUP()
1698 self->tracer_args.poke_addr = (unsigned long)&self->poked; in FIXTURE_SETUP()
1701 self->tracer = setup_trace_fixture(_metadata, tracer_poke, in FIXTURE_SETUP()
1702 &self->tracer_args, false); in FIXTURE_SETUP()
1707 teardown_trace_fixture(_metadata, self->tracer); in FIXTURE_TEARDOWN()
1708 if (self->prog.filter) in FIXTURE_TEARDOWN()
1709 free(self->prog.filter); in FIXTURE_TEARDOWN()
1719 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog, 0, 0); in TEST_F()
1722 EXPECT_EQ(0, self->poked); in TEST_F()
1723 ret = read(-1, NULL, 0); in TEST_F()
1724 EXPECT_EQ(-1, ret); in TEST_F()
1725 EXPECT_EQ(0x1001, self->poked); in TEST_F()
1735 ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &self->prog, 0, 0); in TEST_F()
1738 EXPECT_EQ(0, self->poked); in TEST_F()
1740 EXPECT_EQ(0, self->poked); in TEST_F()
1805 * scv 0 system call uses -ve result \
1816 SYSCALL_RET(_regs) = -_result; \
1888 * shared), report it with TH_LOG() in an arch-specific definition
1903 # define EXPECT_SYSCALL_RETURN(val, action) EXPECT_EQ(-1, action)
1909 EXPECT_EQ(-1, action); \
1910 EXPECT_EQ(-(val), errno); \
1931 * architectures without HAVE_ARCH_TRACEHOOK (e.g. User-mode Linux).
1951 /* Architecture-specific syscall fetching routine. */
1957 return -1; in get_syscall()
1963 /* Architecture-specific syscall changing routine. */
1996 /* Change syscall return value (and set syscall number to -1). */
2000 long syscall = -1; in change_syscall_ret()
2035 change_syscall_ret(_metadata, tracee, -ESRCH); in tracer_seccomp()
2091 self->syscall_nr = get_syscall(_metadata, tracee); in tracer_ptrace()
2103 switch (self->syscall_nr) { in tracer_ptrace()
2110 syscall_nr_val = -1; in tracer_ptrace()
2114 syscall_nr_val = -1; in tracer_ptrace()
2115 syscall_ret_val = -ESRCH; in tracer_ptrace()
2165 self->mytid = syscall(__NR_gettid); in FIXTURE_SETUP()
2166 ASSERT_GT(self->mytid, 0); in FIXTURE_SETUP()
2167 ASSERT_NE(self->mytid, 1) { in FIXTURE_SETUP()
2171 self->mypid = getpid(); in FIXTURE_SETUP()
2172 ASSERT_GT(self->mypid, 0); in FIXTURE_SETUP()
2173 ASSERT_EQ(self->mytid, self->mypid); in FIXTURE_SETUP()
2175 self->parent = getppid(); in FIXTURE_SETUP()
2176 ASSERT_GT(self->parent, 0); in FIXTURE_SETUP()
2177 ASSERT_NE(self->parent, self->mypid); in FIXTURE_SETUP()
2180 self->tracer = setup_trace_fixture(_metadata, in FIXTURE_SETUP()
2181 variant->use_ptrace ? tracer_ptrace in FIXTURE_SETUP()
2183 self, variant->use_ptrace); in FIXTURE_SETUP()
2189 if (variant->use_ptrace) in FIXTURE_SETUP()
2198 teardown_trace_fixture(_metadata, self->tracer); in FIXTURE_TEARDOWN()
2204 SKIP(return, "arm32 does not support calling syscall -1"); in TEST()
2208 * and userspace asking for syscall "-1". in TEST()
2211 EXPECT_EQ(-1, syscall(-1)); in TEST()
2213 /* And no difference for "still not valid but not -1". */ in TEST()
2215 EXPECT_EQ(-1, syscall(-101)); in TEST()
2227 EXPECT_EQ(self->parent, syscall(__NR_getppid)); in TEST_F()
2228 EXPECT_NE(self->mypid, syscall(__NR_getppid)); in TEST_F()
2234 EXPECT_EQ(self->parent, syscall(__NR_getpid)); in TEST_F()
2235 EXPECT_NE(self->mypid, syscall(__NR_getpid)); in TEST_F()
2241 EXPECT_SYSCALL_RETURN(-ESRCH, syscall(__NR_openat)); in TEST_F()
2270 EXPECT_EQ(-1, syscall(__NR_mknodat, -1, NULL, 0, 0)); in TEST_F_SIGNAL()
2294 EXPECT_EQ(-1, syscall(__NR_getpid)); in TEST_F()
2318 EXPECT_NE(self->mypid, syscall(__NR_getpid)); in TEST_F_SIGNAL()
2338 ret = seccomp(-1, 0, &prog); in TEST()
2347 ret = seccomp(SECCOMP_SET_MODE_STRICT, -1, NULL); in TEST()
2357 ret = seccomp(SECCOMP_SET_MODE_FILTER, -1, &prog); in TEST()
2430 /* Test detection of individual known-good filter flags */ in TEST()
2448 EXPECT_EQ(-1, ret); in TEST()
2450 TH_LOG("Failed to detect that a known-good filter flag (0x%X) is supported!", in TEST()
2458 * Test detection of all known-good filter flags combined. But in TEST()
2470 EXPECT_EQ(-1, ret); in TEST()
2472 TH_LOG("Failed to detect that all known-good filter flags (0x%X) are supported!", in TEST()
2478 flag = -1; in TEST()
2481 EXPECT_EQ(-1, ret); in TEST()
2491 flag = flags[ARRAY_SIZE(flags) - 1] << 1; in TEST()
2493 EXPECT_EQ(-1, ret); in TEST()
2578 memset(&self->root_prog, 0, sizeof(self->root_prog)); in FIXTURE_SETUP()
2579 memset(&self->apply_prog, 0, sizeof(self->apply_prog)); in FIXTURE_SETUP()
2580 memset(&self->sibling, 0, sizeof(self->sibling)); in FIXTURE_SETUP()
2581 self->root_prog.filter = malloc(sizeof(root_filter)); in FIXTURE_SETUP()
2582 ASSERT_NE(NULL, self->root_prog.filter); in FIXTURE_SETUP()
2583 memcpy(self->root_prog.filter, &root_filter, sizeof(root_filter)); in FIXTURE_SETUP()
2584 self->root_prog.len = (unsigned short)ARRAY_SIZE(root_filter); in FIXTURE_SETUP()
2586 self->apply_prog.filter = malloc(sizeof(apply_filter)); in FIXTURE_SETUP()
2587 ASSERT_NE(NULL, self->apply_prog.filter); in FIXTURE_SETUP()
2588 memcpy(self->apply_prog.filter, &apply_filter, sizeof(apply_filter)); in FIXTURE_SETUP()
2589 self->apply_prog.len = (unsigned short)ARRAY_SIZE(apply_filter); in FIXTURE_SETUP()
2591 self->sibling_count = 0; in FIXTURE_SETUP()
2592 pthread_mutex_init(&self->mutex, NULL); in FIXTURE_SETUP()
2593 pthread_cond_init(&self->cond, NULL); in FIXTURE_SETUP()
2594 sem_init(&self->started, 0, 0); in FIXTURE_SETUP()
2595 self->sibling[0].tid = 0; in FIXTURE_SETUP()
2596 self->sibling[0].cond = &self->cond; in FIXTURE_SETUP()
2597 self->sibling[0].started = &self->started; in FIXTURE_SETUP()
2598 self->sibling[0].mutex = &self->mutex; in FIXTURE_SETUP()
2599 self->sibling[0].diverge = 0; in FIXTURE_SETUP()
2600 self->sibling[0].num_waits = 1; in FIXTURE_SETUP()
2601 self->sibling[0].prog = &self->root_prog; in FIXTURE_SETUP()
2602 self->sibling[0].metadata = _metadata; in FIXTURE_SETUP()
2603 self->sibling[1].tid = 0; in FIXTURE_SETUP()
2604 self->sibling[1].cond = &self->cond; in FIXTURE_SETUP()
2605 self->sibling[1].started = &self->started; in FIXTURE_SETUP()
2606 self->sibling[1].mutex = &self->mutex; in FIXTURE_SETUP()
2607 self->sibling[1].diverge = 0; in FIXTURE_SETUP()
2608 self->sibling[1].prog = &self->root_prog; in FIXTURE_SETUP()
2609 self->sibling[1].num_waits = 1; in FIXTURE_SETUP()
2610 self->sibling[1].metadata = _metadata; in FIXTURE_SETUP()
2617 if (self->root_prog.filter) in FIXTURE_TEARDOWN()
2618 free(self->root_prog.filter); in FIXTURE_TEARDOWN()
2619 if (self->apply_prog.filter) in FIXTURE_TEARDOWN()
2620 free(self->apply_prog.filter); in FIXTURE_TEARDOWN()
2622 for ( ; sib < self->sibling_count; ++sib) { in FIXTURE_TEARDOWN()
2623 struct tsync_sibling *s = &self->sibling[sib]; in FIXTURE_TEARDOWN()
2625 if (!s->tid) in FIXTURE_TEARDOWN()
2631 pthread_kill(s->tid, 9); in FIXTURE_TEARDOWN()
2633 pthread_mutex_destroy(&self->mutex); in FIXTURE_TEARDOWN()
2634 pthread_cond_destroy(&self->cond); in FIXTURE_TEARDOWN()
2635 sem_destroy(&self->started); in FIXTURE_TEARDOWN()
2643 me->system_tid = syscall(__NR_gettid); in tsync_sibling()
2645 pthread_mutex_lock(me->mutex); in tsync_sibling()
2646 if (me->diverge) { in tsync_sibling()
2647 /* Just re-apply the root prog to fork the tree */ in tsync_sibling()
2649 me->prog, 0, 0); in tsync_sibling()
2651 sem_post(me->started); in tsync_sibling()
2654 pthread_mutex_unlock(me->mutex); in tsync_sibling()
2658 pthread_cond_wait(me->cond, me->mutex); in tsync_sibling()
2659 me->num_waits = me->num_waits - 1; in tsync_sibling()
2660 } while (me->num_waits); in tsync_sibling()
2661 pthread_mutex_unlock(me->mutex); in tsync_sibling()
2666 read(-1, NULL, 0); in tsync_sibling()
2672 pthread_create(&sibling->tid, NULL, tsync_sibling, (void *)sibling); in tsync_start_sibling()
2704 self->sibling[0].diverge = 1; in TEST_F()
2705 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2706 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2708 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2709 sem_wait(&self->started); in TEST_F()
2710 self->sibling_count++; in TEST_F()
2714 pthread_mutex_lock(&self->mutex); in TEST_F()
2715 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2716 TH_LOG("cond broadcast non-zero"); in TEST_F()
2718 pthread_mutex_unlock(&self->mutex); in TEST_F()
2721 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2723 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2736 ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); in TEST_F()
2743 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2744 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2746 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2747 sem_wait(&self->started); in TEST_F()
2748 self->sibling_count++; in TEST_F()
2752 &self->apply_prog); in TEST_F()
2757 pthread_mutex_lock(&self->mutex); in TEST_F()
2758 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2759 TH_LOG("cond broadcast non-zero"); in TEST_F()
2761 pthread_mutex_unlock(&self->mutex); in TEST_F()
2763 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2765 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2774 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2775 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2776 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2777 sem_wait(&self->started); in TEST_F()
2778 self->sibling_count++; in TEST_F()
2782 pthread_mutex_lock(&self->mutex); in TEST_F()
2783 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2784 TH_LOG("cond broadcast non-zero"); in TEST_F()
2786 pthread_mutex_unlock(&self->mutex); in TEST_F()
2789 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2791 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2801 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2802 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2803 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2804 sem_wait(&self->started); in TEST_F()
2805 self->sibling_count++; in TEST_F()
2813 &self->apply_prog); in TEST_F()
2822 pthread_mutex_lock(&self->mutex); in TEST_F()
2823 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2824 TH_LOG("cond broadcast non-zero"); in TEST_F()
2826 pthread_mutex_unlock(&self->mutex); in TEST_F()
2829 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2831 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2844 ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); in TEST_F()
2851 self->sibling[0].diverge = 1; in TEST_F()
2852 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2853 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2855 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2856 sem_wait(&self->started); in TEST_F()
2857 self->sibling_count++; in TEST_F()
2861 &self->apply_prog); in TEST_F()
2862 ASSERT_EQ(self->sibling[0].system_tid, ret) { in TEST_F()
2867 pthread_mutex_lock(&self->mutex); in TEST_F()
2868 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2869 TH_LOG("cond broadcast non-zero"); in TEST_F()
2871 pthread_mutex_unlock(&self->mutex); in TEST_F()
2874 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2876 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2889 ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); in TEST_F()
2896 self->sibling[0].diverge = 1; in TEST_F()
2897 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2898 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2900 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2901 sem_wait(&self->started); in TEST_F()
2902 self->sibling_count++; in TEST_F()
2907 ret = seccomp(SECCOMP_SET_MODE_FILTER, flags, &self->apply_prog); in TEST_F()
2911 ASSERT_EQ(-1, ret) { in TEST_F()
2916 pthread_mutex_lock(&self->mutex); in TEST_F()
2917 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2918 TH_LOG("cond broadcast non-zero"); in TEST_F()
2920 pthread_mutex_unlock(&self->mutex); in TEST_F()
2923 PTHREAD_JOIN(self->sibling[0].tid, &status); in TEST_F()
2925 PTHREAD_JOIN(self->sibling[1].tid, &status); in TEST_F()
2945 self->sibling[0].diverge = 1; in TEST_F()
2946 tsync_start_sibling(&self->sibling[0]); in TEST_F()
2947 tsync_start_sibling(&self->sibling[1]); in TEST_F()
2949 while (self->sibling_count < TSYNC_SIBLINGS) { in TEST_F()
2950 sem_wait(&self->started); in TEST_F()
2951 self->sibling_count++; in TEST_F()
2954 ret = seccomp(SECCOMP_SET_MODE_FILTER, 0, &self->root_prog); in TEST_F()
2963 &self->apply_prog); in TEST_F()
2964 ASSERT_EQ(ret, self->sibling[0].system_tid) { in TEST_F()
2968 if (ret == self->sibling[0].system_tid) in TEST_F()
2971 pthread_mutex_lock(&self->mutex); in TEST_F()
2976 self->sibling[!sib].num_waits += 1; in TEST_F()
2979 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
2980 TH_LOG("cond broadcast non-zero"); in TEST_F()
2982 pthread_mutex_unlock(&self->mutex); in TEST_F()
2983 PTHREAD_JOIN(self->sibling[sib].tid, &status); in TEST_F()
2986 while (!kill(self->sibling[sib].system_tid, 0)) in TEST_F()
2992 &self->apply_prog); in TEST_F()
2997 pthread_mutex_lock(&self->mutex); in TEST_F()
3002 if (self->sibling[sib].num_waits > 1) in TEST_F()
3003 self->sibling[sib].num_waits = 1; in TEST_F()
3004 ASSERT_EQ(0, pthread_cond_broadcast(&self->cond)) { in TEST_F()
3005 TH_LOG("cond broadcast non-zero"); in TEST_F()
3007 pthread_mutex_unlock(&self->mutex); in TEST_F()
3008 PTHREAD_JOIN(self->sibling[sib].tid, &status); in TEST_F()
3011 while (!kill(self->sibling[sib].system_tid, 0)) in TEST_F()
3015 &self->apply_prog); in TEST_F()
3107 syscall(__NR_exit, _metadata->exit_code); in TEST()
3135 /* Verify signal delivery came from child (seccomp-triggered). */ in TEST()
3172 * - native ARM registers do NOT expose true syscall. in TEST()
3173 * - compat ARM registers on ARM64 DO expose true syscall. in TEST()
3174 * - values of utsbuf.machine include 'armv8l' or 'armb8b' in TEST()
3195 _metadata->exit_code = KSFT_FAIL; in TEST()
3287 EXPECT_EQ(ret, -1); in TEST()
3404 /* Check that we get -ENOSYS with no listener attached */ in TEST()
3416 /* Add some no-op filters for grins. */ in TEST()
3430 -1); in TEST()
3444 EXPECT_GT(poll(&pollfd, 1, -1), 0); in TEST()
3449 req.pid = -1; in TEST()
3452 EXPECT_EQ(-1, ret); in TEST()
3463 EXPECT_GT(poll(&pollfd, 1, -1), 0); in TEST()
3474 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), -1); in TEST()
3498 ASSERT_EQ(-1, user_notif_syscall(__NR_getppid, flags)); in TEST()
3543 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ID_VALID, &req.id), -1); in TEST()
3547 EXPECT_EQ(ret, -1); in TEST()
3551 static int handled = -1;
3600 exit(!(ret == -1 && errno == 512)); in TEST()
3618 resp.error = -EPERM; in TEST()
3621 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), -1); in TEST()
3628 resp.error = -512; /* -ERESTARTSYS */ in TEST()
3661 exit(ret != -1 && errno != ENOSYS); in TEST()
3815 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_RECV, NULL), -1); in TEST()
3880 EXPECT_GT(poll(&pollfd, 1, -1), 0); in TEST()
3888 EXPECT_GT(poll(&pollfd, 1, -1), 0); in TEST()
3902 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), -1); in TEST()
3907 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_SEND, &resp), -1); in TEST()
4026 EXPECT_EQ(ioctl(200, SECCOMP_IOCTL_NOTIF_RECV, &req), -1); in TEST()
4127 if (fcntl(i, F_GETFD) == -1) in get_next_fd()
4146 /* There may be arbitrary already-open fds at test start. */ in TEST()
4172 if (fcntl(syscall(__NR_getppid), F_GETFD) == -1) in TEST()
4187 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4193 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4199 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4204 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD_SMALL, &small), -1); in TEST()
4210 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD_BIG, &big), -1); in TEST()
4247 while (ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd) != -1 && in TEST()
4248 errno != -EINPROGRESS) in TEST()
4274 while (ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd) != -1 && in TEST()
4275 errno != -EINPROGRESS) in TEST()
4338 /* Should probably spot check /proc/sys/fs/file-nr */ in TEST()
4339 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4343 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4348 EXPECT_EQ(ioctl(listener, SECCOMP_IOCTL_NOTIF_ADDFD, &addfd), -1); in TEST()
4388 EXPECT_SYSCALL_RETURN(-EINVAL, in TEST()
4431 self->pid = 0; in FIXTURE_SETUP()
4443 self->pid = fork(); in FIXTURE_SETUP()
4444 ASSERT_GE(self->pid, 0); in FIXTURE_SETUP()
4446 if (self->pid == 0) { in FIXTURE_SETUP()
4455 if (self->pid) in FIXTURE_TEARDOWN()
4456 kill(self->pid, SIGKILL); in FIXTURE_TEARDOWN()
4463 ASSERT_EQ(0, ptrace(PTRACE_ATTACH, self->pid, NULL, 0)); in TEST_F()
4464 ASSERT_EQ(self->pid, wait(&wstatus)); in TEST_F()
4465 ASSERT_EQ(-1, ptrace(PTRACE_SETOPTIONS, self->pid, NULL, PTRACE_O_SUSPEND_SECCOMP)); in TEST_F()
4475 ret = ptrace(PTRACE_SEIZE, self->pid, NULL, PTRACE_O_SUSPEND_SECCOMP); in TEST_F()
4476 ASSERT_EQ(-1, ret); in TEST_F()
4483 * get_nth - Get the nth, space separated entry in a file.
4486 * Throws error if field is zero-lengthed.
4515 return nread - 1; in get_nth()
4613 /* get_proc_syscall - Get the syscall in progress for a given pid
4616 * Returns -1 if not in syscall (running or blocked)
4621 long ret = -1; in get_proc_syscall()
4636 /* Ensure non-fatal signals prior to receive are unmodified */
4676 /* Setup the non-fatal sigaction without SA_RESTART */ in TEST()
4684 exit(ret != -1 || errno != EINTR); in TEST()
4695 /* Send non-fatal kill signal */ in TEST()
4706 /* Ensure non-fatal signals after receive are blocked */
4756 * non-preemptible (TASK_KILLABLE) state. in TEST()
4759 /* Send non-fatal kill signal */ in TEST()
4764 * D (Disk Sleep) state after receiving non-fatal signal. in TEST()
4820 * non-preemptible (TASK_KILLABLE) state. in TEST()
4936 * whether the child wrongly skips going into the non-preemptible in TEST()
4978 ret = pthread_join(args->leader, &retval); in tsync_vs_dead_thread_leader_sibling()
5021 args->leader = pthread_self(); in TEST()
5043 * -Wattributes, otherwise the compilation might fail.
5046 #pragma GCC diagnostic ignored "-Wattributes"
5074 int err = -1, ret; in parse_uint_from_file()
5108 return -1; in get_uprobe_offset()
5110 while (fscanf(f, "%zx-%zx %s %zx %*[^\n]\n", &start, &end, buf, &base) == 4) { in get_uprobe_offset()
5117 return found ? (uintptr_t)addr - start + base : -1; in get_uprobe_offset()
5162 if (!variant->attach) in FIXTURE_SETUP()
5170 if (variant->uretprobe) { in FIXTURE_SETUP()
5175 offset = get_uprobe_offset(variant->uretprobe ? probed_uretprobe : probed_uprobe); in FIXTURE_SETUP()
5178 if (variant->uretprobe) in FIXTURE_SETUP()
5185 self->fd = syscall(__NR_perf_event_open, &attr, in FIXTURE_SETUP()
5186 getpid() /* pid */, -1 /* cpu */, -1 /* group_fd */, in FIXTURE_SETUP()
5192 /* we could call close(self->fd), but we'd need extra filter for in FIXTURE_TEARDOWN()
5201 return -1; in run_probed_with_filter()
5291 * - expand NNP testing
5292 * - better arch-specific TRACE and TRAP handlers.
5293 * - endianness checking when appropriate
5294 * - 64-bit arg prodding
5295 * - arch value testing (x86 modes especially)
5296 * - verify that FILTER_FLAG_LOG filters generate log messages
5297 * - verify that RET_LOG generates log messages