1d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes/* 2d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * Check decoding of DM_* commands of ioctl syscall. 3d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * 4d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * Copyright (c) 2016 Mikulas Patocka <mpatocka@redhat.com> 5d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * Copyright (c) 2016 Eugene Syromyatnikov <evgsyr@gmail.com> 639bac055674d23770b9a724221b728e443196ea7Elliott Hughes * Copyright (c) 2016-2017 The strace developers. 7d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * All rights reserved. 8d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * 9d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * Redistribution and use in source and binary forms, with or without 10d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * modification, are permitted provided that the following conditions 11d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * are met: 12d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * 1. Redistributions of source code must retain the above copyright 13d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * notice, this list of conditions and the following disclaimer. 14d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * 2. Redistributions in binary form must reproduce the above copyright 15d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * notice, this list of conditions and the following disclaimer in the 16d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * documentation and/or other materials provided with the distribution. 17d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * 3. The name of the author may not be used to endorse or promote products 18d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * derived from this software without specific prior written permission. 19d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * 20d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 21d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 22d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 23d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 24d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 25d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 29d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes */ 31d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 32d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#include "tests.h" 33d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 34d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#ifdef HAVE_LINUX_DM_IOCTL_H 35d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 36d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# include <errno.h> 37d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# include <inttypes.h> 38d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# include <stdbool.h> 39d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# include <stdio.h> 40d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# include <stddef.h> 41d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# include <string.h> 42d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# include <sys/ioctl.h> 43d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# include <linux/ioctl.h> 44d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# include <linux/dm-ioctl.h> 45d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 46d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# ifndef VERBOSE 47d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# define VERBOSE 0 48d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif 49d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 50d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345" 51d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 52d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# define ALIGNED_SIZE(s_, t_) \ 53d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes (((s_) + (ALIGNOF(t_) - 1UL)) & ~(ALIGNOF(t_) - 1UL)) 54d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# define ALIGNED_OFFSET(t_, m_) \ 55d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ALIGNED_SIZE(offsetof(t_, m_), t_) 56d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 57d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstatic const char str129[] = STR32 STR32 STR32 STR32 "6"; 58d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 59d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstatic const __u64 dts_sector_base = (__u64) 0xdeadca75facef157ULL; 60d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstatic const __u64 dts_sector_step = (__u64) 0x100000001ULL; 61d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstatic const __u64 dts_length_base = (__u64) 0xbadc0dedda7a1057ULL; 62d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstatic const __u64 dts_length_step = (__u64) 0x700000007ULL; 63d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstatic const __s32 dts_status_base = (__s32) 3141592653U; 64d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstatic const __s32 dts_status_step = 0x1234; 65d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 66d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstatic const size_t min_sizeof_dm_ioctl = 67d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_ioctl, data); 68d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 69d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstatic struct s { 70d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_ioctl ioc; 71d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes union { 72d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct { 73d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_spec target_spec; 74d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char target_params[256]; 75d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes } ts; 76d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct { 77d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_msg target_msg; 78d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char target_string[256]; 79d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes } tm; 80d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char string[256]; 81d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes } u; 82d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes} s; 83d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 84d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstruct dm_table_open_test { 85d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_ioctl ioc; 86d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_spec target0; 87d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char param0[1]; 88d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_spec target1; 89d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char param1[2]; 90d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_spec target2; 91d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char param2[3]; 92d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_spec target3; 93d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char param3[4]; 94d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_spec target4; 95d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char param4[5]; 96d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_spec target5; 97d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char param5[6]; 98d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_spec target6; 99d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char param6[7]; 100d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_spec target7; 101d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char param7[8]; 102d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_spec target8; 103d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char param8[9]; 104d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_spec target9; 105d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes char param9[10]; 106d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes}; 107d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 108d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstruct dm_target_msg_test { 109d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_ioctl ioc; 110d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_msg msg; 111d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes}; 112d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 113d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstruct args { 114d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes unsigned int arg; 115d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes const char *str; 116d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes bool has_params; 117d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes bool has_event_nr; 118d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes}; 119d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 120d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 121d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstatic void 122d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesinit_s(struct dm_ioctl *s, size_t size, size_t offs) 123d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes{ 124d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes memset(s, 0, size); 125d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s->version[0] = DM_VERSION_MAJOR; 126d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s->version[1] = 1; 127d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s->version[2] = 2; 128d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s->data_size = size; 129d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s->data_start = offs; 130d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s->dev = 0x1234; 131d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes strcpy(s->name, "nnn"); 132d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes strcpy(s->uuid, "uuu"); 133d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes} 134d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 135d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstatic void 136d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesinit_dm_target_spec(struct dm_target_spec *ptr, uint32_t id) 137d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes{ 138d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ptr->sector_start = dts_sector_base + dts_sector_step * id; 139d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ptr->length = dts_length_base + dts_length_step * id; 140d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ptr->status = dts_status_base + dts_status_step * id; 141d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 142d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes strncpy(ptr->target_type, str129 + 143d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes id % (sizeof(str129) - sizeof(ptr->target_type)), 144d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes id % (sizeof(ptr->target_type) + 1)); 145d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes if (id % (sizeof(ptr->target_type) + 1) < sizeof(ptr->target_type)) 146d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ptr->target_type[id % (sizeof(ptr->target_type) + 1)] = '\0'; 147d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes} 148d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 149d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 150d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesstatic void 151d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesprint_dm_target_spec(struct dm_target_spec *ptr, uint32_t id) 152d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes{ 153d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("{sector_start=%" PRI__u64 ", length=%" PRI__u64 ", " 154d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "target_type=\"%.*s\", string=", 155d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dts_sector_base + dts_sector_step * id, 156d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dts_length_base + dts_length_step * id, 157d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes (int) (id % (sizeof(ptr->target_type) + 1)), 158d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes str129 + id % (sizeof(str129) - sizeof(ptr->target_type))); 159d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes} 160d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 161d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 162d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesint 163d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesmain(void) 164d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes{ 165d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes static kernel_ulong_t dummy_dm_ioctl1 = 166d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes _IOC(_IOC_READ, DM_IOCTL, 0, 0x1fff); 167d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes static kernel_ulong_t dummy_dm_ioctl2 = 168d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes _IOC(_IOC_READ|_IOC_WRITE, DM_IOCTL, 0xed, 0); 169d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes static kernel_ulong_t dummy_dm_arg = 170d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes (kernel_ulong_t) 0xbadc0dedda7a1057ULL; 171d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* We can't check these properly for now */ 172d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes static struct args dummy_check_cmds_nodev[] = { 173d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes { ARG_STR(DM_REMOVE_ALL), false }, 174d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes { ARG_STR(DM_LIST_DEVICES), true }, 175d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes { ARG_STR(DM_LIST_VERSIONS), true }, 176d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes }; 177d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes static struct args dummy_check_cmds[] = { 178d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes { ARG_STR(DM_DEV_CREATE), false }, 179d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes { ARG_STR(DM_DEV_REMOVE), false, true }, 180d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes { ARG_STR(DM_DEV_STATUS), false }, 181d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes { ARG_STR(DM_DEV_WAIT), true, true }, 182d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes { ARG_STR(DM_TABLE_CLEAR), false }, 183d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes { ARG_STR(DM_TABLE_DEPS), true }, 184d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes { ARG_STR(DM_TABLE_STATUS), true }, 185d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes }; 186d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 187d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_ioctl *unaligned_dm_arg = 188d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tail_alloc(offsetof(struct dm_ioctl, data)); 189d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_ioctl *dm_arg = 190d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tail_alloc(ALIGNED_OFFSET(struct dm_ioctl, data)); 191d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_table_open_test *dm_arg_open1 = 192d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tail_alloc(ALIGNED_OFFSET(struct dm_table_open_test, target1)); 193d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_table_open_test *dm_arg_open2 = 194d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tail_alloc(ALIGNED_OFFSET(struct dm_table_open_test, param1)); 195d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_table_open_test *dm_arg_open3 = 196d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tail_alloc(ALIGNED_OFFSET(struct dm_table_open_test, target9)); 197d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes struct dm_target_msg_test *dm_arg_msg = 198d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes tail_alloc(sizeof(*dm_arg_msg)); 199d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 200d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes long rc; 201d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes const char *errstr; 202d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes unsigned int i; 203d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 204d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 205d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Incorrect operation */ 206d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, _IOW(DM_IOCTL, 0xde, int), dm_arg); 207d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, _IOC(_IOC_WRITE, %#x, 0xde, %#zx), %p) = " 208d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "-1 EBADF (%m)\n", 209d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes DM_IOCTL, sizeof(int), dm_arg); 210d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 211d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, dummy_dm_ioctl1, 0); 212d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, _IOC(_IOC_READ, %#x, 0, %#x), 0) = -1 EBADF (%m)\n", 213d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes DM_IOCTL, (unsigned int) _IOC_SIZE(dummy_dm_ioctl1)); 214d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 215d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, dummy_dm_ioctl2, dummy_dm_arg); 216d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, _IOC(_IOC_READ|_IOC_WRITE, %#x, %#x, 0), %#lx) = " 217d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "-1 EBADF (%m)\n", 218d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes DM_IOCTL, (unsigned int) _IOC_NR(dummy_dm_ioctl2), 219d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes (unsigned long) dummy_dm_arg); 220d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 221d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 222d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_VERSION */ 223d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Incorrect pointer */ 224d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_VERSION, dm_arg + 1); 225d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_VERSION, %p) = -1 EBADF (%m)\n", dm_arg + 1); 226d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 227d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Incorrect data_size */ 228d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, 0, 0); 229d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_VERSION, &s); 230d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_VERSION, %p) = -1 EBADF (%m)\n", &s); 231d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 232d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Incorrect version */ 233d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, 0); 234d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->version[0] = 0xbadc0ded; 235d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->version[1] = 0xbadc0dee; 236d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->version[2] = 0xbadc0def; 237d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_VERSION, dm_arg); 23839bac055674d23770b9a724221b728e443196ea7Elliott Hughes printf("ioctl(-1, DM_VERSION, {version=%u.%u.%u" 23939bac055674d23770b9a724221b728e443196ea7Elliott Hughes " /* unsupported device mapper ABI version */}) = " 240d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "-1 EBADF (%m)\n", 0xbadc0ded, 0xbadc0dee, 0xbadc0def); 241d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 242d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Incorrect data_size */ 243d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, 14, 64); 244d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_VERSION, dm_arg); 24539bac055674d23770b9a724221b728e443196ea7Elliott Hughes printf("ioctl(-1, DM_VERSION, {version=4.1.2, data_size=14" 24639bac055674d23770b9a724221b728e443196ea7Elliott Hughes " /* data_size too small */}) = -1 EBADF (%m)\n"); 247d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 248d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Unterminated name/uuid */ 249d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, 0); 250d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes strncpy(dm_arg->name, str129, sizeof(dm_arg->name)); 251d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes strncpy(dm_arg->uuid, str129, sizeof(dm_arg->uuid)); 252d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_VERSION, dm_arg); 253d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_VERSION, {version=4.1.2, data_size=%zu, " 254d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"%.127s\", uuid=\"%.128s\", " 255d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "flags=0}) = -1 EBADF (%m)\n", 256d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes min_sizeof_dm_ioctl, str129, str129); 257d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 258d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Normal call */ 259d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, 0); 260d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_VERSION, dm_arg); 261d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_VERSION, " 262d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, " 263d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", flags=0}) = " 264d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "-1 EBADF (%m)\n", min_sizeof_dm_ioctl); 265d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 266d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Zero dev, name, uuid */ 267d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, 0); 268d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->data_size = 0xfacefeed; 269d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->dev = 0; 270d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->name[0] = '\0'; 271d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->uuid[0] = '\0'; 272d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_VERSION, dm_arg); 273d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_VERSION, " 274d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%u, flags=0}) = " 275d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "-1 EBADF (%m)\n", 0xfacefeed); 276d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 277d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Flag */ 278d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, 0); 279d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->flags = 0xffffffff; 280d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_VERSION, dm_arg); 281d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_VERSION, " 282d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, " 283d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", flags=" 284d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "DM_READONLY_FLAG|DM_SUSPEND_FLAG|DM_EXISTS_FLAG|" 285d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "DM_PERSISTENT_DEV_FLAG|DM_STATUS_TABLE_FLAG|" 286d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "DM_ACTIVE_PRESENT_FLAG|DM_INACTIVE_PRESENT_FLAG|" 287d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "DM_BUFFER_FULL_FLAG|DM_SKIP_BDGET_FLAG|DM_SKIP_LOCKFS_FLAG|" 288d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "DM_NOFLUSH_FLAG|DM_QUERY_INACTIVE_TABLE_FLAG|" 289d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "DM_UEVENT_GENERATED_FLAG|DM_UUID_FLAG|DM_SECURE_DATA_FLAG|" 290d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "DM_DATA_OUT_FLAG|DM_DEFERRED_REMOVE|DM_INTERNAL_SUSPEND_FLAG|" 291d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "0xfff80080}) = -1 EBADF (%m)\n", 292d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes min_sizeof_dm_ioctl); 293d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 294d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Normal call */ 295d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&s.ioc, sizeof(s.ioc), 0); 296d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_VERSION, &s); 297d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_VERSION, " 298d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, " 299d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", flags=0}) = " 300d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "-1 EBADF (%m)\n", sizeof(s.ioc)); 301d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 302d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 303d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_REMOVE_ALL */ 304d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_LIST_DEVICES */ 305d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_LIST_VERSIONS */ 306d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes for (i = 0; i < ARRAY_SIZE(dummy_check_cmds_nodev); i++) { 307d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, 0); 308d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, dummy_check_cmds_nodev[i].arg, dm_arg); 309d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, %s, {version=4.1.2, data_size=%zu%s, " 310d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "flags=0}) = -1 EBADF (%m)\n", 311d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dummy_check_cmds_nodev[i].str, 312d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes min_sizeof_dm_ioctl, 313d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dummy_check_cmds_nodev[i].has_params ? 314d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ", data_start=0" : ""); 315d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes } 316d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 317d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 318d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_DEV_CREATE */ 319d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_DEV_REMOVE */ 320d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_DEV_STATUS */ 321d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_DEV_WAIT */ 322d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_TABLE_CLEAR */ 323d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_TABLE_DEPS */ 324d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_TABLE_STATUS */ 325d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes for (i = 0; i < ARRAY_SIZE(dummy_check_cmds); i++) { 326d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, 0); 327d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, dummy_check_cmds[i].arg, dm_arg); 328d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, %s, {version=4.1.2, data_size=%zu%s, " 329d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\"%s, " 330d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "flags=0}) = -1 EBADF (%m)\n", 331d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dummy_check_cmds[i].str, min_sizeof_dm_ioctl, 332d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dummy_check_cmds[i].has_params ? ", data_start=0" : "", 333d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dummy_check_cmds[i].has_event_nr ? ", event_nr=0" : ""); 334d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes } 335d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 336d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 337d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_DEV_SUSPEND */ 338d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&s.ioc, sizeof(s.ioc), 0); 339d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.flags = DM_SUSPEND_FLAG; 340d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.event_nr = 0xbadc0ded; 341d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_DEV_SUSPEND, &s); 342d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_DEV_SUSPEND, " 343d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, " 344d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", " 345d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "flags=DM_SUSPEND_FLAG}) = -1 EBADF (%m)\n", sizeof(s.ioc)); 346d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 347d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&s.ioc, sizeof(s.ioc), 0); 348d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.event_nr = 0xbadc0ded; 349d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_DEV_SUSPEND, &s); 350d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_DEV_SUSPEND, " 351d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, dev=makedev(18, 52), " 352d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "name=\"nnn\", uuid=\"uuu\", event_nr=3134983661, " 353d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "flags=0}) = -1 EBADF (%m)\n", sizeof(s.ioc)); 354d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 355d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 356d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_TABLE_LOAD */ 357d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&s.ioc, sizeof(s), offsetof(struct s, u)); 358d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.target_count = 1; 359d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.u.ts.target_spec.sector_start = 0x10; 360d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.u.ts.target_spec.length = 0x20; 361d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.u.ts.target_spec.next = 362d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes sizeof(s.u.ts.target_spec) + sizeof(s.u.ts.target_params); 363d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes strcpy(s.u.ts.target_spec.target_type, "tgt"); 364d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes strcpy(s.u.ts.target_params, "tparams"); 365d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_TABLE_LOAD, &s); 366d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TABLE_LOAD, " 367d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%u, data_start=%u, " 368d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", " 369d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "target_count=1, flags=0, " 370d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 371d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{sector_start=16, length=32, target_type=\"tgt\", " 372d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "string=\"tparams\"}" 373d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 374d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "..." 375d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 376d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "}) = -1 EBADF (%m)\n", s.ioc.data_size, s.ioc.data_start); 377d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 378d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* No targets */ 379d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, min_sizeof_dm_ioctl); 380d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->data_size = sizeof(*dm_arg); 381d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->target_count = 0; 382d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_TABLE_LOAD, dm_arg); 383d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TABLE_LOAD, " 384d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, data_start=%zu, " 385d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", " 386d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "target_count=0, flags=0}) = -1 EBADF (%m)\n", 387d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes sizeof(*dm_arg), min_sizeof_dm_ioctl); 388d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 389d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Invalid data_start */ 390d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, 0xfffffff8); 391d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->data_size = sizeof(*dm_arg); 392d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->target_count = 1234; 393d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_TABLE_LOAD, dm_arg); 394d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TABLE_LOAD, " 395d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, data_start=%u, " 396d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", " 397d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "target_count=1234, flags=0, " 398d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 39939bac055674d23770b9a724221b728e443196ea7Elliott Hughes "??? /* misplaced struct dm_target_spec */" 40039bac055674d23770b9a724221b728e443196ea7Elliott Hughes# else 401d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "..." 402d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 403d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "}) = -1 EBADF (%m)\n", sizeof(*dm_arg), 0xfffffff8); 404d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 405d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Inaccessible pointer */ 406d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&dm_arg_open1->ioc, offsetof(struct dm_table_open_test, target1), 407d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target1)); 408d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open1->ioc.data_size = sizeof(*dm_arg_open1); 409d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open1->ioc.target_count = 0xdeaddea1; 410d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_TABLE_LOAD, dm_arg_open1); 411d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TABLE_LOAD, " 412d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, data_start=%zu, " 413d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", " 414d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "target_count=3735936673, flags=0, " 415d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 416d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "%p" 417d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 418d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "..." 419d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 420d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "}) = -1 EBADF (%m)\n", sizeof(*dm_arg_open1), 421d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target1) 422d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 423d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes , (char *) dm_arg_open1 + 424d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target1) 425d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 426d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ); 427d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 428d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Inaccessible string */ 429d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&dm_arg_open2->ioc, offsetof(struct dm_table_open_test, param1), 430d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target1)); 431d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open2->ioc.data_size = sizeof(*dm_arg_open2); 432d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open2->ioc.target_count = 2; 433d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_dm_target_spec(&dm_arg_open2->target1, 7); 434d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open2->target1.next = 435d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target3) - 436d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target1); 437d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes rc = ioctl(-1, DM_TABLE_LOAD, dm_arg_open2); 438d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes errstr = sprintrc(rc); 439d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TABLE_LOAD, " 440d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, data_start=%zu, " 441d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", " 442d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "target_count=2, flags=0, ", 443d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes sizeof(*dm_arg_open2), 444d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target1)); 445d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 446d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes print_dm_target_spec(&dm_arg_open2->target1, 7); 447d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("%p}, %p", 448d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes (char *) dm_arg_open2 + 449d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, param1), 450d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes (char *) dm_arg_open2 + 451d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target3)); 452d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 453d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("..."); 454d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 455d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("}) = %s\n", errstr); 456d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 457d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Incorrect next */ 458d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&dm_arg_open3->ioc, offsetof(struct dm_table_open_test, target5), 459d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target0)); 460d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->ioc.target_count = 4; 461d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 462d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_dm_target_spec(&dm_arg_open3->target0, 9); 463d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->target0.next = 464d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target1) - 465d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target0); 466d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->param0[0] = '\0'; 467d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 468d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_dm_target_spec(&dm_arg_open3->target1, 15); 469d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->target1.next = 470d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target3) - 471d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target1); 472d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->param1[0] = '\377'; 473d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->param1[1] = '\0'; 474d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 475d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_dm_target_spec(&dm_arg_open3->target3, 42); 476d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->target3.next = 0xdeadbeef; 477d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->param3[0] = '\1'; 478d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->param3[1] = '\2'; 479d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->param3[2] = '\0'; 480d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 481d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes rc = ioctl(-1, DM_TABLE_LOAD, dm_arg_open3); 482d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes errstr = sprintrc(rc); 483d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TABLE_LOAD, " 484d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, data_start=%zu, " 485d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", " 486d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "target_count=4, flags=0, ", 487d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target5), 488d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target0)); 489d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 490d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes print_dm_target_spec(&dm_arg_open3->target0, 9); 491d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("\"\"}, "); 492d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes print_dm_target_spec(&dm_arg_open3->target1, 15); 493d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("\"\\377\"}, "); 494d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes print_dm_target_spec(&dm_arg_open3->target1, 42); 49539bac055674d23770b9a724221b728e443196ea7Elliott Hughes printf("\"\\1\\2\"}, ??? /* misplaced struct dm_target_spec */"); 496d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 497d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("..."); 498d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 499d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("}) = %s\n", errstr); 500d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 501d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes #define FILL_DM_TARGET(id, id_next) \ 502d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes do { \ 503d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_dm_target_spec(&dm_arg_open3->target##id, id); \ 504d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->target##id.next = \ 505d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, \ 506d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes target##id_next) - \ 507d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, \ 508d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes target##id); \ 509d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes strncpy(dm_arg_open3->param##id, str129 + id * 2, id); \ 510d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->param##id[id] = '\0'; \ 511d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes } while (0) 512d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes #define PRINT_DM_TARGET(id) \ 513d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes do { \ 514d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes print_dm_target_spec(&dm_arg_open3->target##id, id); \ 515d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("\"%.*s\"}, ", id, str129 + id * 2); \ 516d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes } while (0) 517d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 518d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* max_strlen limit */ 519d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&dm_arg_open3->ioc, offsetof(struct dm_table_open_test, target9), 520d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target0)); 521d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->ioc.data_size = sizeof(*dm_arg_open3); 522d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_open3->ioc.target_count = 0xbadc0ded; 523d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes FILL_DM_TARGET(0, 1); 524d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes FILL_DM_TARGET(1, 2); 525d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes FILL_DM_TARGET(2, 3); 526d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes FILL_DM_TARGET(3, 4); 527d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes FILL_DM_TARGET(4, 5); 528d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes FILL_DM_TARGET(5, 6); 529d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes FILL_DM_TARGET(6, 7); 530d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes FILL_DM_TARGET(7, 8); 531d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes FILL_DM_TARGET(8, 9); 532d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes rc = ioctl(-1, DM_TABLE_LOAD, dm_arg_open3); 533d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes errstr = sprintrc(rc); 534d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TABLE_LOAD, " 535d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, data_start=%zu, " 536d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", " 537d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "target_count=3134983661, flags=0, ", 538d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes sizeof(*dm_arg_open3), 539d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_table_open_test, target0)); 540d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 541d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes PRINT_DM_TARGET(0); 542d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes PRINT_DM_TARGET(1); 543d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes PRINT_DM_TARGET(2); 544d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes PRINT_DM_TARGET(3); 545d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes PRINT_DM_TARGET(4); 546d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes PRINT_DM_TARGET(5); 547d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes PRINT_DM_TARGET(6); 548d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes PRINT_DM_TARGET(7); 549d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes PRINT_DM_TARGET(8); 550d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 551d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("...}) = %s\n", errstr); 552d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 553d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 554d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_TARGET_MSG */ 555d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&s.ioc, sizeof(s), offsetof(struct s, u)); 556d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.u.tm.target_msg.sector = 0x1234; 557d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes strcpy(s.u.string + offsetof(struct dm_target_msg, message), 558d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "long target msg"); 559d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_TARGET_MSG, &s); 560d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TARGET_MSG, " 561d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%u, data_start=%u, " 562d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", flags=0, " 563d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 564d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{sector=4660, message=\"long targ\"...}" 565d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 566d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "..." 567d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 568d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "}) = -1 EBADF (%m)\n", 569d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.data_size, s.ioc.data_start); 570d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 571d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Invalid data_start */ 572d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, min_sizeof_dm_ioctl); 573d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->data_size = sizeof(*dm_arg); 574d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_TARGET_MSG, dm_arg); 575d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TARGET_MSG, " 576d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, data_start=%zu, " 577d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", flags=0, " 578d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 57939bac055674d23770b9a724221b728e443196ea7Elliott Hughes "??? /* misplaced struct dm_target_msg */" 580d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 581d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "..." 582d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 583d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "}) = -1 EBADF (%m)\n", 584d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes sizeof(*dm_arg), min_sizeof_dm_ioctl); 585d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 586d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Invalid data_start */ 587d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, 0xffffffff); 588d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->data_size = sizeof(*dm_arg); 589d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_TARGET_MSG, dm_arg); 590d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TARGET_MSG, " 591d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, data_start=%u, " 592d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", flags=0, " 593d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 59439bac055674d23770b9a724221b728e443196ea7Elliott Hughes "??? /* misplaced struct dm_target_msg */" 595d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 596d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "..." 597d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 598d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "}) = -1 EBADF (%m)\n", 599d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes sizeof(*dm_arg), 0xffffffff); 600d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 601d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Inaccessible pointer */ 602d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, 0); 603d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->data_size = sizeof(*dm_arg) + sizeof(struct dm_target_msg); 604d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->data_start = sizeof(*dm_arg); 605d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_TARGET_MSG, dm_arg); 606d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TARGET_MSG, " 607d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, data_start=%zu, " 608d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", flags=0, " 609d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 610d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "%p" 611d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 612d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "..." 613d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 614d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "}) = -1 EBADF (%m)\n", 615d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes sizeof(*dm_arg) + sizeof(struct dm_target_msg), 616d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes sizeof(*dm_arg) 617d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 618d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes , (char *) dm_arg + sizeof(*dm_arg) 619d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 620d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ); 621d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 622d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Inaccessible string */ 623d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&dm_arg_msg->ioc, sizeof(*dm_arg_msg), 624d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_target_msg_test, msg)); 625d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_msg->ioc.data_size = sizeof(*dm_arg_msg) + 1; 626d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_msg->msg.sector = (__u64) 0xdeadbeeffacef157ULL; 627d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes rc = ioctl(-1, DM_TARGET_MSG, dm_arg_msg); 628d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes errstr = sprintrc(rc); 629d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TARGET_MSG, " 630d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, data_start=%zu, " 631d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", flags=0, ", 632d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes sizeof(*dm_arg_msg) + 1, 633d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_target_msg_test, msg)); 634d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 635d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("{sector=%" PRI__u64 ", message=%p}", 636d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes (__u64) 0xdeadbeeffacef157ULL, 637d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes (char *) dm_arg_msg + 638d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_target_msg_test, msg.message)); 639d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 640d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("..."); 641d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 642d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("}) = %s\n", errstr); 643d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 644d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Zero-sied string */ 645d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&dm_arg_msg->ioc, sizeof(*dm_arg_msg), 646d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_target_msg_test, msg)); 647d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg_msg->msg.sector = (__u64) 0xdeadbeeffacef157ULL; 648d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes rc = ioctl(-1, DM_TARGET_MSG, dm_arg_msg); 649d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes errstr = sprintrc(rc); 650d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TARGET_MSG, " 651d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, data_start=%zu, " 652d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", flags=0, ", 653d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes sizeof(*dm_arg_msg), offsetof(struct dm_target_msg_test, msg)); 654d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 655d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("{sector=%" PRI__u64 ", message=\"\"}", 656d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes (__u64) 0xdeadbeeffacef157ULL); 657d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 658d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("..."); 659d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 660d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("}) = %s\n", errstr); 661d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 662d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 663d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_DEV_SET_GEOMETRY */ 664d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&s.ioc, sizeof(s), offsetof(struct s, u)); 665d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes strcpy(s.u.string, "10 20 30 40"); 666d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_DEV_SET_GEOMETRY, &s); 667d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_DEV_SET_GEOMETRY, " 668d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%u, data_start=%u, " 669d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", flags=0, " 670d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 671d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "string=\"10 20 30 \"..." 672d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 673d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "..." 674d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 675d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "}) = -1 EBADF (%m)\n", 676d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.data_size, s.ioc.data_start); 677d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 678d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 679d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_DEV_RENAME */ 680d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Inaccessible data */ 681d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(dm_arg, min_sizeof_dm_ioctl, min_sizeof_dm_ioctl); 682d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes dm_arg->data_size = sizeof(*dm_arg); 683d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes memcpy(unaligned_dm_arg, dm_arg, offsetof(struct dm_ioctl, data)); 684d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_DEV_RENAME, unaligned_dm_arg); 685d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_DEV_RENAME, " 686d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%zu, data_start=%zu, " 687d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", event_nr=0, " 688d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "flags=0, " 689d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 690d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "string=%p" 691d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 692d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "..." 693d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 694d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "}) = -1 EBADF (%m)\n", 695d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes sizeof(*unaligned_dm_arg), min_sizeof_dm_ioctl 696d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 697d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes , (char *) unaligned_dm_arg + min_sizeof_dm_ioctl 698d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 699d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ); 700d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 701d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Incorrect data_start data */ 702d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&s.ioc, sizeof(s), offsetof(struct s, u)); 703d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.data_start = 0xdeadbeef; 704d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_DEV_RENAME, &s); 705d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_DEV_RENAME, " 706d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%u, data_start=3735928559, " 707d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", event_nr=0, " 708d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "flags=0, " 709d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 71039bac055674d23770b9a724221b728e443196ea7Elliott Hughes "??? /* misplaced string */" 711d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 712d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "..." 713d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 714d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "}) = -1 EBADF (%m)\n", 715d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.data_size); 716d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 717d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Strange but still valid data_start */ 718d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&s.ioc, sizeof(s), offsetof(struct s, u)); 719d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Curiously, this is a valid structure */ 720d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.data_start = offsetof(struct dm_ioctl, name) + 1; 721d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_DEV_RENAME, &s); 722d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_DEV_RENAME, " 723d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%u, data_start=%zu, " 724d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", event_nr=0, " 725d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "flags=0, " 726d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 727d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "string=\"nn\"" 728d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 729d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "..." 730d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 731d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "}) = -1 EBADF (%m)\n", 732d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.data_size, 733d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes offsetof(struct dm_ioctl, name) + 1); 734d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 735d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* Correct data */ 736d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&s.ioc, sizeof(s), offsetof(struct s, u)); 737d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes strcpy(s.u.string, "new long name"); 738d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_DEV_RENAME, &s); 739d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_DEV_RENAME, " 740d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%u, data_start=%u, " 741d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", event_nr=0, " 742d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "flags=0, " 743d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 744d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "string=\"new long \"..." 745d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# else /* !VERBOSE */ 746d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "..." 747d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 748d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "}) = -1 EBADF (%m)\n", 749d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.data_size, s.ioc.data_start); 750d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 751d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 752d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes /* DM_TABLE_LOAD */ 753d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes init_s(&s.ioc, sizeof(s), offsetof(struct s, u)); 754d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.target_count = -1U; 755d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes ioctl(-1, DM_TABLE_LOAD, &s); 756d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes printf("ioctl(-1, DM_TABLE_LOAD, " 757d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "{version=4.1.2, data_size=%u, data_start=%u, " 758d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "dev=makedev(18, 52), name=\"nnn\", uuid=\"uuu\", " 759d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes "target_count=4294967295, flags=0, " 760d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# if VERBOSE 76139bac055674d23770b9a724221b728e443196ea7Elliott Hughes "{sector_start=0, length=0, target_type=\"\", string=\"\"}" 76239bac055674d23770b9a724221b728e443196ea7Elliott Hughes ", ??? /* misplaced struct dm_target_spec */" 76339bac055674d23770b9a724221b728e443196ea7Elliott Hughes# else 76439bac055674d23770b9a724221b728e443196ea7Elliott Hughes "..." 765d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes# endif /* VERBOSE */ 76639bac055674d23770b9a724221b728e443196ea7Elliott Hughes "}) = -1 EBADF (%m)\n", 767d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes s.ioc.data_size, s.ioc.data_start); 768d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 769d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes puts("+++ exited with 0 +++"); 770d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes return 0; 771d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes} 772d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 773d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#else /* !HAVE_LINUX_DM_IOCTL_H */ 774d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 775d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott HughesSKIP_MAIN_UNDEFINED("HAVE_LINUX_DM_IOCTL_H") 776d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes 777d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes#endif /* HAVE_LINUX_DM_IOCTL_H */ 778