// https://syzkaller.appspot.com/bug?id=c83f2e4d5608c59f6474fa9b50a4284a97143fa6 // 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 static void kill_and_wait(int pid, int* status) { kill(pid, SIGKILL); while (waitpid(-1, status, 0) != pid) { } } 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; } #define __syscall syscall static void execute_one(void); #define WAIT_FLAGS 0 static void loop(void) { int iter; for (iter = 0;; iter++) { int pid = fork(); if (pid < 0) exit(1); if (pid == 0) { 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 < 5 * 1000) continue; kill_and_wait(pid, &status); break; } } } uint64_t r[3] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff}; void execute_one(void) { intptr_t res = 0; res = syscall(SYS_socket, 0x11, 0x4003, 0); if (res != -1) r[0] = res; memcpy( (void*)0x20000240, "\x50\x01\x05\x03\x60\x00\x00\x04\x00\x00\x00\x01\x13\x06\xca\x90\x02\x0e" "\x10\xfe\xce\xa1\x1e\xa8\xfe\xf9\x6e\xcf\xc7\x3f\xd3\x35\x7a\xe2\x6c\xaa" "\x04\x16\xfa\x4f\x37\x63\x36\xac\xf0\x0b\x78\x04\xbe\x78\x1e\x49\x91\xf7" "\xc8\xdf\x5f\x88\x2b\x29\x7b\xe1\xaa\x5b\x23\xed\x00\xf4\xc8\xb2\xca\x3e" "\xbb\xc2\x57\x69\x9a\x1f\x13\x2e\x27\xac\xb5\xd6\x02\x00\x0d\x7d\x02\x6b" "\xa8\xaf\x63\xff\x37\x28\x29\x02\xe4\xfd\x89\x72\x0f\xd3\x87\x2b\xab\xfb" "\xb7\x70\xc1\xf5\xa8\x72\xc8\x81\xff\x7c\xc5\x3c\x89\x43\x03\xb2\x2f\x31" "\x0b\x40\x4f\x36\xa0\x0f\x90\x00\x6e\xe0\x1b\xe6\x57\xae\xa8\xc5\x00\x00" "\x00\x02\x00\x00\x00\x00\x00\x00\x0e\x02\x08\xa3\x71\xa3\xf8\x00\x04\xff" "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x39\xcd" "\xa7\x4d\x14\x67\x80\x28\x11\xc6\x7b\xe2\x31\x39\x27\xb9\x13\xce\xbd\xbb" "\x7e\x56\x3c\x73\x89\x1d\x41\xf6\x38\x83\x7f\x11\xc3\x4b\x0c\xce\xb2\x02" "\x4d\xb2\x24\xda\xdc\x06\x40\x90\x6f\xa4\x5d\x70\x9d\xa9\xd1\x58\xd9\x45" "\xa2\xa5\xfc\x12\x33\xcf\x6e\x27\x74\x9b\xbd\x97\xbb\x0d\x03\xfe\x2d\x04" "\xa1\xb9\xff\x40\x19\x5f\x1f\xde\x95\xd6\x88\x96\xdc\x7e\xd7\xb1\x87\x90" "\x66\x98\xe0\x4e\x34\x24\x8d\xaa\xf9\x23\x1f\x0d\xe0\x30\x32\x3b\x41\x25" "\xce\x41\x20\x35\x83\x67\x1a\xc5\xe5\xb7\xb3\x03\x75\x7e\x60\x64\x2b\x45" "\xcb\xc5\x73\x7b\x8e\x24\x05\x75\x71\x05\x88\x9a\x2b\x32\x72\x8f\x83\xea" "\x65\xf3\x48\x2e\x09\x3d\xe7\xcd\x0b\x10\x42\x7a", 336); syscall(SYS_sendto, r[0], 0x20000240, 0x150, 0, 0, 0); res = syscall(SYS_socket, 0x11, 0x4003, 0); if (res != -1) r[1] = res; memcpy( (void*)0x200003c0, "\x50\x01\x05\x03\x60\x00\x00\x04\x00\x00\x00\x00\x13\x06\xca\x90\x10\x0e" "\x10\xfe\xce\xa1\x1e\xa8\xfe\xf9\x6e\xcf\xc7\x3f\xd3\x35\x7a\xe2\x6c\xaa" "\x04\x16\xfa\x4f\x37\x63\x36\xac\xf0\x0b\x78\x04\xbe\x78\x1e\x49\x91\xf7" "\xc8\xdf\x5f\x88\x2b\x29\x7b\xe1\xaa\x5b\x23\xed\x00\xf4\xc8\xb2\xca\x3e" "\xbb\xc2\x57\x69\x9a\x1f\x13\x2e\x27\xac\xb5\xd6\x02\x00\x0d\x7d\x02\x6b" "\xa8\xaf\x63\xff\x37\x28\x29\x02\xe4\xfd\x89\x72\x0f\xd3\x87\x2b\xab\xfb" "\xb7\x70\xc1\xf5\xa8\x72\xc8\x81\xff\x7c\xc5\x3c\x89\x43\x03\xb2\x2f\x31" "\x0b\x40\x4f\x36\xa0\x0f\x90\x00\x6e\xe0\x1b\xe6\x57\xae\xa8\xc5\x00\x00" "\x00\x02\x00\x00\x00\x00\x00\x00\x0e\x02\x08\xa3\x71\xa3\xf8\x00\x04\xff" "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x85\x39\xcd" "\xa7\x4d\x14\x67\x80\x28\x11\xc6\x7b\xe2\x31\x39\x27\xb9\x13\xce\xbd\xbb" "\x7e\x56\x3c\x73\x89\x1d\x41\xf6\x38\x83\x7f\x11\xc3\x4b\x0c\xce\xb2\x02" "\x4d\xb2\x24\xda\xdc\x06\x40\x90\x6f\xa4\x5d\x70\x9d\xa9\xd1\x58\xd9\x45" "\xa2\xa5\xfc\x12\x33\xcf\x6e\x27\x74\x9b\xbd\x97\xbb\x0d\x03\xfe\x2d\x04" "\xa1\xb9\xff\x40\x19\x5f\x1f\xde\x95\xd6\x88\x96\xdc\x7e\xd7\xb1\x87\x90" "\x66\x98\xe0\x4e\x34\x24\x8d\xaa\xf9\x23\x1f\x0d\xe0\x30\x32\x3b\x41\x25" "\xce\x41\x20\x35\x83\x67\x1a\xc5\xe5\xb7\xb3\x03\x75\x7e\x60\x64\x2b\x45" "\xcb\xc5\x73\x7b\x8e\x24\x05\x75\x71\x05\x88\x9a\x2b\x32\x72\x8f\x83\xea" "\x65\xf3\x48\x2e\x09\x3d\xe7\xcd\x0b\x10\x42\x7a", 336); syscall(SYS_sendto, r[1], 0x200003c0, 0x150, 0, 0, 0); res = syscall(SYS_socket, 0x11, 0x4003, 0); if (res != -1) r[2] = res; memcpy( (void*)0x20000180, "\xb1\x00\x05\x01\x60\x00\x00\x04\x00\x00\x00\x01\x07\x0c\xca\x90\x05\x10" "\x04\xfe\xce\xa1\x1e\xa8\xfe\xf9\x6e\xcf\xc7\x3f\xd3\x35\x7a\xe2\x6c\xaa" "\x04\x16\xfa\x4f\x37\x63\x36\xac\xf0\x0b\x78\x04\xbe\x78\x1e\x49\x91\xf7" "\xc8\xdf\x5f\x88\x2b\x29\x7b\xe1\xaa\x5b\x23\xed\x00\xf4\xc8\xb2\xca\x3e" "\xbb\xc2\x57\x69\x9a\x1f\x13\x2e\x27\xac\xb5\xd6\x02\x00\x0d\x7d\x02\x6b" "\xa8\xaf\x63\xff\x37\x28\x29\x02\xe4\xfd\x89\x72\x0f\xd3\x87\x2b\xab\xfb" "\xb7\x70\xc1\xf5\xa8\x72\xc8\x81\xff\x7c\xc5\x3c\x89\x43\x03\xb2\x2f\x31" "\x0b\x40\x08\x00\x00\x00\x00\x00\x00\x00\x1b\xe6\x57\xae\xa8\xc5\x00\x00" "\x00\x02\x00\x00\x00\x00\x00\x00\x02\x02\x08\xa3\x71\xa3\xf8\x00\x04\xff" "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 177); syscall(SYS_sendto, r[2], 0x20000180, 0xb1, 0, 0, 0); } int main(void) { syscall(SYS_mmap, 0x20000000, 0x1000000, 3, 0x1012, -1, 0, 0); loop(); return 0; }