move away from syscall counts towards operation counts
[trinity.git] / ioctls / dm.c
blobb843b70d2242e9c1d2ddd58b4d7bf19566263d7e
1 #include <linux/ioctl.h>
2 #include <linux/dm-ioctl.h>
4 #include "shm.h"
5 #include "maps.h"
6 #include "utils.h"
7 #include "ioctls.h"
8 #include "random.h"
10 static const struct ioctl dm_ioctls[] = {
11 IOCTL(DM_VERSION),
12 IOCTL(DM_REMOVE_ALL),
13 IOCTL(DM_LIST_DEVICES),
14 IOCTL(DM_DEV_CREATE),
15 IOCTL(DM_DEV_REMOVE),
16 IOCTL(DM_DEV_RENAME),
17 IOCTL(DM_DEV_SUSPEND),
18 IOCTL(DM_DEV_STATUS),
19 IOCTL(DM_DEV_WAIT),
20 IOCTL(DM_TABLE_LOAD),
21 IOCTL(DM_TABLE_CLEAR),
22 IOCTL(DM_TABLE_DEPS),
23 IOCTL(DM_TABLE_STATUS),
24 IOCTL(DM_LIST_VERSIONS),
25 IOCTL(DM_TARGET_MSG),
26 IOCTL(DM_DEV_SET_GEOMETRY),
29 static const char *const dm_devs[] = {
30 "device-mapper",
33 static void dm_sanitise(const struct ioctl_group *grp, int childno)
35 struct dm_ioctl *dm;
37 pick_random_ioctl(grp, childno);
39 shm->syscall[childno].a3 = (unsigned long) page_rand;
40 dm = (struct dm_ioctl *)shm->syscall[childno].a3;
42 /* set a sensible version to get past the initial checks */
43 dm->version[0] = DM_VERSION_MAJOR;
44 dm->version[1] = DM_VERSION_MINOR;
45 dm->version[2] = DM_VERSION_PATCHLEVEL;
47 /* clear one of these strings to pass some kernel validation */
48 if (rand_bool())
49 dm->name[0] = 0;
50 else
51 dm->uuid[0] = 0;
54 static const struct ioctl_group dm_grp_misc = {
55 .devtype = DEV_MISC,
56 .devs = dm_devs,
57 .devs_cnt = ARRAY_SIZE(dm_devs),
58 .sanitise = dm_sanitise,
59 .ioctls = dm_ioctls,
60 .ioctls_cnt = ARRAY_SIZE(dm_ioctls),
63 REG_IOCTL_GROUP(dm_grp_misc)
65 static const struct ioctl_group dm_grp_block = {
66 .devtype = DEV_BLOCK,
67 .devs = dm_devs,
68 .devs_cnt = ARRAY_SIZE(dm_devs),
69 .sanitise = dm_sanitise,
70 .ioctls = dm_ioctls,
71 .ioctls_cnt = ARRAY_SIZE(dm_ioctls),
74 REG_IOCTL_GROUP(dm_grp_block)