---
 dm.c             |   25 ++++++++++++++++++++++---
 tests/ioctl_dm.c |    2 +-
 2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/dm.c b/dm.c
index caffc55..a48aa72 100644
--- a/dm.c
+++ b/dm.c
@@ -281,6 +281,23 @@ dm_decode_string(const struct dm_ioctl *ioc, const char 
*extra,
        }
 }
 
+static inline 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:
+               return false;
+       }
+
+       return true;
+}
+
 static int
 dm_known_ioctl(struct tcb *tcp, const unsigned int code, long arg)
 {
@@ -336,8 +353,10 @@ dm_known_ioctl(struct tcb *tcp, const unsigned int code, 
long arg)
                goto skip;
        }
 
-       tprintf(", data_size=%u, data_start=%u",
-               ioc->data_size, ioc->data_start);
+       tprintf(", data_size=%u", ioc->data_size);
+
+       if (dm_ioctl_has_params(code))
+               tprintf(", data_start=%u", ioc->data_start);
 
        if (ioc->data_size < (sizeof(*ioc) - sizeof(ioc->data))) {
                tprints(", /* Incorrect data_size */ ...");
@@ -348,7 +367,7 @@ dm_known_ioctl(struct tcb *tcp, const unsigned int code, 
long arg)
        dm_decode_values(tcp, code, ioc);
        dm_decode_flags(ioc);
 
-       if (ioc->data_size > sizeof(ioc)) {
+       if (dm_ioctl_has_params(code) && (ioc->data_size > sizeof(ioc))) {
                extra = malloc(ioc->data_size);
                if (extra) {
                        extra_size = ioc->data_size;
diff --git a/tests/ioctl_dm.c b/tests/ioctl_dm.c
index c120ed2..6ad4ea9 100644
--- a/tests/ioctl_dm.c
+++ b/tests/ioctl_dm.c
@@ -40,7 +40,7 @@ main(void)
        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, data_start=0, "
+              "{version=4.1.2, data_size=%zu, "
               "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", flags=0}) = "
               "-1 EBADF (%m)\n", sizeof(s.ioc));
 
-- 
1.7.10.4


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to