// https://syzkaller.appspot.com/bug?id=aa3cd47728fab91e32dde562a353e64316b38c67 // autogenerated by syzkaller (https://github.com/google/syzkaller) #define _GNU_SOURCE #include #include #include #include #include #include #include #include #define BITMASK(bf_off, bf_len) (((1ull << (bf_len)) - 1) << (bf_off)) #define STORE_BY_BITMASK(type, htobe, addr, val, bf_off, bf_len) \ *(type*)(addr) = \ htobe((htobe(*(type*)(addr)) & ~BITMASK((bf_off), (bf_len))) | \ (((type)(val) << (bf_off)) & BITMASK((bf_off), (bf_len)))) uint64_t r[2] = {0xffffffffffffffff, 0xffffffffffffffff}; int main(void) { syscall(__NR_mmap, 0x1ffff000ul, 0x1000ul, 0ul, 0x32ul, -1, 0ul); syscall(__NR_mmap, 0x20000000ul, 0x1000000ul, 7ul, 0x32ul, -1, 0ul); syscall(__NR_mmap, 0x21000000ul, 0x1000ul, 0ul, 0x32ul, -1, 0ul); intptr_t res = 0; memcpy((void*)0x20000080, "/dev/net/tun\000", 13); res = syscall(__NR_openat, 0xffffffffffffff9cul, 0x20000080ul, 0x88002ul, 0ul); if (res != -1) r[0] = res; memcpy((void*)0x200000c0, "syzkaller1\000\000\000\000\000\000", 16); *(uint16_t*)0x200000d0 = 0x5001; syscall(__NR_ioctl, r[0], 0x400454ca, 0x200000c0ul); res = syscall(__NR_socket, 0x10ul, 3ul, 0); if (res != -1) r[1] = res; memcpy((void*)0x20000140, "syzkaller1\000\000\000\000\000\000", 16); *(uint16_t*)0x20000150 = 7; *(uint16_t*)0x20000152 = htobe16(0); *(uint32_t*)0x20000154 = htobe32(0); syscall(__NR_ioctl, r[1], 0x8914, 0x20000140ul); *(uint8_t*)0x20002240 = 0; *(uint8_t*)0x20002241 = 0; *(uint16_t*)0x20002242 = 3; *(uint16_t*)0x20002244 = 0; *(uint16_t*)0x20002246 = 0; *(uint16_t*)0x20002248 = 0; STORE_BY_BITMASK(uint8_t, , 0x2000224a, 0, 0, 4); STORE_BY_BITMASK(uint8_t, , 0x2000224a, 6, 4, 4); memcpy((void*)0x2000224b, "\xbc\x7d\x94", 3); *(uint16_t*)0x2000224e = htobe16(0x4c); *(uint8_t*)0x20002250 = 4; *(uint8_t*)0x20002251 = 0; *(uint8_t*)0x20002252 = 0xfe; *(uint8_t*)0x20002253 = 0x80; *(uint8_t*)0x20002254 = 0; *(uint8_t*)0x20002255 = 0; *(uint8_t*)0x20002256 = 0; *(uint8_t*)0x20002257 = 0; *(uint8_t*)0x20002258 = 0; *(uint8_t*)0x20002259 = 0; *(uint8_t*)0x2000225a = 0; *(uint8_t*)0x2000225b = 0; *(uint8_t*)0x2000225c = 0; *(uint8_t*)0x2000225d = 0; *(uint8_t*)0x2000225e = 0; *(uint8_t*)0x2000225f = 0; *(uint8_t*)0x20002260 = 0; *(uint8_t*)0x20002261 = 0; *(uint8_t*)0x20002262 = -1; *(uint8_t*)0x20002263 = 2; *(uint8_t*)0x20002264 = 0; *(uint8_t*)0x20002265 = 0; *(uint8_t*)0x20002266 = 0; *(uint8_t*)0x20002267 = 0; *(uint8_t*)0x20002268 = 0; *(uint8_t*)0x20002269 = 0; *(uint8_t*)0x2000226a = 0; *(uint8_t*)0x2000226b = 0; *(uint8_t*)0x2000226c = 0; *(uint8_t*)0x2000226d = 0; *(uint8_t*)0x2000226e = 0; *(uint8_t*)0x2000226f = 0; *(uint8_t*)0x20002270 = 0; *(uint8_t*)0x20002271 = 1; *(uint8_t*)0x20002272 = 0; *(uint8_t*)0x20002273 = 0; *(uint8_t*)0x20002274 = 0; *(uint8_t*)0x20002275 = 0; *(uint8_t*)0x20002276 = 0; *(uint8_t*)0x20002277 = 0; *(uint8_t*)0x20002278 = 0; *(uint8_t*)0x20002279 = 0; STORE_BY_BITMASK(uint16_t, , 0x2000227a, 0, 0, 1); STORE_BY_BITMASK(uint16_t, , 0x2000227a, 0, 1, 1); STORE_BY_BITMASK(uint16_t, , 0x2000227a, 1, 2, 1); STORE_BY_BITMASK(uint16_t, , 0x2000227a, 0, 3, 1); STORE_BY_BITMASK(uint16_t, , 0x2000227a, 0, 4, 4); STORE_BY_BITMASK(uint16_t, , 0x2000227b, 0, 0, 1); STORE_BY_BITMASK(uint16_t, , 0x2000227b, 0, 1, 4); STORE_BY_BITMASK(uint16_t, , 0x2000227b, 1, 5, 3); *(uint16_t*)0x2000227c = htobe16(0x880b); *(uint16_t*)0x2000227e = htobe16(0); *(uint16_t*)0x20002280 = htobe16(0); STORE_BY_BITMASK(uint16_t, , 0x20002282, 0, 0, 1); STORE_BY_BITMASK(uint16_t, , 0x20002282, 0, 1, 1); STORE_BY_BITMASK(uint16_t, , 0x20002282, 0, 2, 1); STORE_BY_BITMASK(uint16_t, , 0x20002282, 0, 3, 1); STORE_BY_BITMASK(uint16_t, , 0x20002282, 0, 4, 9); STORE_BY_BITMASK(uint16_t, , 0x20002283, 0, 5, 3); *(uint16_t*)0x20002284 = htobe16(0x800); STORE_BY_BITMASK(uint16_t, , 0x20002286, 0, 0, 1); STORE_BY_BITMASK(uint16_t, , 0x20002286, 0, 1, 1); STORE_BY_BITMASK(uint16_t, , 0x20002286, 0, 2, 1); STORE_BY_BITMASK(uint16_t, , 0x20002286, 0, 3, 1); STORE_BY_BITMASK(uint16_t, , 0x20002286, 7, 4, 9); STORE_BY_BITMASK(uint16_t, , 0x20002287, 0, 5, 3); *(uint16_t*)0x20002288 = htobe16(0x86dd); *(uint16_t*)0x2000228a = 8; *(uint16_t*)0x2000228c = htobe16(0x88be); *(uint32_t*)0x2000228e = htobe32(0); STORE_BY_BITMASK(uint8_t, , 0x20002292, 0, 0, 4); STORE_BY_BITMASK(uint8_t, , 0x20002292, 1, 4, 4); STORE_BY_BITMASK(uint8_t, , 0x20002293, 0, 0, 8); STORE_BY_BITMASK(uint8_t, , 0x20002294, 0, 0, 2); STORE_BY_BITMASK(uint8_t, , 0x20002294, 0, 2, 1); STORE_BY_BITMASK(uint8_t, , 0x20002294, 0, 3, 2); STORE_BY_BITMASK(uint8_t, , 0x20002294, 0, 5, 3); STORE_BY_BITMASK(uint8_t, , 0x20002295, 0, 0, 8); *(uint32_t*)0x20002296 = 1; *(uint32_t*)0x2000229a = htobe32(0); *(uint16_t*)0x2000229e = 8; *(uint16_t*)0x200022a0 = htobe16(0x22eb); *(uint32_t*)0x200022a2 = htobe32(0); STORE_BY_BITMASK(uint8_t, , 0x200022a6, 0, 0, 4); STORE_BY_BITMASK(uint8_t, , 0x200022a6, 2, 4, 4); STORE_BY_BITMASK(uint8_t, , 0x200022a7, 0, 0, 8); STORE_BY_BITMASK(uint8_t, , 0x200022a8, 0, 0, 2); STORE_BY_BITMASK(uint8_t, , 0x200022a8, 0, 2, 1); STORE_BY_BITMASK(uint8_t, , 0x200022a8, 0, 3, 2); STORE_BY_BITMASK(uint8_t, , 0x200022a8, 0, 5, 3); STORE_BY_BITMASK(uint8_t, , 0x200022a9, 0, 0, 8); *(uint32_t*)0x200022aa = 2; *(uint32_t*)0x200022ae = htobe32(0); *(uint16_t*)0x200022b2 = htobe16(0); STORE_BY_BITMASK(uint8_t, , 0x200022b4, 0, 0, 2); STORE_BY_BITMASK(uint8_t, , 0x200022b4, 0, 2, 5); STORE_BY_BITMASK(uint8_t, , 0x200022b4, 0, 7, 1); STORE_BY_BITMASK(uint8_t, , 0x200022b5, 0, 0, 1); STORE_BY_BITMASK(uint8_t, , 0x200022b5, 0, 1, 2); STORE_BY_BITMASK(uint8_t, , 0x200022b5, 0, 3, 1); STORE_BY_BITMASK(uint8_t, , 0x200022b5, 0, 4, 1); *(uint16_t*)0x200022b6 = 8; *(uint16_t*)0x200022b8 = htobe16(0x6558); *(uint32_t*)0x200022ba = htobe32(0); syscall(__NR_write, r[0], 0x20002240ul, 0x7eul); return 0; }