// https://syzkaller.appspot.com/bug?id=a00045da49fb33bdf540daa67eff8debcde502f8 // autogenerated by syzkaller (https://github.com/google/syzkaller) #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #include 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; } static int inject_fault(int nth) { int fd; fd = open("/proc/thread-self/fail-nth", O_RDWR); if (fd == -1) exit(1); char buf[16]; sprintf(buf, "%d", nth + 1); if (write(fd, buf, strlen(buf)) != (ssize_t)strlen(buf)) exit(1); return fd; } static void setup_fault() { static struct { const char* file; const char* val; bool fatal; } files[] = { {"/sys/kernel/debug/failslab/ignore-gfp-wait", "N", true}, {"/sys/kernel/debug/fail_futex/ignore-private", "N", false}, {"/sys/kernel/debug/fail_page_alloc/ignore-gfp-highmem", "N", false}, {"/sys/kernel/debug/fail_page_alloc/ignore-gfp-wait", "N", false}, {"/sys/kernel/debug/fail_page_alloc/min-order", "0", false}, }; unsigned i; for (i = 0; i < sizeof(files) / sizeof(files[0]); i++) { if (!write_file(files[i].file, files[i].val)) { if (files[i].fatal) exit(1); } } } uint64_t r[1] = {0xffffffffffffffff}; int main(void) { syscall(__NR_mmap, 0x1ffff000ul, 0x1000ul, 0ul, 0x32ul, -1, 0ul); inject_fault(1); syscall(__NR_mmap, 0x20000000ul, 0x1000000ul, 7ul, 0x32ul, -1, 0ul); syscall(__NR_mmap, 0x21000000ul, 0x1000ul, 0ul, 0x32ul, -1, 0ul); setup_fault(); intptr_t res = 0; memcpy((void*)0x20000040, "/proc/thread-self/attr/exec\000", 28); res = syscall(__NR_openat, 0xffffffffffffff9cul, 0x20000040ul, 2ul, 0ul); if (res != -1) r[0] = res; memcpy((void*)0x20000080, "stack ", 6); memcpy( (void*)0x20000086, "u\000\305\265\020\361\245\355\240\223%" "\222Y\274\202\230\361\034\033\352D5\224\256\a\210\321I\272\021\r\363\262" "\263[5\274X]\225\360YQ\367q\243t=!u\302^\177\0032\'!\370\374\332\306{" "Mr\242\034\004\230\235\017\033&" "\"1gg\332\331\370G\353\251\212\277\310Je\214\273\322K\236:" "\320\022\322\006\020F>" "b\303\220\334I\006\365M\375\352\b\323\317H\245\246S\375\356\036Q5\207" "\021\326\263P2c\243j\353cS\225\023\206\245\035\320\326~\t-\240\200\vA." "\203O\363[\\\005u\222m=\264;N!\233\230B\004\215\271\371+\344w\027l\025=" "\365\364\272nE\006\264\024\321\'\210;\224\246\305\000\230\032d\324b\266<" "#\237\354\326\204\271\241\263W\277@" "\357\3154\311L\037\211\351nK\232c\003M\305\212\351\b\276\263\216[" "\324\210/" "\351\272e=2p[\221\221E&\222\317\r\343\247\203\341r\332\254(" "\262t\004\267}\372\032\216\r\3252j\262\213\005\273:" "q\216\301\306\304\0216qSa\311.\344\222\242\307\006\004\n\217\275m}" "\255\366`\036\000Z\325=\344N\005)\277\322\323\r]\r$" "K\361\251\225\216\365\276\326\024\\\320$" "\2362K\270\363N\0330\347\200\337\"\317F\316\270\337k\f4\a\005\245&" "\001\353\243\244\227\271\276-J\324\031\303\333c\005 " "\373lEQ]\276\312\272c\372!" "\2550\374\335i\301\343\210\243\253\326\320\205\303\003k\t\220\373\245U]" "\274\274\340h\320\241u\005\200\031@_" "\257\270\251\303\300\344k\v\227\330X\363}" "\243\352\2337\355\vq\016\030\217\357K\306\367\356\320h\315\265_" "q\v\300qe\n\347