// https://syzkaller.appspot.com/bug?id=1229547e3b7d9724adc81fb876fc54c98546792a // autogenerated by syzkaller (https://github.com/google/syzkaller) #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include uint64_t r[3] = {0xffffffffffffffff, 0x0, 0xffffffffffffffff}; int main(void) { syscall(__NR_mmap, /*addr=*/0x1ffffffff000ul, /*len=*/0x1000, /*prot=*/0ul, /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x32ul, /*fd=*/(intptr_t)-1, /*offset=*/0ul); syscall(__NR_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000, /*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=*/0x1000, /*prot=*/0ul, /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x32ul, /*fd=*/(intptr_t)-1, /*offset=*/0ul); const char* reason; (void)reason; intptr_t res = 0; if (write(1, "executing program\n", sizeof("executing program\n") - 1)) { } // openat$dm_control arguments: [ // fd: const = 0xffffffffffffff9c (8 bytes) // file: ptr[in, buffer] { // buffer: {2f 64 65 76 2f 6d 61 70 70 65 72 2f 63 6f 6e 74 72 6f 6c 00} // (length 0x14) // } // flags: open_flags = 0x2 (4 bytes) // mode: const = 0x0 (2 bytes) // ] // returns fd_dm_ctl memcpy((void*)0x200000000740, "/dev/mapper/control\000", 20); res = syscall(__NR_openat, /*fd=*/0xffffffffffffff9cul, /*file=*/0x200000000740ul, /*flags=O_RDWR*/ 2, /*mode=*/0); if (res != -1) r[0] = res; // ioctl$DM_DEV_CREATE arguments: [ // fd: fd_dm_ctl (resource) // cmd: const = 0xc138fd03 (4 bytes) // arg: ptr[inout, dm_ioctl_t[dm_id_create, void, const[0, int32], const[0, // int32]]] { // dm_ioctl_t[dm_id_create, void, const[0, int32], const[0, int32]] { // version_major: const = 0x4 (4 bytes) // version_minor: const = 0x0 (4 bytes) // version_patch: const = 0x0 (4 bytes) // data_size: bytesize = 0x138 (4 bytes) // data_start: offsetof = 0x138 (4 bytes) // target_count: const = 0x0 (4 bytes) // open_count: const = 0x0 (4 bytes) // flags: dm_ioctl_flags = 0x88400 (4 bytes) // event_nr: const = 0x0 (4 bytes) // padding: const = 0x0 (4 bytes) // id: dm_id_create { // dev: dm_dev_number (resource) // name: dm_dev_name { // prefix: buffer: {73 79 7a} (length 0x3) // proc: proc = 0x0 (1 bytes) // slot: buffer: {30 00} (length 0x2) // pad = 0x0 (122 bytes) // } // uuid: union dm_dev_uuid_opt { // none: const = 0x0 (1 bytes) // } // } // data: buffer: {} (length 0x0) // } // } // ] *(uint32_t*)0x200000000780 = 4; *(uint32_t*)0x200000000784 = 0; *(uint32_t*)0x200000000788 = 0; *(uint32_t*)0x20000000078c = 0x138; *(uint32_t*)0x200000000790 = 0x138; *(uint32_t*)0x200000000794 = 0; *(uint32_t*)0x200000000798 = 0; *(uint32_t*)0x20000000079c = 0x88400; *(uint32_t*)0x2000000007a0 = 0; *(uint32_t*)0x2000000007a4 = 0; memcpy((void*)0x2000000007b0, "syz", 3); *(uint8_t*)0x2000000007b3 = 0x61; memcpy((void*)0x2000000007b4, "0\000", 2); *(uint8_t*)0x200000000830 = 0; res = syscall(__NR_ioctl, /*fd=*/r[0], /*cmd=*/0xc138fd03, /*arg=*/0x200000000780ul); if (res != -1) r[1] = *(uint64_t*)0x2000000007a8; // openat$dm_control arguments: [ // fd: const = 0xffffffffffffff9c (8 bytes) // file: ptr[in, buffer] { // buffer: {2f 64 65 76 2f 6d 61 70 70 65 72 2f 63 6f 6e 74 72 6f 6c 00} // (length 0x14) // } // flags: open_flags = 0x88841 (4 bytes) // mode: const = 0x0 (2 bytes) // ] // returns fd_dm_ctl memcpy((void*)0x2000000008c0, "/dev/mapper/control\000", 20); res = syscall( __NR_openat, /*fd=*/0xffffffffffffff9cul, /*file=*/0x2000000008c0ul, /*flags=O_NONBLOCK|O_LARGEFILE|O_CREAT|O_CLOEXEC|O_WRONLY*/ 0x88841, /*mode=*/0); if (res != -1) r[2] = res; // ioctl$DM_TABLE_LOAD arguments: [ // fd: fd_dm_ctl (resource) // cmd: const = 0xc138fd09 (4 bytes) // arg: ptr[inout, dm_ioctl_t[dm_id_lookup, array[dm_target, 1], len[data, // int32], const[0, int32]]] { // dm_ioctl_t[dm_id_lookup, array[dm_target, 1], len[data, int32], // const[0, int32]] { // version_major: const = 0x4 (4 bytes) // version_minor: const = 0x0 (4 bytes) // version_patch: const = 0x0 (4 bytes) // data_size: bytesize = 0x298 (4 bytes) // data_start: offsetof = 0x138 (4 bytes) // target_count: len = 0x1 (4 bytes) // open_count: const = 0x0 (4 bytes) // flags: dm_ioctl_flags = 0x25411 (4 bytes) // event_nr: const = 0x0 (4 bytes) // padding: const = 0x0 (4 bytes) // id: union dm_id_lookup { // by_dev: dm_id_by_dev { // dev: dm_dev_number (resource) // pad = 0x0 (264 bytes) // } // } // data: array[dm_target] { // union dm_target { // verity: dm_target_spec_t[dm_target_verity, dm_verity_params] { // sector_start: const = 0x0 (8 bytes) // length: dm_lengths = 0xc48 (8 bytes) // status: const = 0x0 (4 bytes) // next: bytesize = 0x160 (4 bytes) // target_type: buffer: {76 65 72 69 74 79 00 00 00 00 00 00 00 // 00 00 00} (length 0x10) params: dm_verity_params { // version: buffer: {31} (length 0x1) // sp0: const = 0x20 (1 bytes) // dev: union dm_dev { // ram_num: dm_ram_num { // major: buffer: {31 3a} (length 0x2) // minor: proc = 0x1 (20 bytes) // } // } // sp1: const = 0x20 (1 bytes) // hdev: union dm_dev { // ram_num: dm_ram_num { // major: buffer: {31 3a} (length 0x2) // minor: proc = 0x0 (20 bytes) // } // } // sp2: const = 0x20 (1 bytes) // dbs: buffer: {31 30 32 34} (length 0x4) // sp3: const = 0x20 (1 bytes) // hbs: buffer: {34 30 39 36} (length 0x4) // sp4: const = 0x20 (1 bytes) // nblk: int16 = 0x1000200000000061 (20 bytes) // sp5: const = 0x20 (1 bytes) // hstart: int16 = 0xfa (20 bytes) // sp6: const = 0x20 (1 bytes) // alg: buffer: {73 68 61 35 31 32} (length 0x6) // sp7: const = 0x20 (1 bytes) // digest: union dm_verity_hex { // fixed: buffer: {30 31 32 33 34 35 36 37 38 39 61 62 63 64 // 65 66 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66 30 // 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66 30 31 32 33 // 34 35 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35 36 // 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35 36 37 38 39 // 61 62 63 64 65 66 30 31 32 33 34 35 36 37 38 39 61 62 63 // 64 65 66 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66} // (length 0x80) // } // sp8: const = 0x20 (1 bytes) // salt: union dm_verity_salt { // hex: union dm_verity_hex { // hex16: array[dm_hex_digits] { // dm_hex_digits = 0x34 (1 bytes) // dm_hex_digits = 0x66 (1 bytes) // dm_hex_digits = 0x38 (1 bytes) // dm_hex_digits = 0x35 (1 bytes) // dm_hex_digits = 0x39 (1 bytes) // dm_hex_digits = 0x38 (1 bytes) // dm_hex_digits = 0x38 (1 bytes) // dm_hex_digits = 0x35 (1 bytes) // dm_hex_digits = 0x37 (1 bytes) // dm_hex_digits = 0x33 (1 bytes) // dm_hex_digits = 0x37 (1 bytes) // dm_hex_digits = 0x33 (1 bytes) // dm_hex_digits = 0x33 (1 bytes) // dm_hex_digits = 0x34 (1 bytes) // dm_hex_digits = 0x0 (1 bytes) // dm_hex_digits = 0x63 (1 bytes) // dm_hex_digits = 0x31 (1 bytes) // dm_hex_digits = 0x37 (1 bytes) // dm_hex_digits = 0x61 (1 bytes) // dm_hex_digits = 0x35 (1 bytes) // dm_hex_digits = 0x66 (1 bytes) // dm_hex_digits = 0x61 (1 bytes) // dm_hex_digits = 0x37 (1 bytes) // dm_hex_digits = 0x30 (1 bytes) // dm_hex_digits = 0x62 (1 bytes) // dm_hex_digits = 0x63 (1 bytes) // dm_hex_digits = 0x33 (1 bytes) // dm_hex_digits = 0x36 (1 bytes) // dm_hex_digits = 0x38 (1 bytes) // dm_hex_digits = 0x32 (1 bytes) // dm_hex_digits = 0x65 (1 bytes) // dm_hex_digits = 0x66 (1 bytes) // } // } // } // opts: buffer: {20 32 20 69 67 6e 6f 72 65 5f 7a 65 72 6f 5f // 62 6c 6f 63 6b 73 20 63 68 65 63 6b 5f 61 74 5f 6d 6f 73 74 // 5f 6f 6e 63 65} (length 0x28) // } // z: const = 0x0 (1 bytes) // } // } // } // } // } // ] *(uint32_t*)0x200000000900 = 4; *(uint32_t*)0x200000000904 = 0; *(uint32_t*)0x200000000908 = 0; *(uint32_t*)0x20000000090c = 0x298; *(uint32_t*)0x200000000910 = 0x138; *(uint32_t*)0x200000000914 = 1; *(uint32_t*)0x200000000918 = 0; *(uint32_t*)0x20000000091c = 0x25411; *(uint32_t*)0x200000000920 = 0; *(uint32_t*)0x200000000924 = 0; *(uint64_t*)0x200000000928 = r[1]; *(uint64_t*)0x200000000a38 = 0; *(uint64_t*)0x200000000a40 = 0xc48; *(uint32_t*)0x200000000a48 = 0; *(uint32_t*)0x200000000a4c = 0x160; memcpy((void*)0x200000000a50, "verity\000\000\000\000\000\000\000\000\000\000", 16); memset((void*)0x200000000a60, 49, 1); *(uint8_t*)0x200000000a61 = 0x20; memcpy((void*)0x200000000a62, "1:", 2); sprintf((char*)0x200000000a64, "%020llu", (long long)1); *(uint8_t*)0x200000000a78 = 0x20; memcpy((void*)0x200000000a79, "1:", 2); sprintf((char*)0x200000000a7b, "%020llu", (long long)0); *(uint8_t*)0x200000000a8f = 0x20; memcpy((void*)0x200000000a90, "1024", 4); *(uint8_t*)0x200000000a94 = 0x20; memcpy((void*)0x200000000a95, "4096", 4); *(uint8_t*)0x200000000a99 = 0x20; sprintf((char*)0x200000000a9a, "%020llu", (long long)0x1000200000000061); *(uint8_t*)0x200000000aae = 0x20; sprintf((char*)0x200000000aaf, "%020llu", (long long)0xfa); *(uint8_t*)0x200000000ac3 = 0x20; memcpy((void*)0x200000000ac4, "sha512", 6); *(uint8_t*)0x200000000aca = 0x20; memcpy((void*)0x200000000acb, "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234" "56789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", 128); *(uint8_t*)0x200000000b4b = 0x20; *(uint8_t*)0x200000000b4c = 0x34; *(uint8_t*)0x200000000b4d = 0x66; *(uint8_t*)0x200000000b4e = 0x38; *(uint8_t*)0x200000000b4f = 0x35; *(uint8_t*)0x200000000b50 = 0x39; *(uint8_t*)0x200000000b51 = 0x38; *(uint8_t*)0x200000000b52 = 0x38; *(uint8_t*)0x200000000b53 = 0x35; *(uint8_t*)0x200000000b54 = 0x37; *(uint8_t*)0x200000000b55 = 0x33; *(uint8_t*)0x200000000b56 = 0x37; *(uint8_t*)0x200000000b57 = 0x33; *(uint8_t*)0x200000000b58 = 0x33; *(uint8_t*)0x200000000b59 = 0x34; *(uint8_t*)0x200000000b5a = 0; *(uint8_t*)0x200000000b5b = 0x63; *(uint8_t*)0x200000000b5c = 0x31; *(uint8_t*)0x200000000b5d = 0x37; *(uint8_t*)0x200000000b5e = 0x61; *(uint8_t*)0x200000000b5f = 0x35; *(uint8_t*)0x200000000b60 = 0x66; *(uint8_t*)0x200000000b61 = 0x61; *(uint8_t*)0x200000000b62 = 0x37; *(uint8_t*)0x200000000b63 = 0x30; *(uint8_t*)0x200000000b64 = 0x62; *(uint8_t*)0x200000000b65 = 0x63; *(uint8_t*)0x200000000b66 = 0x33; *(uint8_t*)0x200000000b67 = 0x36; *(uint8_t*)0x200000000b68 = 0x38; *(uint8_t*)0x200000000b69 = 0x32; *(uint8_t*)0x200000000b6a = 0x65; *(uint8_t*)0x200000000b6b = 0x66; memcpy((void*)0x200000000b6c, " 2 ignore_zero_blocks check_at_most_once", 40); *(uint8_t*)0x200000000b94 = 0; syscall(__NR_ioctl, /*fd=*/r[2], /*cmd=*/0xc138fd09, /*arg=*/0x200000000900ul); return 0; }