// https://syzkaller.appspot.com/bug?id=236c2ac9ab92358b73c96f0d96aed91dc7f1a4f9 // autogenerated by syzkaller (http://github.com/google/syzkaller) #define _GNU_SOURCE #include #include #include #include #include #include static void test(); void loop() { while (1) { test(); } } long r[12]; void* thr(void* arg) { switch ((long)arg) { case 0: r[0] = syscall(__NR_mmap, 0x20000000ul, 0xfff000ul, 0x3ul, 0x32ul, 0xfffffffffffffffful, 0x0ul); break; case 1: *(uint32_t*)0x20001000 = (uint32_t)0x10000; *(uint32_t*)0x20001004 = (uint32_t)0xc000800000000001; *(uint32_t*)0x20001008 = (uint32_t)0x10000; *(uint32_t*)0x2000100c = (uint32_t)0x1; r[5] = syscall(__NR_setsockopt, 0xfffffffffffffffful, 0x84ul, 0x0ul, 0x20001000ul, 0x10ul); break; case 2: r[6] = syscall(__NR_socket, 0x11ul, 0x80003ul, 0x8ul); break; case 3: *(uint16_t*)0x2052e000 = (uint16_t)0x0; *(uint8_t*)0x2052e002 = (uint8_t)0x7; *(uint8_t*)0x2052e003 = (uint8_t)0xffffffffffffffff; r[10] = syscall(__NR_setsockopt, r[6], 0x107ul, 0x12ul, 0x2052e000ul, 0x4ul); break; case 4: r[11] = syscall(__NR_setsockopt, r[6], 0x107ul, 0x5ul, 0x20001000ul, 0x47eul); break; } return 0; } void test() { long i; pthread_t th[10]; memset(r, -1, sizeof(r)); srand(getpid()); for (i = 0; i < 5; i++) { pthread_create(&th[i], 0, thr, (void*)i); usleep(rand() % 10000); } for (i = 0; i < 5; i++) { pthread_create(&th[5 + i], 0, thr, (void*)i); if (rand() % 2) usleep(rand() % 10000); } usleep(rand() % 100000); } int main() { int i; for (i = 0; i < 8; i++) { if (fork() == 0) { loop(); return 0; } } sleep(1000000); return 0; }