[go: up one dir, main page]

File: dm.c

package info (click to toggle)
trinity 1.3-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 3,252 kB
  • ctags: 2,738
  • sloc: ansic: 24,011; sh: 322; makefile: 141
file content (74 lines) | stat: -rw-r--r-- 1,644 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <linux/ioctl.h>
#include <linux/dm-ioctl.h>

#include "shm.h"
#include "maps.h"
#include "utils.h"
#include "ioctls.h"
#include "random.h"

static const struct ioctl dm_ioctls[] = {
	IOCTL(DM_VERSION),
	IOCTL(DM_REMOVE_ALL),
	IOCTL(DM_LIST_DEVICES),
	IOCTL(DM_DEV_CREATE),
	IOCTL(DM_DEV_REMOVE),
	IOCTL(DM_DEV_RENAME),
	IOCTL(DM_DEV_SUSPEND),
	IOCTL(DM_DEV_STATUS),
	IOCTL(DM_DEV_WAIT),
	IOCTL(DM_TABLE_LOAD),
	IOCTL(DM_TABLE_CLEAR),
	IOCTL(DM_TABLE_DEPS),
	IOCTL(DM_TABLE_STATUS),
	IOCTL(DM_LIST_VERSIONS),
	IOCTL(DM_TARGET_MSG),
	IOCTL(DM_DEV_SET_GEOMETRY),
};

static const char *const dm_devs[] = {
	"device-mapper",
};

static void dm_sanitise(const struct ioctl_group *grp, int childno)
{
	struct dm_ioctl *dm;

	pick_random_ioctl(grp, childno);

	shm->a3[childno] = (unsigned long) page_rand;
	dm = (struct dm_ioctl *)shm->a3[childno];

	/* set a sensible version to get past the initial checks */
	dm->version[0] = DM_VERSION_MAJOR;
	dm->version[1] = DM_VERSION_MINOR;
	dm->version[2] = DM_VERSION_PATCHLEVEL;

	/* clear one of these strings to pass some kernel validation */
	if (rand_bool())
		dm->name[0] = 0;
	else
		dm->uuid[0] = 0;
}

static const struct ioctl_group dm_grp_misc = {
	.devtype = DEV_MISC,
	.devs = dm_devs,
	.devs_cnt = ARRAY_SIZE(dm_devs),
	.sanitise = dm_sanitise,
	.ioctls = dm_ioctls,
	.ioctls_cnt = ARRAY_SIZE(dm_ioctls),
};

REG_IOCTL_GROUP(dm_grp_misc)

static const struct ioctl_group dm_grp_block = {
	.devtype = DEV_BLOCK,
	.devs = dm_devs,
	.devs_cnt = ARRAY_SIZE(dm_devs),
	.sanitise = dm_sanitise,
	.ioctls = dm_ioctls,
	.ioctls_cnt = ARRAY_SIZE(dm_ioctls),
};

REG_IOCTL_GROUP(dm_grp_block)