int main(void) { static const char sample[] = "access_sample"; long rc = syscall(__NR_access, sample, F_OK); printf("access(\"%s\", F_OK) = %ld %s (%m)\n", sample, rc, errno2name()); rc = syscall(__NR_access, sample, R_OK|W_OK|X_OK); printf("access(\"%s\", R_OK|W_OK|X_OK) = %ld %s (%m)\n", sample, rc, errno2name()); return 0; }
int main(void) { tprintf("%s", ""); static char tmp[] = "preadv-pwritev-tmpfile"; if (open(tmp, O_CREAT|O_RDONLY|O_TRUNC, 0600) != 0) perror_msg_and_fail("creat: %s", tmp); if (open(tmp, O_WRONLY) != 1) perror_msg_and_fail("open: %s", tmp); if (unlink(tmp)) perror_msg_and_fail("unlink: %s", tmp); static const char w0_c[] = "012"; const char *w0_d = hexdump_strdup(w0_c); void *w0 = tail_memdup(w0_c, LENGTH_OF(w0_c)); const void *efault = w0 + LENGTH_OF(w0_c); static const char w1_c[] = "34567"; const char *w1_d = hexdump_strdup(w1_c); void *w1 = tail_memdup(w1_c, LENGTH_OF(w1_c)); static const char w2_c[] = "89abcde"; const char *w2_d = hexdump_strdup(w2_c); void *w2 = tail_memdup(w2_c, LENGTH_OF(w2_c)); long rc; rc = pwritev(1, efault, 42, 0); tprintf("pwritev(1, %p, 42, 0) = %ld %s (%m)\n", efault, rc, errno2name()); rc = preadv(0, efault, 42, 0); tprintf("preadv(0, %p, 42, 0) = %ld %s (%m)\n", efault, rc, errno2name()); static const char r0_c[] = "01234567"; const char *r0_d = hexdump_strdup(r0_c); static const char r1_c[] = "89abcde"; const char *r1_d = hexdump_strdup(r1_c); const struct iovec w_iov_[] = { { .iov_base = w0, .iov_len = LENGTH_OF(w0_c) }, { .iov_base = w1,
int main(void) { static const char fname[] = "fchmod_test_file"; int fd = open(fname, O_CREAT|O_RDONLY, 0400); if (fd == -1) perror_msg_and_fail("open"); if (unlink(fname) == -1) perror_msg_and_fail("unlink"); if (syscall(__NR_fchmod, fd, 0600) == 0) { close(fd); printf("fchmod(%d, 0600) = 0\n", fd); if (syscall(__NR_fchmod, fd, 0600) != -1) perror_msg_and_fail("fchmod"); } printf("fchmod(%d, 0600) = -1 %s (%m)\n", fd, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { long rc = syscall(__NR_clock_adjtime, CLOCK_MONOTONIC, NULL); printf("clock_adjtime(CLOCK_MONOTONIC, NULL) = %ld %s (%m)\n", rc, errno2name()); void *efault = tail_alloc(1); rc = syscall(__NR_clock_adjtime, CLOCK_REALTIME, efault); printf("clock_adjtime(CLOCK_REALTIME, %p) = %ld %s (%m)\n", efault, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { long rc = syscall(__NR_userfaultfd, 1 | O_NONBLOCK | O_CLOEXEC); printf("userfaultfd(O_NONBLOCK|O_CLOEXEC|0x1) = %ld %s (%m)\n", rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { long rc = syscall(__NR_sethostname, 0, 63); printf("sethostname(NULL, 63) = %ld %s (%m)\n", rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { static const char buf[] = "reboot"; long rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, INVALID_MAGIC, LINUX_REBOOT_CMD_RESTART2, buf); printf("reboot(LINUX_REBOOT_MAGIC1, %#x /* LINUX_REBOOT_MAGIC_??? */," " LINUX_REBOOT_CMD_RESTART2, \"%s\") = %ld %s (%m)\n", INVALID_MAGIC, buf, rc, errno2name()); rc = syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, INVALID_CMD); printf("reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2," " %#x /* LINUX_REBOOT_CMD_??? */) = %ld %s (%m)\n", INVALID_CMD, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { const long int fd = (long int) 0xdeadbeefffffffff; long rc = syscall(__NR_fsync, fd); printf("fsync(%d) = %ld %s (%m)\n", (int) fd, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { static const char text[] = "strace"; int rc = syscall(__NR_memfd_create, text, 7); printf("memfd_create(\"%s\", %s) = %d %s (%m)\n", text, "MFD_CLOEXEC|MFD_ALLOW_SEALING|0x4", rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { static const char sample[] = "chroot.sample"; long rc = syscall(__NR_chroot, sample); printf("chroot(\"%s\") = %ld %s (%m)\n", sample, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { struct epoll_event *const ev = tail_alloc(sizeof(*ev)); ev->events = EPOLLIN; long rc = invoke_syscall(-1U, EPOLL_CTL_ADD, -2U, ev); printf("epoll_ctl(-1, EPOLL_CTL_ADD, -2, {EPOLLIN," " {u32=%u, u64=%" PRIu64 "}}) = %ld %s (%m)\n", ev->data.u32, ev->data.u64, rc, errno2name()); rc = invoke_syscall(-3U, EPOLL_CTL_DEL, -4U, ev); printf("epoll_ctl(-3, EPOLL_CTL_DEL, -4, %p) = %ld %s (%m)\n", ev, rc, errno2name()); rc = invoke_syscall(-1UL, EPOLL_CTL_MOD, -16UL, 0); printf("epoll_ctl(-1, EPOLL_CTL_MOD, -16, NULL) = %ld %s (%m)\n", rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { const unsigned long addr = (unsigned long) 0xfacefeeddeadbeefULL; const unsigned long len = (unsigned long) 0xcafef00dbadc0dedULL; long rc = syscall(__NR_mlock2, addr, len, -1UL); printf("mlock2(%#lx, %lu, MLOCK_ONFAULT|0xfffffffe)" " = %ld %s (%m)\n", addr, len, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { static const char sample[] = "faccessat.sample"; const long int fd = (long int) 0xdeadbeefffffffff; long rc = syscall(__NR_faccessat, fd, sample, F_OK); printf("faccessat(%d, \"%s\", F_OK) = %ld %s (%m)\n", (int) fd, sample, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { const long int fd_old = (long int) 0xdeadbeefffffffff; const long int fd_new = (long int) 0xdeadbeeffffffffe; long rc = syscall(__NR_dup2, fd_old, fd_new); printf("dup2(%d, %d) = %ld %s (%m)\n", (int) fd_old, (int) fd_new, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(int ac, char **av) { unsigned long dev = (unsigned long) 0xdeadbeefbadc0dedULL; sample = av[0]; long rc = call_mknod(0, dev); printf("mknod(\"%s\", 000) = %ld %s (%m)\n", sample, rc, errno2name()); rc = call_mknod(0xffff, dev); printf("mknod(\"%s\", %#03ho) = %ld %s (%m)\n", sample, (unsigned short) -1, rc, errno2name()); rc = call_mknod(S_IFREG, 0); printf("mknod(\"%s\", S_IFREG|000) = %ld %s (%m)\n", sample, rc, errno2name()); rc = call_mknod(S_IFDIR | 06, 0); printf("mknod(\"%s\", S_IFDIR|006) = %ld %s (%m)\n", sample, rc, errno2name()); rc = call_mknod(S_IFLNK | 060, 0); printf("mknod(\"%s\", S_IFLNK|060) = %ld %s (%m)\n", sample, rc, errno2name()); rc = call_mknod(S_IFIFO | 0600, 0); printf("mknod(\"%s\", S_IFIFO|0600) = %ld %s (%m)\n", sample, rc, errno2name()); dev = (unsigned long) 0xdeadbeef00000000ULL | makedev(1, 7); rc = call_mknod(S_IFCHR | 024, dev); printf("mknod(\"%s\", S_IFCHR|024, makedev(1, 7)) = %ld %s (%m)\n", sample, rc, errno2name()); const unsigned short mode = (0xffff & ~S_IFMT) | S_IFBLK; dev = (unsigned long) 0xdeadbeefbadc0dedULL; rc = call_mknod(mode, dev); printf("mknod(\"%s\", S_IFBLK|S_ISUID|S_ISGID|S_ISVTX|%#03ho" ", makedev(%u, %u)) = %ld %s (%m)\n", sample, mode & ~(S_IFMT|S_ISUID|S_ISGID|S_ISVTX), major((unsigned) dev), minor((unsigned) dev), rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { const long int fd_old = (long int) 0xdeadbeefffffffff; const long int fd_new = (long int) 0xdeadbeeffffffffe; long rc = syscall(__NR_renameat, fd_old, OLD_FILE, fd_new, NEW_FILE); printf("renameat(%d, \"%s\", %d, \"%s\") = %ld %s (%m)\n", (int) fd_old, OLD_FILE, (int) fd_new, NEW_FILE, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { struct sock_filter *const filter = tail_alloc(sizeof(*filter) * N); const void *const efault = tail_alloc(1); struct sock_fprog *const prog = tail_alloc(sizeof(*prog)); long rc; prog->filter = filter; prog->len = N; rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -1, prog); printf("seccomp(SECCOMP_SET_MODE_FILTER, %s, {len=%u, filter=%p})" " = %ld %s (%m)\n", "SECCOMP_FILTER_FLAG_TSYNC|0xfffffffe", prog->len, prog->filter, rc, errno2name()); rc = syscall(__NR_seccomp, SECCOMP_SET_MODE_FILTER, -2L, efault); printf("seccomp(SECCOMP_SET_MODE_FILTER, %s, %p) = %ld %s (%m)\n", "0xfffffffe /* SECCOMP_FILTER_FLAG_??? */", efault, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { static const char sample_1[] = "linkat_sample_old"; static const char sample_2[] = "linkat_sample_new"; const long fd_old = (long) 0xdeadbeefffffffff; const long fd_new = (long) 0xdeadbeeffffffffe; long rc = syscall(__NR_linkat, fd_old, sample_1, fd_new, sample_2, 0); printf("linkat(%d, \"%s\", %d, \"%s\", 0) = %ld %s (%m)\n", (int) fd_old, sample_1, (int) fd_new, sample_2, rc, errno2name()); rc = syscall(__NR_linkat, -100, sample_1, -100, sample_2, -1L); printf("linkat(%s, \"%s\", %s, \"%s\", %s) = %ld %s (%m)\n", "AT_FDCWD", sample_1, "AT_FDCWD", sample_2, "AT_SYMLINK_NOFOLLOW|AT_REMOVEDIR|AT_SYMLINK_FOLLOW" "|AT_NO_AUTOMOUNT|AT_EMPTY_PATH|0xffffe0ff", rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { sigset_t set[2]; struct epoll_event *const ev = tail_alloc(sizeof(*ev)); long rc = syscall(__NR_epoll_pwait, -1, ev, 1, -2, set, (kernel_ulong_t) sizeof(set)); printf("epoll_pwait(-1, %p, 1, -2, %p, %u) = %ld %s (%m)\n", ev, set, (unsigned) sizeof(set), rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { const unsigned int size = PATH_MAX - 1; const char *p = tail_alloc(size); const char *const efault = p + size; for (; p <= efault; ++p) { int rc = chdir(p); printf("chdir(%p) = %d %s (%m)\n", p, rc, errno2name()); } puts("+++ exited with 0 +++"); return 0; }
int main(void) { getsockopt(-1, SOL_RAW, ICMP_FILTER, 0, 0); printf("getsockopt(-1, SOL_RAW, ICMP_FILTER, NULL, NULL) = -1 %s (%m)\n", errno2name()); setsockopt(-1, SOL_RAW, ICMP_FILTER, NULL, 0); printf("setsockopt(-1, SOL_RAW, ICMP_FILTER, NULL, 0) = -1 %s (%m)\n", errno2name()); socklen_t *const plen = tail_alloc(sizeof(*plen)); void *const efault = plen + 1; struct icmp_filter *const f = tail_alloc(sizeof(*f)); getsockopt(-1, SOL_RAW, ICMP_FILTER, f, plen); printf("getsockopt(-1, SOL_RAW, ICMP_FILTER, %p, %p) = -1 %s (%m)\n", f, plen, errno2name()); setsockopt(-1, SOL_RAW, ICMP_FILTER, efault, sizeof(*f)); printf("setsockopt(-1, SOL_RAW, ICMP_FILTER, %p, %u) = -1 %s (%m)\n", efault, (unsigned) sizeof(*f), errno2name()); f->data = ~( 1<<ICMP_ECHOREPLY | 1<<ICMP_DEST_UNREACH | 1<<ICMP_SOURCE_QUENCH | 1<<ICMP_REDIRECT | 1<<ICMP_TIME_EXCEEDED | 1<<ICMP_PARAMETERPROB); setsockopt(-1, SOL_RAW, ICMP_FILTER, f, -2); printf("setsockopt(-1, SOL_RAW, ICMP_FILTER, %p, -2) = -1 %s (%m)\n", f, errno2name()); setsockopt(-1, SOL_RAW, ICMP_FILTER, f, sizeof(*f)); printf("setsockopt(-1, SOL_RAW, ICMP_FILTER, %s, %u) = -1 %s (%m)\n", "~(1<<ICMP_ECHOREPLY|1<<ICMP_DEST_UNREACH|1<<ICMP_SOURCE_QUENCH" "|1<<ICMP_REDIRECT|1<<ICMP_TIME_EXCEEDED|1<<ICMP_PARAMETERPROB)", (unsigned) sizeof(*f), errno2name()); setsockopt(-1, SOL_RAW, ICMP_FILTER, f, sizeof(*f) * 2); printf("setsockopt(-1, SOL_RAW, ICMP_FILTER, %s, %u) = -1 %s (%m)\n", "~(1<<ICMP_ECHOREPLY|1<<ICMP_DEST_UNREACH|1<<ICMP_SOURCE_QUENCH" "|1<<ICMP_REDIRECT|1<<ICMP_TIME_EXCEEDED|1<<ICMP_PARAMETERPROB)", (unsigned) sizeof(*f) * 2, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { const long int fd_in = (long int) 0xdeadbeefffffffff; const long int fd_out = (long int) 0xdeadbeeffffffffe; const size_t len = (size_t) 0xdeadbef3facefed3ULL; const unsigned int flags = 15; long rc = syscall(__NR_tee, fd_in, fd_out, len, flags); printf("tee(%d, %d, %zu, %s) = %ld %s (%m)\n", (int) fd_in, (int) fd_out, len, "SPLICE_F_MOVE|SPLICE_F_NONBLOCK|SPLICE_F_MORE|SPLICE_F_GIFT", rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { const kernel_ulong_t len = (kernel_ulong_t) 0xdefaced0badc0deULL; long rc; if (sizeof(len) > sizeof(long)) rc = ftruncate(-1, len); else rc = syscall(__NR_ftruncate, -1L, len); printf("ftruncate(-1, %llu) = %ld %s (%m)\n", (unsigned long long) len, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { const unsigned long len = (unsigned long) 0xcafef00dbadc0dedULL; const unsigned long mode = 3; const unsigned long nodemask = (unsigned long) 0xfacefeedfffffff1ULL; const unsigned long maxnode = (unsigned long) 0xdeadbeeffffffff2ULL; const unsigned long flags = -1UL; long rc = syscall(__NR_mbind, 0, len, mode, nodemask, maxnode, flags); printf("mbind(NULL, %lu, %s, %#lx, %lu, %s|%#x) = %ld %s (%m)\n", len, "MPOL_INTERLEAVE", nodemask, maxnode, "MPOL_MF_STRICT|MPOL_MF_MOVE|MPOL_MF_MOVE_ALL", (unsigned) flags & ~7, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(int ac, const char **av) { char *dname; assert(ac == 1); assert(asprintf(&dname, "%s.test.tmp.dir", av[0]) > 0); assert(!mkdir(dname, 0700)); assert(!chdir(dname)); (void) close(0); assert(!creat(fname, 0600)); assert(!close(0)); assert(!open(".", O_RDONLY | O_DIRECTORY)); unsigned long count = (unsigned long) 0xfacefeeddeadbeefULL; long rc = syscall(__NR_getdents64, (long) 0xdefacedffffffffULL, NULL, count); printf("getdents64(-1, NULL, %u) = %ld %s (%m)\n", (unsigned) count, rc, errno2name()); count = (unsigned long) 0xfacefeed00000000ULL | sizeof(buf); while ((rc = syscall(__NR_getdents64, 0, buf, count))) { kernel_dirent64 *d; long i; if (rc < 0) perror_msg_and_skip("getdents64"); printf("getdents64(0, ["); for (i = 0; i < rc; i += d->d_reclen) { d = (kernel_dirent64 *) &buf[i]; if (i) printf(", "); print_dirent(d); } printf("], %u) = %ld\n", (unsigned) count, rc); } printf("getdents64(0, [], %u) = 0\n", (unsigned) count); puts("+++ exited with 0 +++"); assert(!unlink(fname)); assert(!chdir("..")); assert(!rmdir(dname)); return 0; }
int main(void) { const int pid = getpid(); long rc = syscall(__NR_getpriority, PRIO_PROCESS, (unsigned long) 0xffffffff00000000 | pid); printf("getpriority(PRIO_PROCESS, %d) = %ld\n", pid, rc); rc = syscall(__NR_setpriority, PRIO_PROCESS, (unsigned long) 0xffffffff00000000 | pid, (unsigned long) 0xffffffff00000000); if (rc) printf("setpriority(PRIO_PROCESS, %d, 0) = %ld %s (%m)\n", pid, rc, errno2name()); else printf("setpriority(PRIO_PROCESS, %d, 0) = 0\n", pid); puts("+++ exited with 0 +++"); return 0; }
int main(void) { const int fd = -1; const off64_t offset = 0xdeadbeefbadc0ded; const off64_t nbytes = 0xfacefeedcafef00d; const unsigned int flags = -1; int rc = sync_file_range(fd, offset, nbytes, flags); printf("%s(%d, SYNC_FILE_RANGE_WAIT_BEFORE" "|SYNC_FILE_RANGE_WRITE|SYNC_FILE_RANGE_WAIT_AFTER" "|0xfffffff8, %lld, %lld) = %d %s (%m)\n", "sync_file_range2", fd, (long long) offset, (long long) nbytes, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { const long int fd_in = (long int) 0xdeadbeefffffffff; const long int fd_out = (long int) 0xdeadbeeffffffffe; long long int *const off_in = tail_alloc(sizeof(*off_in)); long long int *const off_out = tail_alloc(sizeof(*off_out)); *off_in = 0xdeadbef1facefed1; *off_out = 0xdeadbef2facefed2; const size_t len = (size_t) 0xdeadbef3facefed3ULL; const unsigned int flags = 15; long rc = syscall(__NR_splice, fd_in, off_in, fd_out, off_out, len, flags); printf("splice(%d, [%lld], %d, [%lld], %zu, %s) = %ld %s (%m)\n", (int) fd_in, *off_in, (int) fd_out, *off_out, len, "SPLICE_F_MOVE|SPLICE_F_NONBLOCK|SPLICE_F_MORE|SPLICE_F_GIFT", rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { const long int fd_in = (long int) 0xdeadbeefffffffff; const long int fd_out = (long int) 0xdeadbeeffffffffe; long long int *const off_in = tail_alloc(sizeof(*off_in)); long long int *const off_out = tail_alloc(sizeof(*off_out)); *off_in = 0xdeadbef1facefed1; *off_out = 0xdeadbef2facefed2; const size_t len = (size_t) 0xdeadbef3facefed3ULL; const unsigned int flags = 0; long rc = syscall(__NR_copy_file_range, fd_in, off_in, fd_out, off_out, len, flags); printf("copy_file_range(%d, [%lld], %d, [%lld], %zu, %u)" " = %ld %s (%m)\n", (int) fd_in, *off_in, (int) fd_out, *off_out, len, flags, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }
int main(void) { static const char sample[] = "swap.sample"; long rc; rc = syscall(__NR_swapon, sample, 0); printf("swapon(\"%s\", %s) = %ld %s (%m)\n", sample, "0", rc, errno2name()); rc = syscall(__NR_swapon, sample, 42); printf("swapon(\"%s\", %s) = %ld %s (%m)\n", sample, "42", rc, errno2name()); rc = syscall(__NR_swapon, sample, SWAP_FLAG_PREFER); printf("swapon(\"%s\", %s) = %ld %s (%m)\n", sample, "SWAP_FLAG_PREFER|0", rc, errno2name()); rc = syscall(__NR_swapon, sample, SWAP_FLAG_PREFER | 42); printf("swapon(\"%s\", %s) = %ld %s (%m)\n", sample, "SWAP_FLAG_PREFER|42", rc, errno2name()); rc = syscall(__NR_swapon, sample, -1L); printf("swapon(\"%s\", %s) = %ld %s (%m)\n", sample, "SWAP_FLAG_PREFER|SWAP_FLAG_DISCARD|SWAP_FLAG_DISCARD_ONCE" "|SWAP_FLAG_DISCARD_PAGES|0xfff80000|32767", rc, errno2name()); rc = syscall(__NR_swapoff, sample); printf("swapoff(\"%s\") = %ld %s (%m)\n", sample, rc, errno2name()); puts("+++ exited with 0 +++"); return 0; }