// https://syzkaller.appspot.com/bug?id=459e4c53c1e59ff021c69e4cf119eff799d5e1aa // autogenerated by syzkaller (http://github.com/google/syzkaller) #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include __attribute__((noreturn)) static void doexit(int status) { volatile unsigned i; syscall(__NR_exit_group, status); for (i = 0;; i++) { } } #include #include const int kFailStatus = 67; const int kRetryStatus = 69; static void exitf(const char* msg, ...) { int e = errno; va_list args; va_start(args, msg); vfprintf(stderr, msg, args); va_end(args); fprintf(stderr, " (errno %d)\n", e); doexit(kRetryStatus); } 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) { close(fd); return false; } close(fd); return true; } static int inject_fault(int nth) { int fd; char buf[16]; fd = open("/proc/thread-self/fail-nth", O_RDWR); if (fd == -1) exitf("failed to open /proc/thread-self/fail-nth"); sprintf(buf, "%d", nth + 1); if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) exitf("failed to write /proc/thread-self/fail-nth"); return fd; } static void test(); void loop() { while (1) { test(); } } long r[2]; void test() { memset(r, -1, sizeof(r)); syscall(__NR_mmap, 0x20000000, 0xfff000, 3, 0x32, -1, 0); r[0] = syscall(__NR_socket, 4, 0x800, 0x40); *(uint32_t*)0x20b5effc = 8; syscall(__NR_getsockopt, r[0], 1, 0x39, 0x20efb000, 0x20b5effc); *(uint32_t*)0x20e72ffc = 0xffffff9c; syscall(__NR_ioctl, 0xffffff9c, 0x89e2, 0x20e72ffc); r[1] = syscall(__NR_socket, 0x10, 3, 0x10); *(uint64_t*)0x20b3dfc8 = 0x20d49ff4; *(uint32_t*)0x20b3dfd0 = 0xc; *(uint64_t*)0x20b3dfd8 = 0x20007000; *(uint64_t*)0x20b3dfe0 = 1; *(uint64_t*)0x20b3dfe8 = 0; *(uint64_t*)0x20b3dff0 = 0; *(uint32_t*)0x20b3dff8 = 0; *(uint16_t*)0x20d49ff4 = 0x10; *(uint16_t*)0x20d49ff6 = 0; *(uint32_t*)0x20d49ff8 = 0; *(uint32_t*)0x20d49ffc = 0; *(uint64_t*)0x20007000 = 0x201ca000; *(uint64_t*)0x20007008 = 0x14; *(uint32_t*)0x201ca000 = 0x14; *(uint16_t*)0x201ca004 = 0x1c; *(uint16_t*)0x201ca006 = 0x109; *(uint32_t*)0x201ca008 = 0; *(uint32_t*)0x201ca00c = 0; *(uint8_t*)0x201ca010 = 4; *(uint8_t*)0x201ca011 = 0; *(uint16_t*)0x201ca012 = 0; write_file("/sys/kernel/debug/failslab/ignore-gfp-wait", "N"); write_file("/sys/kernel/debug/fail_futex/ignore-private", "N"); inject_fault(3); syscall(__NR_sendmsg, r[1], 0x20b3dfc8, 0); } int main() { for (;;) { loop(); } }