Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _GNU_SOURCE
- #include <arpa/inet.h>
- #include <dirent.h>
- #include <endian.h>
- #include <errno.h>
- #include <fcntl.h>
- #include <net/if.h>
- #include <netinet/in.h>
- #include <setjmp.h>
- #include <signal.h>
- #include <stdarg.h>
- #include <stdbool.h>
- #include <stdint.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/ioctl.h>
- #include <sys/mount.h>
- #include <sys/prctl.h>
- #include <sys/socket.h>
- #include <sys/stat.h>
- #include <sys/syscall.h>
- #include <sys/types.h>
- #include <sys/wait.h>
- #include <time.h>
- #include <unistd.h>
- #include <linux/genetlink.h>
- #include <linux/if_addr.h>
- #include <linux/if_link.h>
- #include <linux/in6.h>
- #include <linux/neighbour.h>
- #include <linux/net.h>
- #include <linux/netlink.h>
- #include <linux/rtnetlink.h>
- #include <linux/veth.h>
- static unsigned long long procid;
- static __thread int clone_ongoing;
- static __thread int skip_segv;
- static __thread jmp_buf segv_env;
- static void segv_handler(int sig, siginfo_t* info, void* ctx)
- {
- if (__atomic_load_n(&clone_ongoing, __ATOMIC_RELAXED) != 0) {
- exit(sig);
- }
- uintptr_t addr = (uintptr_t)info->si_addr;
- const uintptr_t prog_start = 1 << 20;
- const uintptr_t prog_end = 100 << 20;
- int skip = __atomic_load_n(&skip_segv, __ATOMIC_RELAXED) != 0;
- int valid = addr < prog_start || addr > prog_end;
- if (skip && valid) {
- _longjmp(segv_env, 1);
- }
- exit(sig);
- }
- static void install_segv_handler(void)
- {
- struct sigaction sa;
- memset(&sa, 0, sizeof(sa));
- sa.sa_handler = SIG_IGN;
- syscall(SYS_rt_sigaction, 0x20, &sa, NULL, 8);
- syscall(SYS_rt_sigaction, 0x21, &sa, NULL, 8);
- memset(&sa, 0, sizeof(sa));
- sa.sa_sigaction = segv_handler;
- sa.sa_flags = SA_NODEFER | SA_SIGINFO;
- sigaction(SIGSEGV, &sa, NULL);
- sigaction(SIGBUS, &sa, NULL);
- }
- #define NONFAILING(...) \
- ({ \
- int ok = 1; \
- __atomic_fetch_add(&skip_segv, 1, __ATOMIC_SEQ_CST); \
- if (_setjmp(segv_env) == 0) { \
- __VA_ARGS__; \
- } else \
- ok = 0; \
- __atomic_fetch_sub(&skip_segv, 1, __ATOMIC_SEQ_CST); \
- ok; \
- })
- static void sleep_ms(uint64_t ms)
- {
- usleep(ms * 1000);
- }
- static uint64_t current_time_ms(void)
- {
- struct timespec ts;
- if (clock_gettime(CLOCK_MONOTONIC, &ts))
- exit(1);
- return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
- }
- static void use_temporary_dir(void)
- {
- char tmpdir_template[] = "./syzkaller.XXXXXX";
- char* tmpdir = mkdtemp(tmpdir_template);
- if (!tmpdir)
- exit(1);
- if (chmod(tmpdir, 0777))
- exit(1);
- if (chdir(tmpdir))
- exit(1);
- }
- #define BITMASK(bf_off, bf_len) (((1ull << (bf_len)) - 1) << (bf_off))
- #define STORE_BY_BITMASK(type, htobe, addr, val, bf_off, bf_len) \
- *(type*)(addr) = \
- htobe((htobe(*(type*)(addr)) & ~BITMASK((bf_off), (bf_len))) | \
- (((type)(val) << (bf_off)) & BITMASK((bf_off), (bf_len))))
- static bool write_file(const char* file, const char* what, ...)
- {
- char buf[1024];
- va_list args;
- va_start(args, what);
- vsnprintf(buf, sizeof(buf), what, args);
- va_end(args);
- buf[sizeof(buf) - 1] = 0;
- int len = strlen(buf);
- int fd = open(file, O_WRONLY | O_CLOEXEC);
- if (fd == -1)
- return false;
- if (write(fd, buf, len) != len) {
- int err = errno;
- close(fd);
- errno = err;
- return false;
- }
- close(fd);
- return true;
- }
- struct nlmsg {
- char* pos;
- int nesting;
- struct nlattr* nested[8];
- char buf[4096];
- };
- static void netlink_init(struct nlmsg* nlmsg, int typ, int flags,
- const void* data, int size)
- {
- memset(nlmsg, 0, sizeof(*nlmsg));
- struct nlmsghdr* hdr = (struct nlmsghdr*)nlmsg->buf;
- hdr->nlmsg_type = typ;
- hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK | flags;
- memcpy(hdr + 1, data, size);
- nlmsg->pos = (char*)(hdr + 1) + NLMSG_ALIGN(size);
- }
- static void netlink_attr(struct nlmsg* nlmsg, int typ, const void* data,
- int size)
- {
- struct nlattr* attr = (struct nlattr*)nlmsg->pos;
- attr->nla_len = sizeof(*attr) + size;
- attr->nla_type = typ;
- if (size > 0)
- memcpy(attr + 1, data, size);
- nlmsg->pos += NLMSG_ALIGN(attr->nla_len);
- }
- static int netlink_send_ext(struct nlmsg* nlmsg, int sock, uint16_t reply_type,
- int* reply_len, bool dofail)
- {
- if (nlmsg->pos > nlmsg->buf + sizeof(nlmsg->buf) || nlmsg->nesting)
- exit(1);
- struct nlmsghdr* hdr = (struct nlmsghdr*)nlmsg->buf;
- hdr->nlmsg_len = nlmsg->pos - nlmsg->buf;
- struct sockaddr_nl addr;
- memset(&addr, 0, sizeof(addr));
- addr.nl_family = AF_NETLINK;
- ssize_t n = sendto(sock, nlmsg->buf, hdr->nlmsg_len, 0,
- (struct sockaddr*)&addr, sizeof(addr));
- if (n != (ssize_t)hdr->nlmsg_len) {
- if (dofail)
- exit(1);
- return -1;
- }
- n = recv(sock, nlmsg->buf, sizeof(nlmsg->buf), 0);
- if (reply_len)
- *reply_len = 0;
- if (n < 0) {
- if (dofail)
- exit(1);
- return -1;
- }
- if (n < (ssize_t)sizeof(struct nlmsghdr)) {
- errno = EINVAL;
- if (dofail)
- exit(1);
- return -1;
- }
- if (hdr->nlmsg_type == NLMSG_DONE)
- return 0;
- if (reply_len && hdr->nlmsg_type == reply_type) {
- *reply_len = n;
- return 0;
- }
- if (n < (ssize_t)(sizeof(struct nlmsghdr) + sizeof(struct nlmsgerr))) {
- errno = EINVAL;
- if (dofail)
- exit(1);
- return -1;
- }
- if (hdr->nlmsg_type != NLMSG_ERROR) {
- errno = EINVAL;
- if (dofail)
- exit(1);
- return -1;
- }
- errno = -((struct nlmsgerr*)(hdr + 1))->error;
- return -errno;
- }
- static int netlink_query_family_id(struct nlmsg* nlmsg, int sock,
- const char* family_name, bool dofail)
- {
- struct genlmsghdr genlhdr;
- memset(&genlhdr, 0, sizeof(genlhdr));
- genlhdr.cmd = CTRL_CMD_GETFAMILY;
- netlink_init(nlmsg, GENL_ID_CTRL, 0, &genlhdr, sizeof(genlhdr));
- netlink_attr(nlmsg, CTRL_ATTR_FAMILY_NAME, family_name,
- strnlen(family_name, GENL_NAMSIZ - 1) + 1);
- int n = 0;
- int err = netlink_send_ext(nlmsg, sock, GENL_ID_CTRL, &n, dofail);
- if (err < 0) {
- return -1;
- }
- uint16_t id = 0;
- struct nlattr* attr = (struct nlattr*)(nlmsg->buf + NLMSG_HDRLEN +
- NLMSG_ALIGN(sizeof(genlhdr)));
- for (; (char*)attr < nlmsg->buf + n;
- attr = (struct nlattr*)((char*)attr + NLMSG_ALIGN(attr->nla_len))) {
- if (attr->nla_type == CTRL_ATTR_FAMILY_ID) {
- id = *(uint16_t*)(attr + 1);
- break;
- }
- }
- if (!id) {
- errno = EINVAL;
- return -1;
- }
- recv(sock, nlmsg->buf, sizeof(nlmsg->buf), 0);
- return id;
- }
- static long syz_genetlink_get_family_id(volatile long name,
- volatile long sock_arg)
- {
- int fd = sock_arg;
- if (fd < 0) {
- fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_GENERIC);
- if (fd == -1) {
- return -1;
- }
- }
- struct nlmsg nlmsg_tmp;
- int ret = netlink_query_family_id(&nlmsg_tmp, fd, (char*)name, false);
- if ((int)sock_arg < 0)
- close(fd);
- if (ret < 0) {
- return -1;
- }
- return ret;
- }
- #define FS_IOC_SETFLAGS _IOW('f', 2, long)
- static void remove_dir(const char* dir)
- {
- int iter = 0;
- DIR* dp = 0;
- retry:
- while (umount2(dir, MNT_DETACH | UMOUNT_NOFOLLOW) == 0) {
- }
- dp = opendir(dir);
- if (dp == NULL) {
- if (errno == EMFILE) {
- exit(1);
- }
- exit(1);
- }
- struct dirent* ep = 0;
- while ((ep = readdir(dp))) {
- if (strcmp(ep->d_name, ".") == 0 || strcmp(ep->d_name, "..") == 0)
- continue;
- char filename[FILENAME_MAX];
- snprintf(filename, sizeof(filename), "%s/%s", dir, ep->d_name);
- while (umount2(filename, MNT_DETACH | UMOUNT_NOFOLLOW) == 0) {
- }
- struct stat st;
- if (lstat(filename, &st))
- exit(1);
- if (S_ISDIR(st.st_mode)) {
- remove_dir(filename);
- continue;
- }
- int i;
- for (i = 0;; i++) {
- if (unlink(filename) == 0)
- break;
- if (errno == EPERM) {
- int fd = open(filename, O_RDONLY);
- if (fd != -1) {
- long flags = 0;
- if (ioctl(fd, FS_IOC_SETFLAGS, &flags) == 0) {
- }
- close(fd);
- continue;
- }
- }
- if (errno == EROFS) {
- break;
- }
- if (errno != EBUSY || i > 100)
- exit(1);
- if (umount2(filename, MNT_DETACH | UMOUNT_NOFOLLOW))
- exit(1);
- }
- }
- closedir(dp);
- for (int i = 0;; i++) {
- if (rmdir(dir) == 0)
- break;
- if (i < 100) {
- if (errno == EPERM) {
- int fd = open(dir, O_RDONLY);
- if (fd != -1) {
- long flags = 0;
- if (ioctl(fd, FS_IOC_SETFLAGS, &flags) == 0) {
- }
- close(fd);
- continue;
- }
- }
- if (errno == EROFS) {
- break;
- }
- if (errno == EBUSY) {
- if (umount2(dir, MNT_DETACH | UMOUNT_NOFOLLOW))
- exit(1);
- continue;
- }
- if (errno == ENOTEMPTY) {
- if (iter < 100) {
- iter++;
- goto retry;
- }
- }
- }
- exit(1);
- }
- }
- static void kill_and_wait(int pid, int* status)
- {
- kill(-pid, SIGKILL);
- kill(pid, SIGKILL);
- for (int i = 0; i < 100; i++) {
- if (waitpid(-1, status, WNOHANG | __WALL) == pid)
- return;
- usleep(1000);
- }
- DIR* dir = opendir("/sys/fs/fuse/connections");
- if (dir) {
- for (;;) {
- struct dirent* ent = readdir(dir);
- if (!ent)
- break;
- if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0)
- continue;
- char abort[300];
- snprintf(abort, sizeof(abort), "/sys/fs/fuse/connections/%s/abort",
- ent->d_name);
- int fd = open(abort, O_WRONLY);
- if (fd == -1) {
- continue;
- }
- if (write(fd, abort, 1) < 0) {
- }
- close(fd);
- }
- closedir(dir);
- } else {
- }
- while (waitpid(-1, status, __WALL) != pid) {
- }
- }
- static void setup_test()
- {
- prctl(PR_SET_PDEATHSIG, SIGKILL, 0, 0, 0);
- setpgrp();
- write_file("/proc/self/oom_score_adj", "1000");
- if (symlink("/dev/binderfs", "./binderfs")) {
- }
- }
- static void setup_sysctl()
- {
- char mypid[32];
- snprintf(mypid, sizeof(mypid), "%d", getpid());
- struct {
- const char* name;
- const char* data;
- } files[] = {
- {"/sys/kernel/debug/x86/nmi_longest_ns", "10000000000"},
- {"/proc/sys/kernel/hung_task_check_interval_secs", "20"},
- {"/proc/sys/net/core/bpf_jit_kallsyms", "1"},
- {"/proc/sys/net/core/bpf_jit_harden", "0"},
- {"/proc/sys/kernel/kptr_restrict", "0"},
- {"/proc/sys/kernel/softlockup_all_cpu_backtrace", "1"},
- {"/proc/sys/fs/mount-max", "100"},
- {"/proc/sys/vm/oom_dump_tasks", "0"},
- {"/proc/sys/debug/exception-trace", "0"},
- {"/proc/sys/kernel/printk", "7 4 1 3"},
- {"/proc/sys/kernel/keys/gc_delay", "1"},
- {"/proc/sys/vm/oom_kill_allocating_task", "1"},
- {"/proc/sys/kernel/ctrl-alt-del", "0"},
- {"/proc/sys/kernel/cad_pid", mypid},
- };
- for (size_t i = 0; i < sizeof(files) / sizeof(files[0]); i++) {
- if (!write_file(files[i].name, files[i].data))
- printf("write to %s failed: %s\n", files[i].name, strerror(errno));
- }
- }
- static void execute_one(void);
- #define WAIT_FLAGS __WALL
- static void loop(void)
- {
- int iter = 0;
- for (;; iter++) {
- char cwdbuf[32];
- sprintf(cwdbuf, "./%d", iter);
- if (mkdir(cwdbuf, 0777))
- exit(1);
- int pid = fork();
- if (pid < 0)
- exit(1);
- if (pid == 0) {
- if (chdir(cwdbuf))
- exit(1);
- setup_test();
- execute_one();
- exit(0);
- }
- int status = 0;
- uint64_t start = current_time_ms();
- for (;;) {
- if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
- break;
- sleep_ms(1);
- if (current_time_ms() - start < 5000)
- continue;
- kill_and_wait(pid, &status);
- break;
- }
- remove_dir(cwdbuf);
- }
- }
- uint64_t r[3] = {0xffffffffffffffff, 0xffffffffffffffff, 0x0};
- void execute_one(void)
- {
- intptr_t res = 0;
- NONFAILING(memcpy((void*)0x20000000, "/dev/sr0\000", 9));
- res = syscall(__NR_openat, /*fd=*/0xffffffffffffff9cul, /*file=*/0x20000000ul,
- /*flags=O_TRUNC|O_NONBLOCK|O_NOATIME|O_RDWR*/ 0x40a02ul,
- /*mode=*/0ul);
- if (res != -1)
- r[0] = res;
- NONFAILING(memcpy((void*)0x200000c0, "IPVS\000", 5));
- res = -1;
- NONFAILING(res =
- syz_genetlink_get_family_id(/*name=*/0x200000c0, /*fd=*/r[0]));
- if (res != -1)
- r[1] = res;
- NONFAILING(*(uint64_t*)0x20000180 = 0x20000080);
- NONFAILING(*(uint16_t*)0x20000080 = 0x10);
- NONFAILING(*(uint16_t*)0x20000082 = 0);
- NONFAILING(*(uint32_t*)0x20000084 = 0);
- NONFAILING(*(uint32_t*)0x20000088 = 2);
- NONFAILING(*(uint32_t*)0x20000188 = 0xc);
- NONFAILING(*(uint64_t*)0x20000190 = 0x20000140);
- NONFAILING(*(uint64_t*)0x20000140 = 0x200001c0);
- NONFAILING(memset((void*)0x200001c0, 0, 4));
- NONFAILING(*(uint16_t*)0x200001c4 = r[1]);
- NONFAILING(memcpy(
- (void*)0x200001c6,
- "\x00\x01\x2b\xbd\x70\x00\xfe\xdb\xdf\x25\x11\x00\x00\x00\x08\x00\x04\x00"
- "\x4e\x0f\x00\x00\x08\x00\x04\x00\xff\x0f\x00\x00\x0c\x00\x03\x80\x08\x00"
- "\x05\x00\x00\x00\x00\x00\x08\x00\x06\x00\x05\x00\x00\x00",
- 50));
- NONFAILING(*(uint64_t*)0x20000148 = 0x38);
- NONFAILING(*(uint64_t*)0x20000198 = 1);
- NONFAILING(*(uint64_t*)0x200001a0 = 0);
- NONFAILING(*(uint64_t*)0x200001a8 = 0);
- NONFAILING(*(uint32_t*)0x200001b0 = 0x4000000);
- syscall(__NR_sendmsg, /*fd=*/r[0], /*msg=*/0x20000180ul, /*f=*/0ul);
- NONFAILING(*(uint64_t*)0x20000640 = 0);
- NONFAILING(*(uint64_t*)0x20000648 = 4);
- NONFAILING(*(uint64_t*)0x20000650 = 0xffffffffffffffe1);
- NONFAILING(*(uint64_t*)0x20000658 = 0x45c);
- NONFAILING(*(uint64_t*)0x20000660 = 0x80);
- NONFAILING(*(uint64_t*)0x20000668 = 0x32ce);
- NONFAILING(*(uint64_t*)0x20000670 = 0x80000001);
- NONFAILING(*(uint32_t*)0x20000678 = 0x20);
- NONFAILING(*(uint32_t*)0x2000067c = 3);
- NONFAILING(*(uint32_t*)0x20000680 = 0x80000001);
- NONFAILING(*(uint32_t*)0x20000684 = 7);
- NONFAILING(*(uint64_t*)0x20000688 = 1);
- NONFAILING(*(uint64_t*)0x20000690 = 3);
- NONFAILING(*(uint64_t*)0x20000698 = 0x800);
- NONFAILING(*(uint64_t*)0x200006a0 = 0x80000000);
- NONFAILING(*(uint64_t*)0x200006a8 = 8);
- NONFAILING(*(uint64_t*)0x200006b0 = 0);
- syscall(__NR_ioctl, /*fd=*/r[0], /*cmd=*/0xc0709411, /*arg=*/0x20000640ul);
- res = -1;
- NONFAILING(res = syz_genetlink_get_family_id(/*name=*/0, /*fd=*/r[0]));
- if (res != -1)
- r[2] = res;
- NONFAILING(*(uint64_t*)0x20000400 = 0x20000100);
- NONFAILING(*(uint16_t*)0x20000100 = 0x10);
- NONFAILING(*(uint16_t*)0x20000102 = 0);
- NONFAILING(*(uint32_t*)0x20000104 = 0);
- NONFAILING(*(uint32_t*)0x20000108 = 0x1000000);
- NONFAILING(*(uint32_t*)0x20000408 = 0xc);
- NONFAILING(*(uint64_t*)0x20000410 = 0x200003c0);
- NONFAILING(*(uint64_t*)0x200003c0 = 0x20000240);
- NONFAILING(*(uint32_t*)0x20000240 = 0x174);
- NONFAILING(*(uint16_t*)0x20000244 = r[2]);
- NONFAILING(*(uint16_t*)0x20000246 = 0x100);
- NONFAILING(*(uint32_t*)0x20000248 = 0);
- NONFAILING(*(uint32_t*)0x2000024c = 0x25dfdbfd);
- NONFAILING(*(uint8_t*)0x20000250 = 7);
- NONFAILING(*(uint8_t*)0x20000251 = 0);
- NONFAILING(*(uint16_t*)0x20000252 = 0);
- NONFAILING(*(uint16_t*)0x20000254 = 0xb0);
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000256, 2, 0, 14));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000257, 0, 6, 1));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000257, 1, 7, 1));
- NONFAILING(*(uint16_t*)0x20000258 = 4);
- NONFAILING(*(uint16_t*)0x2000025a = 4);
- NONFAILING(*(uint16_t*)0x2000025c = 0x3c);
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x2000025e, 3, 0, 14));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x2000025f, 0, 6, 1));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x2000025f, 1, 7, 1));
- NONFAILING(*(uint16_t*)0x20000260 = 8);
- NONFAILING(*(uint16_t*)0x20000262 = 2);
- NONFAILING(*(uint32_t*)0x20000264 = 0x81);
- NONFAILING(*(uint16_t*)0x20000268 = 8);
- NONFAILING(*(uint16_t*)0x2000026a = 2);
- NONFAILING(*(uint32_t*)0x2000026c = 0x1ff);
- NONFAILING(*(uint16_t*)0x20000270 = 8);
- NONFAILING(*(uint16_t*)0x20000272 = 2);
- NONFAILING(*(uint32_t*)0x20000274 = 7);
- NONFAILING(*(uint16_t*)0x20000278 = 8);
- NONFAILING(*(uint16_t*)0x2000027a = 2);
- NONFAILING(*(uint32_t*)0x2000027c = 0x79df);
- NONFAILING(*(uint16_t*)0x20000280 = 8);
- NONFAILING(*(uint16_t*)0x20000282 = 2);
- NONFAILING(*(uint32_t*)0x20000284 = 7);
- NONFAILING(*(uint16_t*)0x20000288 = 8);
- NONFAILING(*(uint16_t*)0x2000028a = 2);
- NONFAILING(*(uint32_t*)0x2000028c = 8);
- NONFAILING(*(uint16_t*)0x20000290 = 8);
- NONFAILING(*(uint16_t*)0x20000292 = 2);
- NONFAILING(*(uint32_t*)0x20000294 = 0x1000);
- NONFAILING(*(uint16_t*)0x20000298 = 8);
- NONFAILING(*(uint16_t*)0x2000029a = 1);
- NONFAILING(*(uint32_t*)0x2000029c = 9);
- NONFAILING(*(uint16_t*)0x200002a0 = 8);
- NONFAILING(*(uint16_t*)0x200002a2 = 2);
- NONFAILING(*(uint32_t*)0x200002a4 = 0xdcb);
- NONFAILING(*(uint16_t*)0x200002a8 = 4);
- NONFAILING(*(uint16_t*)0x200002aa = 4);
- NONFAILING(*(uint16_t*)0x200002ac = 8);
- NONFAILING(*(uint16_t*)0x200002ae = 1);
- NONFAILING(*(uint32_t*)0x200002b0 = 0x7f);
- NONFAILING(*(uint16_t*)0x200002b4 = 0x3c);
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x200002b6, 3, 0, 14));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x200002b7, 0, 6, 1));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x200002b7, 1, 7, 1));
- NONFAILING(*(uint16_t*)0x200002b8 = 8);
- NONFAILING(*(uint16_t*)0x200002ba = 2);
- NONFAILING(*(uint32_t*)0x200002bc = 2);
- NONFAILING(*(uint16_t*)0x200002c0 = 8);
- NONFAILING(*(uint16_t*)0x200002c2 = 2);
- NONFAILING(*(uint32_t*)0x200002c4 = 6);
- NONFAILING(*(uint16_t*)0x200002c8 = 8);
- NONFAILING(*(uint16_t*)0x200002ca = 1);
- NONFAILING(*(uint32_t*)0x200002cc = 6);
- NONFAILING(*(uint16_t*)0x200002d0 = 8);
- NONFAILING(*(uint16_t*)0x200002d2 = 1);
- NONFAILING(*(uint32_t*)0x200002d4 = 0x238);
- NONFAILING(*(uint16_t*)0x200002d8 = 8);
- NONFAILING(*(uint16_t*)0x200002da = 1);
- NONFAILING(*(uint32_t*)0x200002dc = 8);
- NONFAILING(*(uint16_t*)0x200002e0 = 8);
- NONFAILING(*(uint16_t*)0x200002e2 = 1);
- NONFAILING(*(uint32_t*)0x200002e4 = 0xa2);
- NONFAILING(*(uint16_t*)0x200002e8 = 8);
- NONFAILING(*(uint16_t*)0x200002ea = 1);
- NONFAILING(*(uint32_t*)0x200002ec = 0x81);
- NONFAILING(*(uint16_t*)0x200002f0 = 8);
- NONFAILING(*(uint16_t*)0x200002f2 = 2);
- NONFAILING(*(uint32_t*)0x200002f4 = 5);
- NONFAILING(*(uint16_t*)0x200002f8 = 4);
- NONFAILING(*(uint16_t*)0x200002fa = 4);
- NONFAILING(*(uint16_t*)0x200002fc = 8);
- NONFAILING(*(uint16_t*)0x200002fe = 2);
- NONFAILING(*(uint32_t*)0x20000300 = 1);
- NONFAILING(*(uint16_t*)0x20000304 = 0xc);
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000306, 6, 0, 14));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000307, 0, 6, 1));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000307, 1, 7, 1));
- NONFAILING(*(uint16_t*)0x20000308 = 4);
- NONFAILING(*(uint16_t*)0x2000030a = 3);
- NONFAILING(*(uint16_t*)0x2000030c = 4);
- NONFAILING(*(uint16_t*)0x2000030e = 2);
- NONFAILING(*(uint16_t*)0x20000310 = 0x24);
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000312, 4, 0, 14));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000313, 0, 6, 1));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000313, 1, 7, 1));
- NONFAILING(*(uint16_t*)0x20000314 = 0x13);
- NONFAILING(*(uint16_t*)0x20000316 = 1);
- NONFAILING(memcpy((void*)0x20000318, "broadcast-link\000", 15));
- NONFAILING(*(uint16_t*)0x20000328 = 9);
- NONFAILING(*(uint16_t*)0x2000032a = 1);
- NONFAILING(memcpy((void*)0x2000032c, "syz1\000", 5));
- NONFAILING(*(uint16_t*)0x20000334 = 8);
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000336, 6, 0, 14));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000337, 0, 6, 1));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000337, 1, 7, 1));
- NONFAILING(*(uint16_t*)0x20000338 = 4);
- NONFAILING(*(uint16_t*)0x2000033a = 2);
- NONFAILING(*(uint16_t*)0x2000033c = 0x78);
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x2000033e, 2, 0, 14));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x2000033f, 0, 6, 1));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x2000033f, 1, 7, 1));
- NONFAILING(*(uint16_t*)0x20000340 = 0x54);
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000342, 3, 0, 14));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000343, 0, 6, 1));
- NONFAILING(STORE_BY_BITMASK(uint16_t, , 0x20000343, 1, 7, 1));
- NONFAILING(*(uint16_t*)0x20000344 = 8);
- NONFAILING(*(uint16_t*)0x20000346 = 1);
- NONFAILING(*(uint32_t*)0x20000348 = 8);
- NONFAILING(*(uint16_t*)0x2000034c = 8);
- NONFAILING(*(uint16_t*)0x2000034e = 2);
- NONFAILING(*(uint32_t*)0x20000350 = 0);
- NONFAILING(*(uint16_t*)0x20000354 = 8);
- NONFAILING(*(uint16_t*)0x20000356 = 1);
- NONFAILING(*(uint32_t*)0x20000358 = 7);
- NONFAILING(*(uint16_t*)0x2000035c = 8);
- NONFAILING(*(uint16_t*)0x2000035e = 1);
- NONFAILING(*(uint32_t*)0x20000360 = 3);
- NONFAILING(*(uint16_t*)0x20000364 = 8);
- NONFAILING(*(uint16_t*)0x20000366 = 2);
- NONFAILING(*(uint32_t*)0x20000368 = 0);
- NONFAILING(*(uint16_t*)0x2000036c = 8);
- NONFAILING(*(uint16_t*)0x2000036e = 1);
- NONFAILING(*(uint32_t*)0x20000370 = 0);
- NONFAILING(*(uint16_t*)0x20000374 = 8);
- NONFAILING(*(uint16_t*)0x20000376 = 2);
- NONFAILING(*(uint32_t*)0x20000378 = 0);
- NONFAILING(*(uint16_t*)0x2000037c = 8);
- NONFAILING(*(uint16_t*)0x2000037e = 2);
- NONFAILING(*(uint32_t*)0x20000380 = 0xb);
- NONFAILING(*(uint16_t*)0x20000384 = 8);
- NONFAILING(*(uint16_t*)0x20000386 = 2);
- NONFAILING(*(uint32_t*)0x20000388 = 4);
- NONFAILING(*(uint16_t*)0x2000038c = 8);
- NONFAILING(*(uint16_t*)0x2000038e = 2);
- NONFAILING(*(uint32_t*)0x20000390 = 3);
- NONFAILING(*(uint16_t*)0x20000394 = 8);
- NONFAILING(*(uint16_t*)0x20000396 = 1);
- NONFAILING(*(uint32_t*)0x20000398 = 4);
- NONFAILING(*(uint16_t*)0x2000039c = 4);
- NONFAILING(*(uint16_t*)0x2000039e = 4);
- NONFAILING(*(uint16_t*)0x200003a0 = 8);
- NONFAILING(*(uint16_t*)0x200003a2 = 1);
- NONFAILING(*(uint32_t*)0x200003a4 = 0xe1);
- NONFAILING(*(uint16_t*)0x200003a8 = 4);
- NONFAILING(*(uint16_t*)0x200003aa = 4);
- NONFAILING(*(uint16_t*)0x200003ac = 8);
- NONFAILING(*(uint16_t*)0x200003ae = 1);
- NONFAILING(*(uint32_t*)0x200003b0 = 7);
- NONFAILING(*(uint64_t*)0x200003c8 = 0x174);
- NONFAILING(*(uint64_t*)0x20000418 = 1);
- NONFAILING(*(uint64_t*)0x20000420 = 0);
- NONFAILING(*(uint64_t*)0x20000428 = 0);
- NONFAILING(*(uint32_t*)0x20000430 = 0x800);
- syscall(__NR_sendmsg, /*fd=*/r[0], /*msg=*/0x20000400ul,
- /*f=MSG_ZEROCOPY|MSG_FASTOPEN*/ 0x24000000ul);
- NONFAILING(*(uint8_t*)0x20000040 = 0);
- NONFAILING(memcpy((void*)0x20000041, "freezer", 7));
- NONFAILING(*(uint8_t*)0x20000048 = 0x20);
- syscall(__NR_write, /*fd=*/r[0], /*buf=*/0x20000040ul, /*len=*/0xfffffec2ul);
- }
- int main(void)
- {
- syscall(__NR_mmap, /*addr=*/0x1ffff000ul, /*len=*/0x1000ul, /*prot=*/0ul,
- /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x32ul, /*fd=*/-1,
- /*offset=*/0ul);
- syscall(__NR_mmap, /*addr=*/0x20000000ul, /*len=*/0x1000000ul,
- /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
- /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x32ul, /*fd=*/-1,
- /*offset=*/0ul);
- syscall(__NR_mmap, /*addr=*/0x21000000ul, /*len=*/0x1000ul, /*prot=*/0ul,
- /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x32ul, /*fd=*/-1,
- /*offset=*/0ul);
- setup_sysctl();
- install_segv_handler();
- for (procid = 0; procid < 3; procid++) {
- if (fork() == 0) {
- use_temporary_dir();
- loop();
- }
- }
- sleep(1000000);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment