int r;
        char *new_name = (char *) param + param->data_start;
 
-       if (new_name < (char *) (param + 1) ||
+       if (new_name < (char *) param->data ||
            invalid_str(new_name, (void *) param + param_size)) {
                DMWARN("Invalid new logical volume name supplied.");
                return -EINVAL;
        if (!md)
                return -ENXIO;
 
-       if (geostr < (char *) (param + 1) ||
+       if (geostr < (char *) param->data ||
            invalid_str(geostr, (void *) param + param_size)) {
                DMWARN("Invalid geometry supplied.");
                goto out;
        if (r)
                goto out;
 
-       if (tmsg < (struct dm_target_msg *) (param + 1) ||
+       if (tmsg < (struct dm_target_msg *) param->data ||
            invalid_str(tmsg->message, (void *) param + param_size)) {
                DMWARN("Invalid target message parameters.");
                r = -EINVAL;
 
        char name[DM_NAME_LEN]; /* device name */
        char uuid[DM_UUID_LEN]; /* unique identifier for
                                 * the block device */
+       char data[7];           /* padding or data */
 };
 
 /*
 #define DM_DEV_SET_GEOMETRY    _IOWR(DM_IOCTL, DM_DEV_SET_GEOMETRY_CMD, struct dm_ioctl)
 
 #define DM_VERSION_MAJOR       4
-#define DM_VERSION_MINOR       11
+#define DM_VERSION_MINOR       12
 #define DM_VERSION_PATCHLEVEL  0
-#define DM_VERSION_EXTRA       "-ioctl (2006-10-12)"
+#define DM_VERSION_EXTRA       "-ioctl (2007-10-02)"
 
 /* Status bits */
 #define DM_READONLY_FLAG       (1 << 0) /* In/Out */