static int test_pidfd_send_signal_syscall_support(void) { int pidfd, ret; const char *test_name = "pidfd_send_signal check for support"; pidfd = open("/proc/self", O_DIRECTORY | O_CLOEXEC); if (pidfd < 0) ksft_exit_fail_msg( "%s test: Failed to open process file descriptor\n", test_name); ret = sys_pidfd_send_signal(pidfd, 0, NULL, 0); if (ret < 0) { /* * pidfd_send_signal() will currently return ENOSYS when * CONFIG_PROC_FS is not set. */ if (errno == ENOSYS) ksft_exit_skip( "%s test: pidfd_send_signal() syscall not supported (Ensure that CONFIG_PROC_FS=y is set)\n", test_name); ksft_exit_fail_msg("%s test: Failed to send signal\n", test_name); } close(pidfd); ksft_test_result_pass( "%s test: pidfd_send_signal() syscall is supported. Tests can be executed\n", test_name); return 0; }
int main(void) { int *rcv_fd, nodes; if (numa_available() < 0) ksft_exit_skip("no numa api support\n"); nodes = numa_max_node() + 1; rcv_fd = calloc(nodes, sizeof(int)); if (!rcv_fd) error(1, 0, "failed to allocate array"); fprintf(stderr, "---- IPv4 UDP ----\n"); test(rcv_fd, nodes, AF_INET, SOCK_DGRAM); fprintf(stderr, "---- IPv6 UDP ----\n"); test(rcv_fd, nodes, AF_INET6, SOCK_DGRAM); fprintf(stderr, "---- IPv4 TCP ----\n"); test(rcv_fd, nodes, AF_INET, SOCK_STREAM); fprintf(stderr, "---- IPv6 TCP ----\n"); test(rcv_fd, nodes, AF_INET6, SOCK_STREAM); free(rcv_fd); fprintf(stderr, "SUCCESS\n"); return 0; }
static void init_test(void) { struct timespec ts; struct sample sample; if (clock_gettime(CLOCK_MONOTONIC_RAW, &ts)) { perror("[FAIL] clock_gettime(CLOCK_MONOTONIC_RAW)"); ksft_exit_fail(); } mono_raw_base = ts.tv_sec; if (clock_gettime(CLOCK_MONOTONIC, &ts)) { perror("[FAIL] clock_gettime(CLOCK_MONOTONIC)"); ksft_exit_fail(); } mono_base = ts.tv_sec; user_hz = sysconf(_SC_CLK_TCK); precision = get_sample(&sample) / 2.0; printf("CLOCK_MONOTONIC_RAW+CLOCK_MONOTONIC precision: %.0f ns\t\t", 1e9 * precision); if (precision > MAX_PRECISION) ksft_exit_skip("precision: %.0f ns > MAX_PRECISION: %.0f ns\n", 1e9 * precision, 1e9 * MAX_PRECISION); printf("[OK]\n"); srand(ts.tv_sec ^ ts.tv_nsec); run_test(1, 0.0, 0.0); }
void suspend(void) { int power_state_fd; struct sigevent event = {}; int timerfd; int err; struct itimerspec spec = {}; if (getuid() != 0) ksft_exit_skip("Please run the test as root - Exiting.\n"); power_state_fd = open("/sys/power/state", O_RDWR); if (power_state_fd < 0) ksft_exit_fail_msg( "open(\"/sys/power/state\") failed %s)\n", strerror(errno)); timerfd = timerfd_create(CLOCK_BOOTTIME_ALARM, 0); if (timerfd < 0) ksft_exit_fail_msg("timerfd_create() failed\n"); spec.it_value.tv_sec = 5; err = timerfd_settime(timerfd, 0, &spec, NULL); if (err < 0) ksft_exit_fail_msg("timerfd_settime() failed\n"); if (write(power_state_fd, "mem", strlen("mem")) != strlen("mem")) ksft_exit_fail_msg("Failed to enter Suspend state\n"); close(timerfd); close(power_state_fd); }
int main(int argc, char **argv) { int opt; char media_device[256]; int count; struct media_device_info mdi; int ret; int fd; if (argc < 2) { printf("Usage: %s [-d </dev/mediaX>]\n", argv[0]); exit(-1); } /* Process arguments */ while ((opt = getopt(argc, argv, "d:")) != -1) { switch (opt) { case 'd': strncpy(media_device, optarg, sizeof(media_device) - 1); media_device[sizeof(media_device)-1] = '\0'; break; default: printf("Usage: %s [-d </dev/mediaX>]\n", argv[0]); exit(-1); } } if (getuid() != 0) ksft_exit_skip("Please run the test as root - Exiting.\n"); /* Generate random number of interations */ srand((unsigned int) time(NULL)); count = rand(); /* Open Media device and keep it open */ fd = open(media_device, O_RDWR); if (fd == -1) { printf("Media Device open errno %s\n", strerror(errno)); exit(-1); } printf("\nNote:\n" "While test is running, remove the device and\n" "ensure there are no use after free errors and\n" "other Oops in the dmesg. Enable KaSan kernel\n" "config option for use-after-free error detection.\n\n"); printf("Running test for %d iterations\n", count); while (count > 0) { ret = ioctl(fd, MEDIA_IOC_DEVICE_INFO, &mdi); if (ret < 0) printf("Media Device Info errno %s\n", strerror(errno)); else printf("Media device model %s driver %s - count %d\n", mdi.model, mdi.driver, count); sleep(10); count--; } }
int main(int argc, char **argv) { switch (test_membarrier_query()) { case TEST_MEMBARRIER_FAIL: return ksft_exit_fail(); case TEST_MEMBARRIER_SKIP: return ksft_exit_skip(); } switch (test_membarrier()) { case TEST_MEMBARRIER_FAIL: return ksft_exit_fail(); case TEST_MEMBARRIER_SKIP: return ksft_exit_skip(); } printf("membarrier: tests done!\n"); return ksft_exit_pass(); }
static void __do_binderfs_test(void) { int fd, ret, saved_errno; size_t len; ssize_t wret; bool keep = false; struct binderfs_device device = { 0 }; struct binder_version version = { 0 }; change_to_mountns(); ret = mkdir("/dev/binderfs", 0755); if (ret < 0) { if (errno != EEXIST) ksft_exit_fail_msg( "%s - Failed to create binderfs mountpoint\n", strerror(errno)); keep = true; } ret = mount(NULL, "/dev/binderfs", "binder", 0, 0); if (ret < 0) { if (errno != ENODEV) ksft_exit_fail_msg("%s - Failed to mount binderfs\n", strerror(errno)); keep ? : rmdir_protect_errno("/dev/binderfs"); ksft_exit_skip( "The Android binderfs filesystem is not available\n"); } /* binderfs mount test passed */ ksft_inc_pass_cnt(); memcpy(device.name, "my-binder", strlen("my-binder")); fd = open("/dev/binderfs/binder-control", O_RDONLY | O_CLOEXEC); if (fd < 0) ksft_exit_fail_msg( "%s - Failed to open binder-control device\n", strerror(errno)); ret = ioctl(fd, BINDER_CTL_ADD, &device); saved_errno = errno; close(fd); errno = saved_errno; if (ret < 0) { keep ? : rmdir_protect_errno("/dev/binderfs"); ksft_exit_fail_msg( "%s - Failed to allocate new binder device\n", strerror(errno)); }
bool run_test(int cpu) { int status; pid_t pid = fork(); pid_t wpid; if (pid < 0) { ksft_print_msg("fork() failed: %s\n", strerror(errno)); return false; } if (pid == 0) child(cpu); wpid = waitpid(pid, &status, __WALL); if (wpid != pid) { ksft_print_msg("waitpid() failed: %s\n", strerror(errno)); return false; } if (!WIFSTOPPED(status)) { ksft_print_msg("child did not stop: %s\n", strerror(errno)); return false; } if (WSTOPSIG(status) != SIGSTOP) { ksft_print_msg("child did not stop with SIGSTOP: %s\n", strerror(errno)); return false; } if (ptrace(PTRACE_SINGLESTEP, pid, NULL, NULL) < 0) { if (errno == EIO) { ksft_exit_skip( "ptrace(PTRACE_SINGLESTEP) not supported on this architecture: %s\n", strerror(errno)); } ksft_print_msg("ptrace(PTRACE_SINGLESTEP) failed: %s\n", strerror(errno)); return false; } wpid = waitpid(pid, &status, __WALL); if (wpid != pid) { ksft_print_msg("waitpid() failed: $s\n", strerror(errno)); return false; } if (WIFEXITED(status)) { ksft_print_msg("child did not single-step: %s\n", strerror(errno)); return false; } if (!WIFSTOPPED(status)) { ksft_print_msg("child did not stop: %s\n", strerror(errno)); return false; } if (WSTOPSIG(status) != SIGTRAP) { ksft_print_msg("child did not stop with SIGTRAP: %s\n", strerror(errno)); return false; } if (ptrace(PTRACE_CONT, pid, NULL, NULL) < 0) { ksft_print_msg("ptrace(PTRACE_CONT) failed: %s\n", strerror(errno)); return false; } wpid = waitpid(pid, &status, __WALL); if (wpid != pid) { ksft_print_msg("waitpid() failed: %s\n", strerror(errno)); return false; } if (!WIFEXITED(status)) { ksft_print_msg("child did not exit after PTRACE_CONT: %s\n", strerror(errno)); return false; } return true; }