| 1 | #include <fcntl.h> |
| 2 | #include <sanitizer/linux_syscall_hooks.h> |
| 3 | #include <signal.h> |
| 4 | #include <sys/syscall.h> |
| 5 | #include <sys/types.h> |
| 6 | #include <unistd.h> |
| 7 | |
| 8 | int myfork() { |
| 9 | __sanitizer_syscall_pre_fork(); |
| 10 | #ifdef SYS_fork |
| 11 | int res = syscall(SYS_fork); |
| 12 | #else |
| 13 | int res = syscall(SYS_clone, SIGCHLD, 0); |
| 14 | #endif |
| 15 | __sanitizer_syscall_post_fork(res); |
| 16 | return res; |
| 17 | } |
| 18 | |
| 19 | int mypipe(int pipefd[2]) { |
| 20 | __sanitizer_syscall_pre_pipe(pipefd); |
| 21 | int res = syscall(SYS_pipe2, pipefd, 0); |
| 22 | __sanitizer_syscall_post_pipe(res, pipefd); |
| 23 | return res; |
| 24 | } |
| 25 | |
| 26 | int myclose(int fd) { |
| 27 | __sanitizer_syscall_pre_close(fd); |
| 28 | int res = syscall(SYS_close, fd); |
| 29 | __sanitizer_syscall_post_close(res, fd); |
| 30 | return res; |
| 31 | } |
| 32 | |
| 33 | ssize_t myread(int fd, void *buf, size_t count) { |
| 34 | __sanitizer_syscall_pre_read(fd, buf, count); |
| 35 | ssize_t res = syscall(SYS_read, fd, buf, count); |
| 36 | __sanitizer_syscall_post_read(res, fd, buf, count); |
| 37 | return res; |
| 38 | } |
| 39 | |
| 40 | ssize_t mywrite(int fd, const void *buf, size_t count) { |
| 41 | __sanitizer_syscall_pre_write(fd, buf, count); |
| 42 | ssize_t res = syscall(SYS_write, fd, buf, count); |
| 43 | __sanitizer_syscall_post_write(res, fd, buf, count); |
| 44 | return res; |
| 45 | } |
| 46 | |