aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/uffd.txt
blob: 4bed725128aa58a9bc7692eb6b37c06928acb577 (plain)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# Copyright 2018 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

include <uapi/linux/ioctl.h>
include <uapi/linux/fcntl.h>
include <uapi/linux/userfaultfd.h>

resource fd_uffd[fd]
resource fd_uffd_dev[fd]

userfaultfd(flags flags[userfaultfd_flags]) fd_uffd
openat$userfaultfd(fd const[AT_FDCWD], file ptr[in, string["/dev/userfaultfd"]], flags flags[userfaultfd_flags], mode const[0]) fd_uffd_dev

ioctl$UFFDIO_API(fd fd_uffd, cmd const[UFFDIO_API], arg ptr[in, uffdio_api])
ioctl$UFFDIO_REGISTER(fd fd_uffd, cmd const[UFFDIO_REGISTER], arg ptr[in, uffdio_register])
ioctl$UFFDIO_UNREGISTER(fd fd_uffd, cmd const[UFFDIO_UNREGISTER], arg ptr[in, uffdio_range])
ioctl$UFFDIO_WAKE(fd fd_uffd, cmd const[UFFDIO_WAKE], arg ptr[in, uffdio_range])
ioctl$UFFDIO_COPY(fd fd_uffd, cmd const[UFFDIO_COPY], arg ptr[in, uffdio_copy])
ioctl$UFFDIO_ZEROPAGE(fd fd_uffd, cmd const[UFFDIO_ZEROPAGE], arg ptr[in, uffdio_zeropage])
ioctl$UFFDIO_MOVE(fd fd_uffd, cmd const[UFFDIO_MOVE], arg ptr[in, uffdio_move])
ioctl$UFFDIO_WRITEPROTECT(fd fd_uffd, cmd const[UFFDIO_WRITEPROTECT], arg ptr[in, uffdio_writeprotect])
ioctl$UFFDIO_CONTINUE(fd fd_uffd, cmd const[UFFDIO_CONTINUE], arg ptr[in, uffdio_continue])
ioctl$UFFDIO_POISON(fd fd_uffd, cmd const[UFFDIO_POISON], arg ptr[in, uffdio_poison])

ioctl$USERFAULTFD_IOC_NEW(fd fd_uffd_dev, cmd const[USERFAULTFD_IOC_NEW]) fd_uffd

userfaultfd_flags = O_NONBLOCK, O_CLOEXEC, UFFD_USER_MODE_ONLY
uffdio_register_mode = UFFDIO_REGISTER_MODE_MISSING, UFFDIO_REGISTER_MODE_WP, UFFDIO_REGISTER_MODE_MINOR
uffdio_copy_mode = UFFDIO_COPY_MODE_DONTWAKE, UFFDIO_COPY_MODE_WP
uffdio_zero_mode = UFFDIO_ZEROPAGE_MODE_DONTWAKE
uffdio_features = UFFD_FEATURE_PAGEFAULT_FLAG_WP, UFFD_FEATURE_EVENT_FORK, UFFD_FEATURE_EVENT_REMAP, UFFD_FEATURE_EVENT_REMOVE, UFFD_FEATURE_MISSING_HUGETLBFS, UFFD_FEATURE_MISSING_SHMEM, UFFD_FEATURE_EVENT_UNMAP, UFFD_FEATURE_SIGBUS, UFFD_FEATURE_THREAD_ID, UFFD_FEATURE_MINOR_HUGETLBFS, UFFD_FEATURE_MINOR_SHMEM

uffdio_api {
	api	const[UFFD_API, int64]
	featur	flags[uffdio_features, int64]
	ioctls	const[0, int64]
}

uffdio_range {
	start	vma64
	len	len[start, int64]
}

uffdio_register {
	range	uffdio_range
	mode	flags[uffdio_register_mode, int64]
	ioctls	const[0, int64]
}

uffdio_copy {
	dst	vma64
	src	vma64
	len	len[dst, int64]
	mode	flags[uffdio_copy_mode, int64]
	copy	const[0, int64]
}

uffdio_zeropage {
	range	uffdio_range
	mode	flags[uffdio_zero_mode, int64]
	zeropg	const[0, int64]
}

uffdio_move {
	dst	vma64
	src	vma64
	len	len[dst, int64]
	mode	flags[uffdio_move_mode, int64]
	move	int64	(out)
}

uffdio_move_mode = UFFDIO_MOVE_MODE_DONTWAKE, UFFDIO_MOVE_MODE_ALLOW_SRC_HOLES

uffdio_writeprotect {
	range	uffdio_range
	mode	flags[uffdio_writeprotect_mode, int64]
}

uffdio_writeprotect_mode = UFFDIO_WRITEPROTECT_MODE_WP, UFFDIO_WRITEPROTECT_MODE_DONTWAKE

uffdio_continue {
	range	uffdio_range
	mode	flags[uffdio_continue_mode, int64]
	mapped	int64	(out)
}

uffdio_continue_mode = UFFDIO_CONTINUE_MODE_DONTWAKE

uffdio_poison {
	range	uffdio_range
	mode	flags[uffdio_poison_mode, int64]
	updated	int64	(out)
}

uffdio_poison_mode = UFFDIO_POISON_MODE_DONTWAKE