diff options
author | Dmitry V. Levin <ldv@strace.io> | 2022-11-27 08:00:00 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@strace.io> | 2022-11-27 08:00:00 +0000 |
commit | 3539e8561b98482ace40e442937840727b193633 (patch) | |
tree | 94d3761b2b685fe103fd890f9d255fce53439be1 | |
parent | 3fdfc049a1cd66d6d81826a1d726e12c6b851f16 (diff) | |
download | strace-3539e8561b98482ace40e442937840727b193633.tar.gz |
dm: decode dm_ioctl as a pseudoarray
Somewhat similar to netlink messages, dm_ioctl data is a struct dm_ioctl
header followed by payload.
* src/dm.c (dm_decode_dm_target_spec, dm_decode_dm_target_deps,
dm_decode_dm_name_list, dm_decode_dm_target_versions,
dm_decode_dm_target_msg, dm_decode_string): Use tprint_array_next
to print separator between payload records.
(dm_decode_header, dm_decode_payload): New functions.
(dm_known_ioctl): Use them.
* tests/ioctl_dm.c (main): Update expected output.
-rw-r--r-- | src/dm.c | 208 | ||||
-rw-r--r-- | tests/ioctl_dm.c | 164 |
2 files changed, 194 insertions, 178 deletions
@@ -99,6 +99,68 @@ dm_decode_flags(const struct dm_ioctl *ioc) PRINT_FIELD_FLAGS(*ioc, flags, dm_flags, "DM_???"); } +static bool +dm_ioctl_has_params(const unsigned int code) +{ + switch (code) { + case DM_VERSION: + case DM_REMOVE_ALL: + case DM_DEV_CREATE: + case DM_DEV_REMOVE: + case DM_DEV_SUSPEND: + case DM_DEV_STATUS: + case DM_TABLE_CLEAR: + case DM_DEV_ARM_POLL: + return false; + } + + return true; +} + +static bool +dm_decode_header(struct tcb *const tcp, const unsigned int code, + const kernel_ulong_t arg, const struct dm_ioctl *const ioc) +{ + bool rc = false; + + tprint_struct_begin(); + /* + * device mapper code uses %d in some places and %u in another, but + * fields themselves are declared as __u32. + */ + PRINT_FIELD_U_ARRAY(*ioc, version); + /* + * if we use a different version of ABI, do not attempt to decode + * ioctl fields + */ + if (ioc->version[0] != DM_VERSION_MAJOR) { + tprints_comment("unsupported device mapper ABI version"); + goto skip; + } + + tprint_struct_next(); + PRINT_FIELD_U(*ioc, data_size); + + if (ioc->data_size < offsetof(struct dm_ioctl, data)) { + tprints_comment("data_size too small"); + goto skip; + } + + if (dm_ioctl_has_params(code)) { + tprint_struct_next(); + PRINT_FIELD_U(*ioc, data_start); + } + + dm_decode_device(code, ioc); + dm_decode_values(tcp, code, ioc); + dm_decode_flags(ioc); + rc = true; + + skip: + tprint_struct_end(); + return rc; +} + static void dm_decode_dm_target_spec(struct tcb *const tcp, const kernel_ulong_t addr, const struct dm_ioctl *const ioc) @@ -110,7 +172,7 @@ dm_decode_dm_target_spec(struct tcb *const tcp, const kernel_ulong_t addr, if (abbrev(tcp)) { if (ioc->target_count) { - tprints(", "); + tprint_array_next(); tprint_more_data_follows(); } @@ -118,7 +180,7 @@ dm_decode_dm_target_spec(struct tcb *const tcp, const kernel_ulong_t addr, } for (uint32_t i = 0; i < ioc->target_count; ++i) { - tprints(", "); + tprint_array_next(); if (i && offset <= offset_end) goto misplaced; @@ -187,7 +249,7 @@ dm_decode_dm_target_deps(struct tcb *const tcp, const kernel_ulong_t addr, if (ioc->data_start == ioc->data_size) return; - tprints(", "); + tprint_array_next(); if (abbrev(tcp)) { tprint_more_data_follows(); @@ -245,13 +307,13 @@ dm_decode_dm_name_list(struct tcb *const tcp, const kernel_ulong_t addr, return; if (abbrev(tcp)) { - tprint_struct_next(); + tprint_array_next(); tprint_more_data_follows(); return; } for (uint32_t count = 0;; ++count) { - tprints(", "); + tprint_array_next(); if (count && offset <= offset_end) goto misplaced; @@ -335,13 +397,13 @@ dm_decode_dm_target_versions(struct tcb *const tcp, const kernel_ulong_t addr, return; if (abbrev(tcp)) { - tprint_struct_next(); + tprint_array_next(); tprint_more_data_follows(); return; } for (uint32_t count = 0;; ++count) { - tprints(", "); + tprint_array_next(); if (count && offset <= offset_end) goto misplaced; @@ -387,7 +449,7 @@ dm_decode_dm_target_msg(struct tcb *const tcp, const kernel_ulong_t addr, if (ioc->data_start == ioc->data_size) return; - tprints(", "); + tprint_array_next(); if (abbrev(tcp)) { tprint_more_data_follows(); @@ -422,7 +484,7 @@ static void dm_decode_string(struct tcb *const tcp, const kernel_ulong_t addr, const struct dm_ioctl *const ioc) { - tprints(", "); + tprint_array_next(); if (abbrev(tcp)) { tprint_more_data_follows(); @@ -432,31 +494,55 @@ dm_decode_string(struct tcb *const tcp, const kernel_ulong_t addr, uint32_t offset = ioc->data_start; if (offset <= ioc->data_size) { + tprint_struct_begin(); tprints_field_name("string"); printstr_ex(tcp, addr + offset, ioc->data_size - offset, QUOTE_0_TERMINATED); + tprint_struct_end(); } else { tprint_unavailable(); tprints_comment("misplaced string"); } } -static bool -dm_ioctl_has_params(const unsigned int code) +static void +dm_decode_payload(struct tcb *const tcp, const unsigned int code, + const kernel_ulong_t arg, const struct dm_ioctl *const ioc) { switch (code) { - case DM_VERSION: - case DM_REMOVE_ALL: - case DM_DEV_CREATE: - case DM_DEV_REMOVE: - case DM_DEV_SUSPEND: - case DM_DEV_STATUS: - case DM_TABLE_CLEAR: - case DM_DEV_ARM_POLL: - return false; + case DM_DEV_WAIT: + case DM_TABLE_STATUS: + if (exiting(tcp) && !syserror(tcp)) + dm_decode_dm_target_spec(tcp, arg, ioc); + break; + case DM_TABLE_LOAD: + if (entering(tcp)) + dm_decode_dm_target_spec(tcp, arg, ioc); + break; + case DM_TABLE_DEPS: + if (exiting(tcp) && !syserror(tcp)) + dm_decode_dm_target_deps(tcp, arg, ioc); + break; + case DM_LIST_DEVICES: + if (exiting(tcp) && !syserror(tcp)) + dm_decode_dm_name_list(tcp, arg, ioc); + break; + case DM_LIST_VERSIONS: + if (exiting(tcp) && !syserror(tcp)) + dm_decode_dm_target_versions(tcp, arg, ioc); + break; + case DM_TARGET_MSG: + if (entering(tcp)) + dm_decode_dm_target_msg(tcp, arg, ioc); + else if (!syserror(tcp) && ioc->flags & DM_DATA_OUT_FLAG) + dm_decode_string(tcp, arg, ioc); + break; + case DM_DEV_RENAME: + case DM_DEV_SET_GEOMETRY: + if (entering(tcp)) + dm_decode_string(tcp, arg, ioc); + break; } - - return true; } static int @@ -510,81 +596,11 @@ dm_known_ioctl(struct tcb *const tcp, const unsigned int code, else tprint_value_changed(); - tprint_struct_begin(); - /* - * device mapper code uses %d in some places and %u in another, but - * fields themselves are declared as __u32. - */ - PRINT_FIELD_U_ARRAY(*ioc, version); - /* - * if we use a different version of ABI, do not attempt to decode - * ioctl fields - */ - if (ioc->version[0] != DM_VERSION_MAJOR) { - tprints_comment("unsupported device mapper ABI version"); - goto skip; - } - - tprint_struct_next(); - PRINT_FIELD_U(*ioc, data_size); - - if (ioc->data_size < offsetof(struct dm_ioctl, data)) { - tprints_comment("data_size too small"); - goto skip; - } - - if (dm_ioctl_has_params(code)) { - tprint_struct_next(); - PRINT_FIELD_U(*ioc, data_start); - } - - dm_decode_device(code, ioc); - dm_decode_values(tcp, code, ioc); - dm_decode_flags(ioc); - - switch (code) { - case DM_DEV_WAIT: - case DM_TABLE_STATUS: - if (entering(tcp) || syserror(tcp)) - break; - dm_decode_dm_target_spec(tcp, arg, ioc); - break; - case DM_TABLE_LOAD: - if (exiting(tcp)) - break; - dm_decode_dm_target_spec(tcp, arg, ioc); - break; - case DM_TABLE_DEPS: - if (entering(tcp) || syserror(tcp)) - break; - dm_decode_dm_target_deps(tcp, arg, ioc); - break; - case DM_LIST_DEVICES: - if (entering(tcp) || syserror(tcp)) - break; - dm_decode_dm_name_list(tcp, arg, ioc); - break; - case DM_LIST_VERSIONS: - if (entering(tcp) || syserror(tcp)) - break; - dm_decode_dm_target_versions(tcp, arg, ioc); - break; - case DM_TARGET_MSG: - if (entering(tcp)) - dm_decode_dm_target_msg(tcp, arg, ioc); - else if (!syserror(tcp) && ioc->flags & DM_DATA_OUT_FLAG) - dm_decode_string(tcp, arg, ioc); - break; - case DM_DEV_RENAME: - case DM_DEV_SET_GEOMETRY: - if (exiting(tcp)) - break; - dm_decode_string(tcp, arg, ioc); - break; - } + tprint_array_begin(); + if (dm_decode_header(tcp, code, arg, ioc)) + dm_decode_payload(tcp, code, arg, ioc); + tprint_array_end(); - skip: - tprint_struct_end(); return entering(tcp) ? 0 : RVAL_IOCTL_DECODED; } diff --git a/tests/ioctl_dm.c b/tests/ioctl_dm.c index c38e10494..2ef9a8ef1 100644 --- a/tests/ioctl_dm.c +++ b/tests/ioctl_dm.c @@ -210,33 +210,33 @@ main(void) dm_arg->version[1] = 0xbadc0dee; dm_arg->version[2] = 0xbadc0def; ioctl(-1, DM_VERSION, dm_arg); - printf("ioctl(-1, DM_VERSION, {version=[%u, %u, %u]" - " /* unsupported device mapper ABI version */}) = " + printf("ioctl(-1, DM_VERSION, [{version=[%u, %u, %u]" + " /* unsupported device mapper ABI version */}]) = " "-1 EBADF (%m)\n", 0xbadc0ded, 0xbadc0dee, 0xbadc0def); /* Incorrect data_size */ init_s(dm_arg, 14, 64); ioctl(-1, DM_VERSION, dm_arg); - printf("ioctl(-1, DM_VERSION, {version=[4, 1, 2], data_size=14" - " /* data_size too small */}) = -1 EBADF (%m)\n"); + printf("ioctl(-1, DM_VERSION, [{version=[4, 1, 2], data_size=14" + " /* data_size too small */}]) = -1 EBADF (%m)\n"); /* Unterminated name/uuid */ init_s(dm_arg, min_sizeof_dm_ioctl, 0); memcpy(dm_arg->name, str129, sizeof(dm_arg->name)); memcpy(dm_arg->uuid, str129, sizeof(dm_arg->uuid)); ioctl(-1, DM_VERSION, dm_arg); - printf("ioctl(-1, DM_VERSION, {version=[4, 1, 2], data_size=%zu, " + printf("ioctl(-1, DM_VERSION, [{version=[4, 1, 2], data_size=%zu, " "dev=makedev(0x12, 0x34), name=\"%.127s\"..., uuid=\"%.128s\"..., " - "flags=0}) = -1 EBADF (%m)\n", + "flags=0}]) = -1 EBADF (%m)\n", min_sizeof_dm_ioctl, str129, str129); /* Normal call */ init_s(dm_arg, min_sizeof_dm_ioctl, 0); ioctl(-1, DM_VERSION, dm_arg); printf("ioctl(-1, DM_VERSION, " - "{version=[4, 1, 2], data_size=%zu, " - "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0}) = " - "-1 EBADF (%m)\n", min_sizeof_dm_ioctl); + "[{version=[4, 1, 2], data_size=%zu, " + "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0}])" + " = -1 EBADF (%m)\n", min_sizeof_dm_ioctl); /* Zero dev, name, uuid */ init_s(dm_arg, min_sizeof_dm_ioctl, 0); @@ -246,7 +246,7 @@ main(void) dm_arg->uuid[0] = '\0'; ioctl(-1, DM_VERSION, dm_arg); printf("ioctl(-1, DM_VERSION, " - "{version=[4, 1, 2], data_size=%u, flags=0}) = " + "[{version=[4, 1, 2], data_size=%u, flags=0}]) = " "-1 EBADF (%m)\n", 0xfacefeed); /* Flag */ @@ -254,7 +254,7 @@ main(void) dm_arg->flags = 0xffffffff; ioctl(-1, DM_VERSION, dm_arg); printf("ioctl(-1, DM_VERSION, " - "{version=[4, 1, 2], data_size=%zu, " + "[{version=[4, 1, 2], data_size=%zu, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=" "DM_READONLY_FLAG|DM_SUSPEND_FLAG|DM_EXISTS_FLAG|" "DM_PERSISTENT_DEV_FLAG|DM_STATUS_TABLE_FLAG|" @@ -263,15 +263,15 @@ main(void) "DM_NOFLUSH_FLAG|DM_QUERY_INACTIVE_TABLE_FLAG|" "DM_UEVENT_GENERATED_FLAG|DM_UUID_FLAG|DM_SECURE_DATA_FLAG|" "DM_DATA_OUT_FLAG|DM_DEFERRED_REMOVE|DM_INTERNAL_SUSPEND_FLAG|" - "DM_IMA_MEASUREMENT_FLAG|0xfff00080}) = -1 EBADF (%m)\n", + "DM_IMA_MEASUREMENT_FLAG|0xfff00080}]) = -1 EBADF (%m)\n", min_sizeof_dm_ioctl); /* Normal call */ init_s(&s.ioc, sizeof(s.ioc), 0); ioctl(-1, DM_VERSION, &s); printf("ioctl(-1, DM_VERSION, " - "{version=[4, 1, 2], data_size=%zu, " - "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0}) = " + "[{version=[4, 1, 2], data_size=%zu, " + "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0}]) = " "-1 EBADF (%m)\n", sizeof(s.ioc)); @@ -281,8 +281,8 @@ main(void) for (unsigned int i = 0; i < ARRAY_SIZE(dummy_check_cmds_nodev); ++i) { init_s(dm_arg, min_sizeof_dm_ioctl, 0); ioctl(-1, dummy_check_cmds_nodev[i].arg, dm_arg); - printf("ioctl(-1, %s, {version=[4, 1, 2], data_size=%zu%s, " - "flags=0}) = -1 EBADF (%m)\n", + printf("ioctl(-1, %s, [{version=[4, 1, 2], data_size=%zu%s, " + "flags=0}]) = -1 EBADF (%m)\n", dummy_check_cmds_nodev[i].str, min_sizeof_dm_ioctl, dummy_check_cmds_nodev[i].has_params ? @@ -300,9 +300,9 @@ main(void) for (unsigned int i = 0; i < ARRAY_SIZE(dummy_check_cmds); ++i) { init_s(dm_arg, min_sizeof_dm_ioctl, 0); ioctl(-1, dummy_check_cmds[i].arg, dm_arg); - printf("ioctl(-1, %s, {version=[4, 1, 2], data_size=%zu%s, " + printf("ioctl(-1, %s, [{version=[4, 1, 2], data_size=%zu%s, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\"%s, " - "flags=0}) = -1 EBADF (%m)\n", + "flags=0}]) = -1 EBADF (%m)\n", dummy_check_cmds[i].str, min_sizeof_dm_ioctl, dummy_check_cmds[i].has_params ? ", data_start=0" : "", dummy_check_cmds[i].has_event_nr ? ", event_nr=0" : ""); @@ -315,17 +315,17 @@ main(void) s.ioc.event_nr = 0xbadc0ded; ioctl(-1, DM_DEV_SUSPEND, &s); printf("ioctl(-1, DM_DEV_SUSPEND, " - "{version=[4, 1, 2], data_size=%zu, " + "[{version=[4, 1, 2], data_size=%zu, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", " - "flags=DM_SUSPEND_FLAG}) = -1 EBADF (%m)\n", sizeof(s.ioc)); + "flags=DM_SUSPEND_FLAG}]) = -1 EBADF (%m)\n", sizeof(s.ioc)); init_s(&s.ioc, sizeof(s.ioc), 0); s.ioc.event_nr = 0xbadc0ded; ioctl(-1, DM_DEV_SUSPEND, &s); printf("ioctl(-1, DM_DEV_SUSPEND, " - "{version=[4, 1, 2], data_size=%zu, dev=makedev(0x12, 0x34), " + "[{version=[4, 1, 2], data_size=%zu, dev=makedev(0x12, 0x34), " "name=\"nnn\", uuid=\"uuu\", event_nr=3134983661, " - "flags=0}) = -1 EBADF (%m)\n", sizeof(s.ioc)); + "flags=0}]) = -1 EBADF (%m)\n", sizeof(s.ioc)); /* DM_TABLE_LOAD */ @@ -339,16 +339,16 @@ main(void) strcpy(s.u.ts.target_params, "tparams"); ioctl(-1, DM_TABLE_LOAD, &s); printf("ioctl(-1, DM_TABLE_LOAD, " - "{version=[4, 1, 2], data_size=%u, data_start=%u, " + "[{version=[4, 1, 2], data_size=%u, data_start=%u, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", " - "target_count=1, flags=0, " + "target_count=1, flags=0}, " #if VERBOSE "{sector_start=16, length=32, target_type=\"tgt\", " "string=\"tparams\"}" #else /* !VERBOSE */ "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", s.ioc.data_size, s.ioc.data_start); + "]) = -1 EBADF (%m)\n", s.ioc.data_size, s.ioc.data_start); /* No targets */ init_s(dm_arg, min_sizeof_dm_ioctl, min_sizeof_dm_ioctl); @@ -356,9 +356,9 @@ main(void) dm_arg->target_count = 0; ioctl(-1, DM_TABLE_LOAD, dm_arg); printf("ioctl(-1, DM_TABLE_LOAD, " - "{version=[4, 1, 2], data_size=%zu, data_start=%zu, " + "[{version=[4, 1, 2], data_size=%zu, data_start=%zu, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", " - "target_count=0, flags=0}) = -1 EBADF (%m)\n", + "target_count=0, flags=0}]) = -1 EBADF (%m)\n", sizeof(*dm_arg), min_sizeof_dm_ioctl); /* Invalid data_start */ @@ -367,15 +367,15 @@ main(void) dm_arg->target_count = 1234; ioctl(-1, DM_TABLE_LOAD, dm_arg); printf("ioctl(-1, DM_TABLE_LOAD, " - "{version=[4, 1, 2], data_size=%zu, data_start=%u, " + "[{version=[4, 1, 2], data_size=%zu, data_start=%u, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", " - "target_count=1234, flags=0, " + "target_count=1234, flags=0}, " #if VERBOSE "??? /* misplaced struct dm_target_spec */" #else "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", sizeof(*dm_arg), 0xfffffff8); + "]) = -1 EBADF (%m)\n", sizeof(*dm_arg), 0xfffffff8); /* Inaccessible pointer */ init_s(&dm_arg_open1->ioc, offsetof(struct dm_table_open_test, target1), @@ -384,15 +384,15 @@ main(void) dm_arg_open1->ioc.target_count = 0xdeaddea1; ioctl(-1, DM_TABLE_LOAD, dm_arg_open1); printf("ioctl(-1, DM_TABLE_LOAD, " - "{version=[4, 1, 2], data_size=%zu, data_start=%zu, " + "[{version=[4, 1, 2], data_size=%zu, data_start=%zu, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", " - "target_count=3735936673, flags=0, " + "target_count=3735936673, flags=0}, " #if VERBOSE "%p" #else /* !VERBOSE */ "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", sizeof(*dm_arg_open1), + "]) = -1 EBADF (%m)\n", sizeof(*dm_arg_open1), offsetof(struct dm_table_open_test, target1) #if VERBOSE , (char *) dm_arg_open1 + @@ -412,9 +412,9 @@ main(void) rc = ioctl(-1, DM_TABLE_LOAD, dm_arg_open2); errstr = sprintrc(rc); printf("ioctl(-1, DM_TABLE_LOAD, " - "{version=[4, 1, 2], data_size=%zu, data_start=%zu, " + "[{version=[4, 1, 2], data_size=%zu, data_start=%zu, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", " - "target_count=2, flags=0, ", + "target_count=2, flags=0}, ", sizeof(*dm_arg_open2), offsetof(struct dm_table_open_test, target1)); #if VERBOSE @@ -427,7 +427,7 @@ main(void) #else /* !VERBOSE */ printf("..."); #endif /* VERBOSE */ - printf("}) = %s\n", errstr); + printf("]) = %s\n", errstr); /* Incorrect next */ init_s(&dm_arg_open3->ioc, offsetof(struct dm_table_open_test, target5), @@ -456,9 +456,9 @@ main(void) rc = ioctl(-1, DM_TABLE_LOAD, dm_arg_open3); errstr = sprintrc(rc); printf("ioctl(-1, DM_TABLE_LOAD, " - "{version=[4, 1, 2], data_size=%zu, data_start=%zu, " + "[{version=[4, 1, 2], data_size=%zu, data_start=%zu, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", " - "target_count=4, flags=0, ", + "target_count=4, flags=0}, ", offsetof(struct dm_table_open_test, target5), offsetof(struct dm_table_open_test, target0)); #if VERBOSE @@ -471,7 +471,7 @@ main(void) #else /* !VERBOSE */ printf("..."); #endif /* VERBOSE */ - printf("}) = %s\n", errstr); + printf("]) = %s\n", errstr); #define FILL_DM_TARGET(id, id_next) \ do { \ @@ -507,9 +507,9 @@ main(void) rc = ioctl(-1, DM_TABLE_LOAD, dm_arg_open3); errstr = sprintrc(rc); printf("ioctl(-1, DM_TABLE_LOAD, " - "{version=[4, 1, 2], data_size=%zu, data_start=%zu, " + "[{version=[4, 1, 2], data_size=%zu, data_start=%zu, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", " - "target_count=3134983661, flags=0, ", + "target_count=3134983661, flags=0}, ", sizeof(*dm_arg_open3), offsetof(struct dm_table_open_test, target0)); #if VERBOSE @@ -523,7 +523,7 @@ main(void) PRINT_DM_TARGET(7); PRINT_DM_TARGET(8); #endif /* VERBOSE */ - printf("...}) = %s\n", errstr); + printf("...]) = %s\n", errstr); /* DM_TARGET_MSG */ @@ -533,14 +533,14 @@ main(void) "long target msg"); ioctl(-1, DM_TARGET_MSG, &s); printf("ioctl(-1, DM_TARGET_MSG, " - "{version=[4, 1, 2], data_size=%u, data_start=%u, " - "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0, " + "[{version=[4, 1, 2], data_size=%u, data_start=%u, " + "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0}, " #if VERBOSE "{sector=4660, message=\"long targ\"...}" #else /* !VERBOSE */ "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", + "]) = -1 EBADF (%m)\n", s.ioc.data_size, s.ioc.data_start); /* Invalid data_start */ @@ -548,14 +548,14 @@ main(void) dm_arg->data_size = sizeof(*dm_arg); ioctl(-1, DM_TARGET_MSG, dm_arg); printf("ioctl(-1, DM_TARGET_MSG, " - "{version=[4, 1, 2], data_size=%zu, data_start=%zu, " - "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0, " + "[{version=[4, 1, 2], data_size=%zu, data_start=%zu, " + "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0}, " #if VERBOSE "??? /* misplaced struct dm_target_msg */" #else /* !VERBOSE */ "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", + "]) = -1 EBADF (%m)\n", sizeof(*dm_arg), min_sizeof_dm_ioctl); /* Invalid data_start */ @@ -563,14 +563,14 @@ main(void) dm_arg->data_size = sizeof(*dm_arg); ioctl(-1, DM_TARGET_MSG, dm_arg); printf("ioctl(-1, DM_TARGET_MSG, " - "{version=[4, 1, 2], data_size=%zu, data_start=%u, " - "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0, " + "[{version=[4, 1, 2], data_size=%zu, data_start=%u, " + "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0}, " #if VERBOSE "??? /* misplaced struct dm_target_msg */" #else /* !VERBOSE */ "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", + "]) = -1 EBADF (%m)\n", sizeof(*dm_arg), 0xffffffff); /* Inaccessible pointer */ @@ -579,14 +579,14 @@ main(void) dm_arg->data_start = sizeof(*dm_arg); ioctl(-1, DM_TARGET_MSG, dm_arg); printf("ioctl(-1, DM_TARGET_MSG, " - "{version=[4, 1, 2], data_size=%zu, data_start=%zu, " - "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0, " + "[{version=[4, 1, 2], data_size=%zu, data_start=%zu, " + "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0}, " #if VERBOSE "%p" #else /* !VERBOSE */ "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", + "]) = -1 EBADF (%m)\n", sizeof(*dm_arg) + sizeof(struct dm_target_msg), sizeof(*dm_arg) #if VERBOSE @@ -602,8 +602,8 @@ main(void) rc = ioctl(-1, DM_TARGET_MSG, dm_arg_msg); errstr = sprintrc(rc); printf("ioctl(-1, DM_TARGET_MSG, " - "{version=[4, 1, 2], data_size=%zu, data_start=%zu, " - "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0, ", + "[{version=[4, 1, 2], data_size=%zu, data_start=%zu, " + "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0}, ", sizeof(*dm_arg_msg) + 1, offsetof(struct dm_target_msg_test, msg)); #if VERBOSE @@ -614,7 +614,7 @@ main(void) #else /* !VERBOSE */ printf("..."); #endif /* VERBOSE */ - printf("}) = %s\n", errstr); + printf("]) = %s\n", errstr); /* Zero-sied string */ init_s(&dm_arg_msg->ioc, sizeof(*dm_arg_msg), @@ -623,8 +623,8 @@ main(void) rc = ioctl(-1, DM_TARGET_MSG, dm_arg_msg); errstr = sprintrc(rc); printf("ioctl(-1, DM_TARGET_MSG, " - "{version=[4, 1, 2], data_size=%zu, data_start=%zu, " - "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0, ", + "[{version=[4, 1, 2], data_size=%zu, data_start=%zu, " + "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0}, ", sizeof(*dm_arg_msg), offsetof(struct dm_target_msg_test, msg)); #if VERBOSE printf("{sector=%" PRI__u64 ", message=\"\"}", @@ -632,7 +632,7 @@ main(void) #else /* !VERBOSE */ printf("..."); #endif /* VERBOSE */ - printf("}) = %s\n", errstr); + printf("]) = %s\n", errstr); /* DM_DEV_SET_GEOMETRY */ @@ -640,14 +640,14 @@ main(void) strcpy(s.u.string, "10 20 30 40"); ioctl(-1, DM_DEV_SET_GEOMETRY, &s); printf("ioctl(-1, DM_DEV_SET_GEOMETRY, " - "{version=[4, 1, 2], data_size=%u, data_start=%u, " - "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0, " + "[{version=[4, 1, 2], data_size=%u, data_start=%u, " + "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", flags=0}, " #if VERBOSE - "string=\"10 20 30 \"..." + "{string=\"10 20 30 \"...}" #else /* !VERBOSE */ "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", + "]) = -1 EBADF (%m)\n", s.ioc.data_size, s.ioc.data_start); @@ -658,15 +658,15 @@ main(void) memcpy(unaligned_dm_arg, dm_arg, offsetof(struct dm_ioctl, data)); ioctl(-1, DM_DEV_RENAME, unaligned_dm_arg); printf("ioctl(-1, DM_DEV_RENAME, " - "{version=[4, 1, 2], data_size=%zu, data_start=%zu, " + "[{version=[4, 1, 2], data_size=%zu, data_start=%zu, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", event_nr=0, " - "flags=0, " + "flags=0}, " #if VERBOSE - "string=%p" + "{string=%p}" #else /* !VERBOSE */ "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", + "]) = -1 EBADF (%m)\n", sizeof(*unaligned_dm_arg), min_sizeof_dm_ioctl #if VERBOSE , (char *) unaligned_dm_arg + min_sizeof_dm_ioctl @@ -678,15 +678,15 @@ main(void) s.ioc.data_start = 0xdeadbeef; ioctl(-1, DM_DEV_RENAME, &s); printf("ioctl(-1, DM_DEV_RENAME, " - "{version=[4, 1, 2], data_size=%u, data_start=3735928559, " + "[{version=[4, 1, 2], data_size=%u, data_start=3735928559, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", event_nr=0, " - "flags=0, " + "flags=0}, " #if VERBOSE "??? /* misplaced string */" #else /* !VERBOSE */ "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", + "]) = -1 EBADF (%m)\n", s.ioc.data_size); /* Strange but still valid data_start */ @@ -695,15 +695,15 @@ main(void) s.ioc.data_start = offsetof(struct dm_ioctl, name) + 1; ioctl(-1, DM_DEV_RENAME, &s); printf("ioctl(-1, DM_DEV_RENAME, " - "{version=[4, 1, 2], data_size=%u, data_start=%zu, " + "[{version=[4, 1, 2], data_size=%u, data_start=%zu, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", event_nr=0, " - "flags=0, " + "flags=0}, " #if VERBOSE - "string=\"nn\"" + "{string=\"nn\"}" #else /* !VERBOSE */ "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", + "]) = -1 EBADF (%m)\n", s.ioc.data_size, offsetof(struct dm_ioctl, name) + 1); @@ -712,15 +712,15 @@ main(void) strcpy(s.u.string, "new long name"); ioctl(-1, DM_DEV_RENAME, &s); printf("ioctl(-1, DM_DEV_RENAME, " - "{version=[4, 1, 2], data_size=%u, data_start=%u, " + "[{version=[4, 1, 2], data_size=%u, data_start=%u, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", event_nr=0, " - "flags=0, " + "flags=0}, " #if VERBOSE - "string=\"new long \"..." + "{string=\"new long \"...}" #else /* !VERBOSE */ "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", + "]) = -1 EBADF (%m)\n", s.ioc.data_size, s.ioc.data_start); @@ -729,16 +729,16 @@ main(void) s.ioc.target_count = -1U; ioctl(-1, DM_TABLE_LOAD, &s); printf("ioctl(-1, DM_TABLE_LOAD, " - "{version=[4, 1, 2], data_size=%u, data_start=%u, " + "[{version=[4, 1, 2], data_size=%u, data_start=%u, " "dev=makedev(0x12, 0x34), name=\"nnn\", uuid=\"uuu\", " - "target_count=4294967295, flags=0, " + "target_count=4294967295, flags=0}, " #if VERBOSE "{sector_start=0, length=0, target_type=\"\", string=\"\"}" ", ??? /* misplaced struct dm_target_spec */" #else "..." #endif /* VERBOSE */ - "}) = -1 EBADF (%m)\n", + "]) = -1 EBADF (%m)\n", s.ioc.data_size, s.ioc.data_start); puts("+++ exited with 0 +++"); |