// https://syzkaller.appspot.com/bug?id=0a885a86c3f396f8fb35dadea0d48618bf9eb4c4 // autogenerated by syzkaller (https://github.com/google/syzkaller) #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include 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 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 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"); } static void execute_one(void); #define WAIT_FLAGS __WALL static void loop(void) { int iter = 0; for (;; iter++) { int pid = fork(); if (pid < 0) exit(1); if (pid == 0) { setup_test(); execute_one(); exit(0); } int status = 0; uint64_t start = current_time_ms(); for (;;) { sleep_ms(10); if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid) break; if (current_time_ms() - start < 5000) continue; kill_and_wait(pid, &status); break; } } } void execute_one(void) { if (write(1, "executing program\n", sizeof("executing program\n") - 1)) { } // mq_open arguments: [ // name: ptr[in, buffer] { // buffer: {65 74 68 30 00 23 13 ae 75 e0 fb 75 30 2a f3 11 69 dd d9 c6 // 87 de bf 5f a0 f6 df 6b bf 2e 22 a6 c0 23 70 cd 1c 2f a6 f2 bc 79 4c // 85 61 b5 bb 7e 2b 3e bc 93 f8 ab 9a 33 85 6c 1d 15 11 1a 7b 40 21 32 // b6 21 ae f7 39 6b 90 88 0b 38 49 24 fd 51 1d 90 3d 72 d8 c0 d8 09 2f // 8d 76 d3 a7 d8 4a fd 94 23 4b 54 dd 14 d3 e1 be 5f 24 41 3d 7a ee bd // 2f 58 be 6d 4f 58 29 73 94 de be 5f 88 4e b8 de eb 29 cd c5 36 6d 0a // 0b 01 be eb bb 91 11 7a c2 7c 64 1b 04 d2 f9 79 78 b2 1b 08 4c 54 72 // 77 88 7c 30 09 c6 e2 9c ed 5c d8 5b c8 04 20 f3 ac 5d 56 1d 3a fc c3 // 9e 02 07 78 ef fe 1c 2e 54 54 cf bf f5 80 61 25 dc 51 b3 43 75 54 cc // 02 ea 91 e8 1c 60 bd e1 65 80 7f d2 26 6c 30 c1 62 ac 8b d8 01 59 5a // 79 e6 21 89 9c d1 a6 16 37 8a 76 73 b2 07 fe b3 6a 2a ad 18 49 cc e9 // aa 7b 5d ef b7 f2 ee 2a f9 35 08 4a 74 d0 73 c4 aa c8 13 7e b2 f2 30 // bd 66 db ae 47 e3 fb ef 94 ef 3a 51 1b e3 a3 a4 7d ef 60 65 cd 4c 25 // 4a 77 99 79 9f 67 31 f4 09 18 69 2f 21 13 f1 2c 8c 75 aa bf 7e 29 94 // 1b 32 93 86 e7 9a f2 6a a8 96 a6 a2 fc 4e 81 af 54 68 b3 1b 6f 3a e8 // 0b 71 37 53 e4 48 f3 05 a0 9c 97 42 12 10 9d aa 7f 71 06 b9 28 f6 1c // 83 b1 5b 84 10 61 46 9b da eb c4 2a 02 71 b2 92 00 8c 76 ac 20 41 4e // b9 aa 81 57 97 54 65 81 98 4c fe 97 2b 75 d3 5e b1 f0 e0 1f bd 07 bb // e5 18 9d 73 12 68 61 00 f1 d5 4c 44 a8 37 a0 44 51 8a 32 16 21 38 2c // bc 25 24 f1 f2 d6 9c 79 ec 4b da c5 dc fa dd f6 08 c6 b4 14 16 9c 7f // 92 85 b0 a2 25 3a f0 f4 15 30 0f c8 a6 64 b4 e4 4c 19 57 d5 90 f7 6c // 1b fe de 0b 68 97 3d 6d 82 2e ac 0b 68 fe 84 51 7d 83 38 2f 83 eb 50 // be d6 2b 3a ce 45 5c 95 d4 ac 92 87 d7 98 97 e3 ec ad c7 a7 82 b9 56 // 7d 60 b7 fc 40 d5 ac 80 43 84 52 88 72 5e 67 ba 51 28 9a 3e e2 ba a8 // 3d 17 0c 30 34 8f 1f f2 88 2a 40 76 e7 d1 ee b3 c2 8d 54 da 81 67 d9 // 1a 3a 68 7a 57 36 73 29 78 06 ae 11 f2 1e cd 0b e5 6d 19 96 73 bc 9e // f4 10 24 0d a4 d8 a2 a2 fc 4d c5 52 33 7e 24 c0 a5 6e 9a 20 57 b1 65 // cc 3c 24 f5 23 47 ce af 88 55 fa 80 f2 34 f6 b5 ef e2 7a cf 9e 4e 92 // ac 81 7b e6 bd d7 16 e6 46 e2 9e 91 25 94 0b 3e 9b 0a 30 b2 20 68 ad // 35 81 81 f8 e9 58 e8 4b 74 39 40 f4 e1 a6 3d c9 e1 3a 70 34 0a 50 5b // 66 1d fd fa 83 39 8d 0e d1 f9 a0 d2 5e 45 e5 ed 6f 2e aa f2 b4 cd 6e // 14 0c cd 83 5f 79 6b da c5 89 f0 5a ea 1d bd c0 30 0b a3 b3 be e6 8b // 27 2f a8 aa 59 f2 89 0f 9e 6e 4f 4f 72 00 b2 01 1f 39 ce 1e 59 56 a2 // c4 03 50 56 ce ee f8 5b 16 0a e6 3a 7a b8 1d 76 6b 07 7b c1 14 d9 2b // db 09 11 90 79 e8 5c e6 fc ca b4 cb 43 d6 d0 be 43 ce c0 4c db cd b3 // 90 37 63 b4 a6 ce db 5b ce 12 32 4e a3 c7 51 3c 1a a5 b3 29 c5 98 84 // 8a 82 19 b0 09 ac 10 5c 9b be cb 0d 61 49 59 65 5b a8 c4 ac 0e bb 0f // 08 5e da 67 e2 a9 22 f5 68 27 cf d9 1b ef e3 e7 79 82 1e 7f 02 20 cf // 9e e0 d9 54 4d b9 0a a9 d1 06 46 ef bd eb f0 27 0c 0c 00 33 ec 70 18 // 9e 1d ea 48 da 51 25 2b f4 ae ab 30 08 17 57 ba af 34 45 e6 32 ef 6d // dd 2b b2 1b 3a c0 63 63 97 00 00 00 00 00 00 00 00 00 00 00 00 00 97 // 73 03 60 ba f1 db 05 e5 43 29 8f bc 68 79 4c 31 3a c2 ea 8a fc 09 71 // fa ec 26 c7 de f4 f2 b9 e1 a1 80 29 31 be 40 42 74 b7 ce c9 ee a8 76 // 09 fa 2c a2 9a a3 5c fb 4d b5 fd a9 e3 9f f7 85 87 77 1d 5d 26 20 38 // b5 ba ea ad a9 d4 56 f1 e9 aa 54 c8 ff af ef 91 ca 9c 80 be 59 64 5d // fb 1a 96 3f b6 d7 7b 58 a1 48 eb ce d7 b7 f7 15 d6 88 91 ef 7b f8 4b // 40 b6 63 68 1e 16 d5 6d 40 a8 91 a5 c5 40 a7 00 ab c5 c8 c8 9c e3 3a // ac 1e 47 a0 65 27 2f 15 47 8e e5 16 d5 53 20 5d f8 a1 a4 36 9a f0 64 // 21 c8 81 53 bc 18 df a0 fe 6b b0 28 f7 ba 35 8e e5 41 d5 6c fb 70 cb // a8 f0 62 91 c4 d3 2b 29 53 79 81 e3 0d 25 43 03 65 6e 4d f1 df e3 62 // b7 9b 0c 82 b1 7a cf 5e 06 cd a2 96 e3 d5 bd 40 31 be 02 ad 5c 89 d0 // e0 a8 11 b4 42 5c 14 5c ed 35 9c d7 6e 8d ec b5 cc f8 71} (length // 0x4a5) // } // flags: mq_open_flags = 0x42 (8 bytes) // mode: open_mode = 0x0 (8 bytes) // attr: nil // ] // returns fd_mq memcpy( (void*)0x200000001880, "eth0\000#\023\256u\340\373u0*\363\021i\335\331\306\207\336\277_" "\240\366\337k\277.\"\246\300#p\315\034/" "\246\362\274yL\205a\265\273~+>" "\274\223\370\253\2323\205l\035\025\021\032{@!2\266!" "\256\3679k\220\210\v8I$\375Q\035\220=r\330\300\330\t/" "\215v\323\247\330J\375\224#KT\335\024\323\341\276_$A=z\356\275/" "X\276mOX)s\224\336\276_\210N\270\336\353)" "\315\3056m\n\v\001\276\353\273\221\021z\302|" "d\033\004\322\371yx\262\033\bLTrw\210|0\t\306\342\234\355\\\330[" "\310\004 " "\363\254]V\035:\374\303\236\002\ax\357\376\034.TT\317\277\365\200a%" "\334Q\263CuT\314\002\352\221\350\034`\275\341e\200\177\322&" "l0\301b\254\213\330\001YZy\346!" "\211\234\321\246\0267\212vs\262\a\376\263j*\255\030I\314\351\252{]" "\357\267\362\356*\3715\bJt\320s\304\252\310\023~" "\262\3620\275f\333\256G\343\373\357\224\357:Q\033\343\243\244}\357`" "e\315L%Jw\231y\237g1\364\t\030i/" "!\023\361,\214u\252\277~)" "\224\0332\223\206\347\232\362j\250\226\246\242\374N\201\257Th\263\033o:" "\350\vq7S\344H\363\005\240\234\227B\022\020\235\252\177q\006\271(" "\366\034\203\261[\204\020aF\233\332\353\304*\002q\262\222\000\214v\254 " "AN\271\252\201W\227Te\201\230L\376\227+u\323^" "\261\360\340\037\275\a\273\345\030\235s\022ha\000\361\325LD\2507\240DQ" "\2122\026!8,\274%$" "\361\362\326\234y\354K\332\305\334\372\335\366\b\306\264\024\026\234\177" "\222\205\260\242%:" "\360\364\0250\017\310\246d\264\344L\031W\325\220\367l\033\376\336\vh\227" "=m\202.\254\vh\376\204Q}\2038/" "\203\353P\276\326+:" "\316E\\\225\324\254\222\207\327\230\227\343\354\255\307\247\202\271V}`" "\267\374@\325\254\200C\204R\210r^g\272Q(\232>\342\272\250=" "\027\f04\217\037\362\210*@v\347\321\356\263\302\215T\332\201g\331\032:" "hzW6s)x\006\256\021\362\036\315\v\345m\031\226s\274\236\364\020$" "\r\244\330\242\242\374M\305R3~$\300\245n\232 " "W\261e\314<$\365#" "G\316\257\210U\372\200\3624\366\265\357\342z\317\236N\222\254\201{" "\346\275\327\026\346F\342\236\221%\224\v>\233\n0\262 " "h\2555\201\201\370\351X\350Kt9@\364\341\246=\311\341:p4\nP[" "f\035\375\372\2039\215\016\321\371\240\322^E\345\355o." "\252\362\264\315n\024\f\315\203_" "yk\332\305\211\360Z\352\035\275\3000\v\243\263\276\346\213\'/" "\250\252Y\362\211\017\236nOOr\000\262\001\0379\316\036YV\242\304\003PV" "\316\356\370[\026\n\346:z\270\035vk\a{\301\024\331+" "\333\t\021\220y\350\\\346\374\312\264\313C\326\320\276C\316\300L\333\315" "\263\2207c\264\246\316\333[\316\0222N\243\307Q<\032\245\263)" "\305\230\204\212\202\031\260\t\254\020\\\233\276\313\raIYe[" "\250\304\254\016\273\017\b^" "\332g\342\251\"\365h\'\317\331\033\357\343\347y\202\036\177\002 " "\317\236\340\331TM\271\n\251\321\006F\357\275\353\360\'\f\f\0003\354p" "\030\236\035\352H\332Q%+\364\256\2530\b\027W\272\2574E\3462\357m\335+" "\262\033:" "\300cc\227\000\000\000\000\000\000\000\000\000\000\000\000\000\227s\003`" "\272\361\333\005\345C)\217\274hyL1:\302\352\212\374\tq\372\354&" "\307\336\364\362\271\341\241\200)1\276@Bt\267\316\311\356\250v\t\372," "\242\232\243\\\373M\265\375\251\343\237\367\205\207w\035]& " "8\265\272\352\255\251\324V\361\351\252T\310\377\257\357\221\312\234\200" "\276Yd]\373\032\226?\266\327{" "X\241H\353\316\327\267\367\025\326\210\221\357{\370K@" "\266ch\036\026\325m@\250\221\245\305@\247\000\253\305\310\310\234\343:" "\254\036G\240e\'/\025G\216\345\026\325S " "]\370\241\2446\232\360d!\310\201S\274\030\337\240\376k\260(" "\367\2725\216\345A\325l\373p\313\250\360b\221\304\323+)Sy\201\343\r%" "C\003enM\361\337\343b\267\233\f\202\261z\317^" "\006\315\242\226\343\325\275@" "1\276\002\255\\\211\320\340\250\021\264B\\\024\\\3555\234\327n\215\354" "\265\314\370q", 1189); syscall(__NR_mq_open, /*name=*/0x200000001880ul, /*flags=O_CREAT|O_RDWR*/ 0x42ul, /*mode=*/0ul, /*attr=*/0ul); // mq_unlink arguments: [ // name: ptr[in, buffer] { // buffer: {65 74 68 30 00} (length 0x5) // } // ] memcpy((void*)0x200000000000, "eth0\000", 5); syscall(__NR_mq_unlink, /*name=*/0x200000000000ul); } int main(void) { syscall(__NR_mmap, /*addr=*/0x1ffffffff000ul, /*len=*/0x1000ul, /*prot=*/0ul, /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x32ul, /*fd=*/(intptr_t)-1, /*offset=*/0ul); syscall(__NR_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul, /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul, /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x32ul, /*fd=*/(intptr_t)-1, /*offset=*/0ul); syscall(__NR_mmap, /*addr=*/0x200001000000ul, /*len=*/0x1000ul, /*prot=*/0ul, /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x32ul, /*fd=*/(intptr_t)-1, /*offset=*/0ul); const char* reason; (void)reason; loop(); return 0; }