aboutsummaryrefslogtreecommitdiffstats
path: root/sys/netbsd/ipc.txt
blob: 843004d19f3cd167ebc4d39c8745cbcb7cac4900 (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
# Copyright 2017 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 <sys/types.h>
include <sys/fcntl.h>
include <sys/stat.h>
include <sys/ipc.h>
include <sys/shm.h>
include <sys/msg.h>
include <sys/sem.h>

resource ipc[int32]: 0, 0xffffffffffffffff

# TODO: describe ipc syscall

define SYS_____semctl50	442

resource ipc_msq[ipc]
msgget(key proc[2039379027, 4], flags flags[msgget_flags]) ipc_msq
msgget$private(key const[IPC_PRIVATE], flags flags[msgget_flags]) ipc_msq
msgsnd(msqid ipc_msq, msgp ptr[in, msgbuf], sz len[msgp], flags flags[msgsnd_flags])
msgrcv(msqid ipc_msq, msgp ptr[out, msgbuf], sz len[msgp], typ flags[msgbuf_type], flags flags[msgrcv_flags])
msgctl$IPC_STAT(msqid ipc_msq, cmd const[IPC_STAT], buf buffer[out])
msgctl$IPC_SET(msqid ipc_msq, cmd const[IPC_SET], buf ptr[in, msqid_ds])
msgctl$IPC_RMID(msqid ipc_msq, cmd const[IPC_RMID])
compat_14_msgctl$IPC_STAT(msqid ipc_msq, cmd const[IPC_STAT], buf ptr[out, msqid_ds14])
compat_14_msgctl$IPC_SET(msqid ipc_msq, cmd const[IPC_SET], buf ptr[in, msqid_ds14])
compat_14_msgctl$IPC_RMID(msqid ipc_msq, cmd const[IPC_RMID])
compat_50___msgctl13$IPC_STAT(msqid ipc_msq, cmd const[IPC_STAT], buf ptr[out, msqid_ds13])
compat_50___msgctl13$IPC_SET(msqid ipc_msq, cmd const[IPC_SET], buf ptr[in, msqid_ds13])
compat_50___msgctl13$IPC_RMID(msqid ipc_msq, cmd const[IPC_RMID])

resource ipc_sem[ipc]
semget(key proc[2039359027, 4], nsems flags[sem_sem_id], flags flags[semget_flags]) ipc_sem
semget$private(key const[IPC_PRIVATE], nsems flags[sem_sem_id], flags flags[semget_flags]) ipc_sem
semop(semid ipc_sem, ops ptr[in, array[sembuf]], nops len[ops])
semctl$IPC_STAT(semid ipc_sem, semnum const[0], cmd const[IPC_STAT], arg buffer[out])
semctl$IPC_SET(semid ipc_sem, semnum const[0], cmd const[IPC_SET], arg ptr[in, semid_ds])
semctl$IPC_RMID(semid ipc_sem, semnum const[0], cmd const[IPC_RMID])
semctl$GETALL(semid ipc_sem, semnum const[0], cmd const[GETALL], arg buffer[out])
semctl$GETNCNT(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETNCNT], arg buffer[out])
semctl$GETPID(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETPID], arg buffer[out])
semctl$GETVAL(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETVAL], arg buffer[out])
semctl$GETZCNT(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETZCNT], arg buffer[out])
semctl$SETALL(semid ipc_sem, semnum const[0], cmd const[SETALL], arg ptr[in, array[int16]])
semctl$SETVAL(semid ipc_sem, semnum flags[sem_sem_id], cmd const[SETVAL], arg ptr[in, int32])
compat_14___semctl$IPC_STAT(semid ipc_sem, semnum const[0], cmd const[IPC_STAT], arg ptr[out, __semun])
compat_14___semctl$IPC_SET(semid ipc_sem, semnum const[0], cmd const[IPC_SET], arg ptr[in, __semun])
compat_14___semctl$IPC_RMID(semid ipc_sem, semnum const[0], cmd const[IPC_RMID])
compat_14___semctl$SETALL(semid ipc_sem, semnum const[0], cmd const[SETALL], arg ptr[in, __semun])
compat_14___semctl$GETALL(semid ipc_sem, semnum const[0], cmd const[GETALL], arg ptr[out, __semun])
compat_14___semctl$GETZCNT(semid ipc_sem, semnum const[0], cmd const[GETZCNT])
compat_14___semctl$GETNCNT(semid ipc_sem, semnum const[0], cmd const[GETNCNT])
compat_14___semctl$GETPID(semid ipc_sem, semnum const[0], cmd const[GETPID])
compat_14___semctl$SETVAL(semid ipc_sem, semnum const[0], cmd const[SETVAL], arg ptr[in, __semun])
compat_14___semctl$GETVAL(semid ipc_sem, semnum const[0], cmd const[GETVAL])
compat_50_____semctl13$IPC_STAT(semid ipc_sem, semnum const[0], cmd const[IPC_STAT], arg ptr[out, __semun])
compat_50_____semctl13$IPC_SET(semid ipc_sem, semnum const[0], cmd const[IPC_SET], arg ptr[in, __semun])
compat_50_____semctl13$IPC_RMID(semid ipc_sem, semnum const[0], cmd const[IPC_RMID])
compat_50_____semctl13$SETALL(semid ipc_sem, semnum const[0], cmd const[SETALL], arg ptr[in, __semun])
compat_50_____semctl13$GETALL(semid ipc_sem, semnum const[0], cmd const[GETALL], arg ptr[out, __semun])
compat_50_____semctl13$GETZCNT(semid ipc_sem, semnum const[0], cmd const[GETZCNT])
compat_50_____semctl13$GETNCNT(semid ipc_sem, semnum const[0], cmd const[GETNCNT])
compat_50_____semctl13$GETPID(semid ipc_sem, semnum const[0], cmd const[GETPID])
compat_50_____semctl13$SETVAL(semid ipc_sem, semnum const[0], cmd const[SETVAL], arg ptr[in, __semun])
compat_50_____semctl13$GETVAL(semid ipc_sem, semnum const[0], cmd const[GETVAL])
____semctl50$IPC_STAT(semid ipc_sem, semnum const[0], cmd const[IPC_STAT], arg ptr[out, __semun])
____semctl50$IPC_SET(semid ipc_sem, semnum const[0], cmd const[IPC_SET], arg ptr[in, __semun])
____semctl50$IPC_RMID(semid ipc_sem, semnum const[0], cmd const[IPC_RMID])
____semctl50$SETALL(semid ipc_sem, semnum const[0], cmd const[SETALL], arg ptr[in, __semun])
____semctl50$GETALL(semid ipc_sem, semnum const[0], cmd const[GETALL], arg ptr[out, __semun])
____semctl50$GETZCNT(semid ipc_sem, semnum const[0], cmd const[GETZCNT])
____semctl50$GETNCNT(semid ipc_sem, semnum const[0], cmd const[GETNCNT])
____semctl50$GETPID(semid ipc_sem, semnum const[0], cmd const[GETPID])
____semctl50$SETVAL(semid ipc_sem, semnum const[0], cmd const[SETVAL], arg ptr[in, __semun])
____semctl50$GETVAL(semid ipc_sem, semnum const[0], cmd const[GETVAL])

resource ipc_shm[ipc]
resource shmaddr[intptr]: 0
# The unused arg is unused by syscall (does not exist at all),
# but it helps to generate sane size values.
shmget(key proc[2039339027, 4], size len[unused], flags flags[shmget_flags], unused vma) ipc_shm
shmget$private(key const[IPC_PRIVATE], size len[unused], flags flags[shmget_flags], unused vma) ipc_shm
shmat(shmid ipc_shm, addr vma, flags flags[shmat_flags]) shmaddr
shmctl$IPC_STAT(shmid ipc_shm, cmd const[IPC_STAT], buf buffer[out])
shmctl$IPC_SET(shmid ipc_shm, cmd const[IPC_SET], buf ptr[in, shmid_ds])
shmctl$IPC_RMID(shmid ipc_shm, cmd const[IPC_RMID])
shmctl$SHM_LOCK(shmid ipc_shm, cmd const[SHM_LOCK])
shmctl$SHM_UNLOCK(shmid ipc_shm, cmd const[SHM_UNLOCK])
shmdt(addr shmaddr)
compat_14_shmctl$IPC_STAT(shmid ipc_shm, cmd const[IPC_STAT], buf ptr[out, shmid_ds14])
compat_14_shmctl$IPC_SET(shmid ipc_shm, cmd const[IPC_SET], buf ptr[in, shmid_ds14])
compat_14_shmctl$IPC_RMID(shmid ipc_shm, cmd const[IPC_RMID])
compat_14_shmctl$SHM_LOCK(shmid ipc_shm, cmd const[SHM_LOCK])
compat_14_shmctl$SHM_UNLOCK(shmid ipc_shm, cmd const[SHM_UNLOCK])
compat_50___shmctl13$IPC_STAT(shmid ipc_shm, cmd const[IPC_STAT], buf ptr[out, shmid_ds13])
compat_50___shmctl13$IPC_SET(shmid ipc_shm, cmd const[IPC_SET], buf ptr[in, shmid_ds13])
compat_50___shmctl13$IPC_RMID(shmid ipc_shm, cmd const[IPC_RMID])
compat_50___shmctl13$SHM_LOCK(shmid ipc_shm, cmd const[SHM_LOCK])
compat_50___shmctl13$SHM_UNLOCK(shmid ipc_shm, cmd const[SHM_UNLOCK])

msgget_flags = IPC_CREAT, IPC_EXCL, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH
msgbuf_type = 0, 1, 2, 3
msgsnd_flags = IPC_NOWAIT
msgrcv_flags = IPC_NOWAIT, MSG_NOERROR
semget_flags = IPC_CREAT, IPC_EXCL, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH
semop_flags = IPC_NOWAIT, SEM_UNDO
sem_sem_id = 0, 1, 2, 3, 4
shmget_flags = IPC_CREAT, IPC_EXCL, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH
shmat_flags = SHM_RND, SHM_RDONLY

ipc_perm {
	key	int32
	uid	uid
	gid	gid
	cuid	uid
	cgid	gid
	mode	flags[open_mode, int32]
	seq	int16
	pad0	const[0, int16]
	pad1	const[0, intptr]
	pad2	const[0, intptr]
}

msqid_ds {
	perm	ipc_perm
	qnum	intptr
	qbytes	intptr
	lspid	pid
	lrpid	pid
	stime	intptr
	rtime	intptr
	ctime	intptr
	cbytes	intptr
	pad0	const[0, intptr]
	pad1	const[0, intptr]
}

shmid_ds {
	perm	ipc_perm
	segsz	int32
	nattch	int16
	cpid	pid
	lpid	pid
	atime	intptr
	dtime	intptr
	ctime	intptr
	unused0	const[0, int16]
	unused1	const[0, intptr]
	unused2	const[0, intptr]
}

semid_ds {
	perm	ipc_perm
	otime	intptr
	ctime	intptr
	nsems	intptr
	pad0	const[0, intptr]
	pad1	const[0, intptr]
}

sembuf {
	num	flags[sem_sem_id, int16]
	op	int16
	flg	flags[semop_flags, int16]
}

msgbuf {
	typ	flags[msgbuf_type, intptr]
	data	array[int8]
} [packed]

shmid_ds14 {
	shm_perm	ipc_perm14
	shm_segsz	int32
	shm_lpid	int32
	shm_cpid	int32
	shm_nattch	int16
	shm_atime	int32
	shm_dtime	int32
	shm_ctime	int32
	shm_internal	buffer[in]
}

shmid_ds13 {
	shm_perm	ipc_perm
	shm_segsz	intptr
	shm_lpid	int32
	shm_cpid	int32
	shm_nattch	int32
	shm_atime	intptr
	shm_dtime	intptr
	shm_ctime	intptr
	_shm_internal	buffer[in]
}

semid_ds13 {
	sem_perm	ipc_perm13
	sem_nsems	int16
	sem_otime	intptr
	sem_ctime	intptr
	_sem_base	ptr[inout, __sem]
}

ipc_perm13 {
	uid	uid
	gid	gid
	cuid	int32
	cgid	int32
	mode	flags[open_mode, int32]
	_seq	int16
	_key	intptr
}

__sem {
	semval	int16
	sempid	int32
	semncnt	int16
	semzcnt	int16
}

__semun [
	val	int32
	buf	ptr[inout, semid_ds13]
	array	ptr[inout, int16]
]

msqid_ds14 {
	msg_perm	ipc_perm14
	msg_first	ptr[inout, __msg]
	msg_last	ptr[inout, __msg]
	msg_cbytes	intptr
	msg_qnum	intptr
	msg_qbytes	intptr
	msg_lspid	int32
	msg_lrpid	int32
	msg_stime	int32
	msg_pad1	const[0, intptr]
	msg_rtime	int32
	msg_pad2	const[0, intptr]
	msg_ctime	int32
	msg_pad3	const[0, intptr]
	msg_pad4	array[intptr, 4]
}

msqid_ds13 {
	msg_perm	ipc_perm
	msg_qnum	intptr
	msg_qbytes	intptr
	msg_lspid	int32
	msg_lrpid	int32
	msg_stime	intptr
	msg_rtime	intptr
	msg_ctime	intptr
	_msg_first	ptr[in, __msg]
	_msg_last	ptr[in, __msg]
	_msg_cbytes	intptr
}

ipc_perm14 {
	cuid	int16
	cgid	int16
	uid	int16
	gid	int16
	mode	flags[open_mode, int16]
	seq	int16
	key	intptr
}

__msg {
	msg_next	ptr[inout, __msg, opt]
	msg_type	intptr
	msg_ts		int16
	msg_spot	int16
}