xref: /freebsd/sys/security/mac_test/mac_test.c (revision 716dfa4cb85cd32e18ed3a8b01404f7c540bbf6d)
1 /*-
2  * Copyright (c) 1999-2002 Robert N. M. Watson
3  * Copyright (c) 2001-2005 McAfee, Inc.
4  * All rights reserved.
5  *
6  * This software was developed by Robert Watson for the TrustedBSD Project.
7  *
8  * This software was developed for the FreeBSD Project in part by McAfee
9  * Research, the Security Research Division of McAfee, Inc. under
10  * DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the DARPA
11  * CHATS research program.
12  *
13  * Redistribution and use in source and binary forms, with or without
14  * modification, are permitted provided that the following conditions
15  * are met:
16  * 1. Redistributions of source code must retain the above copyright
17  *    notice, this list of conditions and the following disclaimer.
18  * 2. Redistributions in binary form must reproduce the above copyright
19  *    notice, this list of conditions and the following disclaimer in the
20  *    documentation and/or other materials provided with the distribution.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32  * SUCH DAMAGE.
33  *
34  * $FreeBSD$
35  */
36 
37 /*
38  * Developed by the TrustedBSD Project.
39  * Generic mandatory access module that does nothing.
40  */
41 
42 #include <sys/types.h>
43 #include <sys/param.h>
44 #include <sys/acl.h>
45 #include <sys/conf.h>
46 #include <sys/kdb.h>
47 #include <sys/extattr.h>
48 #include <sys/kernel.h>
49 #include <sys/mac.h>
50 #include <sys/malloc.h>
51 #include <sys/mount.h>
52 #include <sys/proc.h>
53 #include <sys/systm.h>
54 #include <sys/sysproto.h>
55 #include <sys/sysent.h>
56 #include <sys/vnode.h>
57 #include <sys/file.h>
58 #include <sys/socket.h>
59 #include <sys/socketvar.h>
60 #include <sys/sysctl.h>
61 #include <sys/msg.h>
62 #include <sys/sem.h>
63 #include <sys/shm.h>
64 
65 #include <posix4/ksem.h>
66 
67 #include <fs/devfs/devfs.h>
68 
69 #include <net/bpfdesc.h>
70 #include <net/if.h>
71 #include <net/if_types.h>
72 #include <net/if_var.h>
73 
74 #include <vm/vm.h>
75 
76 #include <sys/mac_policy.h>
77 
78 SYSCTL_DECL(_security_mac);
79 
80 SYSCTL_NODE(_security_mac, OID_AUTO, test, CTLFLAG_RW, 0,
81     "TrustedBSD mac_test policy controls");
82 
83 static int	mac_test_enabled = 1;
84 SYSCTL_INT(_security_mac_test, OID_AUTO, enabled, CTLFLAG_RW,
85     &mac_test_enabled, 0, "Enforce test policy");
86 
87 #define	BPFMAGIC	0xfe1ad1b6
88 #define	DEVFSMAGIC	0x9ee79c32
89 #define	IFNETMAGIC	0xc218b120
90 #define	INPCBMAGIC	0x4440f7bb
91 #define	IPQMAGIC	0x206188ef
92 #define	MBUFMAGIC	0xbbefa5bb
93 #define	MOUNTMAGIC	0xc7c46e47
94 #define	SOCKETMAGIC	0x9199c6cd
95 #define	SYSVIPCMSQMAGIC	0xea672391
96 #define	SYSVIPCMSGMAGIC	0x8bbba61e
97 #define	SYSVIPCSEMMAGIC	0x896e8a0b
98 #define	SYSVIPCSHMMAGIC	0x76119ab0
99 #define	PIPEMAGIC	0xdc6c9919
100 #define	POSIXSEMMAGIC	0x78ae980c
101 #define	PROCMAGIC	0x3b4be98f
102 #define	CREDMAGIC	0x9a5a4987
103 #define	VNODEMAGIC	0x1a67a45c
104 #define	EXMAGIC		0x849ba1fd
105 
106 #define	SLOT(x)	LABEL_TO_SLOT((x), test_slot).l_long
107 
108 #define	ASSERT_BPF_LABEL(x)	KASSERT(SLOT(x) == BPFMAGIC ||		\
109 	SLOT(x) == 0, ("%s: Bad BPF label", __func__ ))
110 #define	ASSERT_DEVFS_LABEL(x)	KASSERT(SLOT(x) == DEVFSMAGIC ||	\
111 	SLOT(x) == 0, ("%s: Bad DEVFS label", __func__ ))
112 #define	ASSERT_IFNET_LABEL(x)	KASSERT(SLOT(x) == IFNETMAGIC ||	\
113 	SLOT(x) == 0, ("%s: Bad IFNET label", __func__ ))
114 #define	ASSERT_INPCB_LABEL(x)	KASSERT(SLOT(x) == INPCBMAGIC ||	\
115 	SLOT(x) == 0, ("%s: Bad INPCB label", __func__ ))
116 #define	ASSERT_IPQ_LABEL(x)	KASSERT(SLOT(x) == IPQMAGIC ||	\
117 	SLOT(x) == 0, ("%s: Bad IPQ label", __func__ ))
118 #define	ASSERT_MBUF_LABEL(x)	KASSERT(x == NULL ||			\
119 	SLOT(x) == MBUFMAGIC ||	SLOT(x) == 0,				\
120 	("%s: Bad MBUF label", __func__ ))
121 #define	ASSERT_MOUNT_LABEL(x)	KASSERT(SLOT(x) == MOUNTMAGIC ||	\
122 	SLOT(x) == 0, ("%s: Bad MOUNT label", __func__ ))
123 #define	ASSERT_SOCKET_LABEL(x)	KASSERT(SLOT(x) == SOCKETMAGIC ||	\
124 	SLOT(x) == 0, ("%s: Bad SOCKET label", __func__ ))
125 #define	ASSERT_SYSVIPCMSQ_LABEL(x) KASSERT(SLOT(x) == SYSVIPCMSQMAGIC || \
126 	SLOT(x) == 0, ("%s: Bad SYSVIPCMSQ label", __func__ ))
127 #define	ASSERT_SYSVIPCMSG_LABEL(x) KASSERT(SLOT(x) == SYSVIPCMSGMAGIC || \
128 	SLOT(x) == 0, ("%s: Bad SYSVIPCMSG label", __func__ ))
129 #define	ASSERT_SYSVIPCSEM_LABEL(x) KASSERT(SLOT(x) == SYSVIPCSEMMAGIC || \
130 	SLOT(x) == 0, ("%s: Bad SYSVIPCSEM label", __func__ ))
131 #define	ASSERT_SYSVIPCSHM_LABEL(x) KASSERT(SLOT(x) == SYSVIPCSHMMAGIC || \
132 	SLOT(x) == 0, ("%s: Bad SYSVIPCSHM label", __func__ ))
133 #define	ASSERT_PIPE_LABEL(x)	KASSERT(SLOT(x) == PIPEMAGIC ||		\
134 	SLOT(x) == 0, ("%s: Bad PIPE label", __func__ ))
135 #define	ASSERT_POSIX_LABEL(x)	KASSERT(SLOT(x) == POSIXSEMMAGIC ||	\
136 	SLOT(x) == 0, ("%s: Bad POSIX ksem label", __func__ ))
137 #define	ASSERT_PROC_LABEL(x)	KASSERT(SLOT(x) == PROCMAGIC ||		\
138 	SLOT(x) == 0, ("%s: Bad PROC label", __func__ ))
139 #define	ASSERT_CRED_LABEL(x)	KASSERT(SLOT(x) == CREDMAGIC ||		\
140 	SLOT(x) == 0, ("%s: Bad CRED label", __func__ ))
141 #define	ASSERT_VNODE_LABEL(x)	KASSERT(SLOT(x) == VNODEMAGIC ||	\
142 	SLOT(x) == 0, ("%s: Bad VNODE label", __func__ ))
143 
144 static int	test_slot;
145 SYSCTL_INT(_security_mac_test, OID_AUTO, slot, CTLFLAG_RD,
146     &test_slot, 0, "Slot allocated by framework");
147 
148 static int	init_count_bpfdesc;
149 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_bpfdesc, CTLFLAG_RD,
150     &init_count_bpfdesc, 0, "bpfdesc init calls");
151 static int	init_count_cred;
152 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_cred, CTLFLAG_RD,
153     &init_count_cred, 0, "cred init calls");
154 static int	init_count_devfsdirent;
155 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_devfsdirent, CTLFLAG_RD,
156     &init_count_devfsdirent, 0, "devfsdirent init calls");
157 static int	init_count_ifnet;
158 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_ifnet, CTLFLAG_RD,
159     &init_count_ifnet, 0, "ifnet init calls");
160 static int	init_count_inpcb;
161 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_inpcb, CTLFLAG_RD,
162     &init_count_inpcb, 0, "inpcb init calls");
163 static int	init_count_sysv_msg;
164 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_sysv_msg, CTLFLAG_RD,
165     &init_count_sysv_msg, 0, "ipc_msg init calls");
166 static int	init_count_sysv_msq;
167 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_sysv_msq, CTLFLAG_RD,
168     &init_count_sysv_msq, 0, "ipc_msq init calls");
169 static int	init_count_sysv_sem;
170 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_sysv_sem, CTLFLAG_RD,
171     &init_count_sysv_sem, 0, "ipc_sema init calls");
172 static int	init_count_sysv_shm;
173 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_sysv_shm, CTLFLAG_RD,
174     &init_count_sysv_shm, 0, "ipc_shm init calls");
175 static int	init_count_ipq;
176 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_ipq, CTLFLAG_RD,
177     &init_count_ipq, 0, "ipq init calls");
178 static int	init_count_mbuf;
179 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_mbuf, CTLFLAG_RD,
180     &init_count_mbuf, 0, "mbuf init calls");
181 static int	init_count_mount;
182 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_mount, CTLFLAG_RD,
183     &init_count_mount, 0, "mount init calls");
184 static int	init_count_mount_fslabel;
185 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_mount_fslabel, CTLFLAG_RD,
186     &init_count_mount_fslabel, 0, "mount_fslabel init calls");
187 static int	init_count_socket;
188 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_socket, CTLFLAG_RD,
189     &init_count_socket, 0, "socket init calls");
190 static int	init_count_socket_peerlabel;
191 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_socket_peerlabel,
192     CTLFLAG_RD, &init_count_socket_peerlabel, 0,
193     "socket_peerlabel init calls");
194 static int	init_count_pipe;
195 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_pipe, CTLFLAG_RD,
196     &init_count_pipe, 0, "pipe init calls");
197 static int	init_count_posixsems;
198 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_posixsems, CTLFLAG_RD,
199     &init_count_posixsems, 0, "posix sems init calls");
200 static int	init_count_proc;
201 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_proc, CTLFLAG_RD,
202     &init_count_proc, 0, "proc init calls");
203 static int	init_count_vnode;
204 SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_vnode, CTLFLAG_RD,
205     &init_count_vnode, 0, "vnode init calls");
206 
207 static int	destroy_count_bpfdesc;
208 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_bpfdesc, CTLFLAG_RD,
209     &destroy_count_bpfdesc, 0, "bpfdesc destroy calls");
210 static int	destroy_count_cred;
211 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_cred, CTLFLAG_RD,
212     &destroy_count_cred, 0, "cred destroy calls");
213 static int	destroy_count_devfsdirent;
214 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_devfsdirent, CTLFLAG_RD,
215     &destroy_count_devfsdirent, 0, "devfsdirent destroy calls");
216 static int	destroy_count_ifnet;
217 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_ifnet, CTLFLAG_RD,
218     &destroy_count_ifnet, 0, "ifnet destroy calls");
219 static int	destroy_count_inpcb;
220 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_inpcb, CTLFLAG_RD,
221     &destroy_count_inpcb, 0, "inpcb destroy calls");
222 static int	destroy_count_sysv_msg;
223 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_sysv_msg, CTLFLAG_RD,
224     &destroy_count_sysv_msg, 0, "ipc_msg destroy calls");
225 static int	destroy_count_sysv_msq;
226 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_sysv_msq, CTLFLAG_RD,
227     &destroy_count_sysv_msq, 0, "ipc_msq destroy calls");
228 static int	destroy_count_sysv_sem;
229 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_sysv_sem, CTLFLAG_RD,
230     &destroy_count_sysv_sem, 0, "ipc_sema destroy calls");
231 static int	destroy_count_sysv_shm;
232 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_sysv_shm, CTLFLAG_RD,
233     &destroy_count_sysv_shm, 0, "ipc_shm destroy calls");
234 static int	destroy_count_ipq;
235 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_ipq, CTLFLAG_RD,
236     &destroy_count_ipq, 0, "ipq destroy calls");
237 static int      destroy_count_mbuf;
238 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_mbuf, CTLFLAG_RD,
239     &destroy_count_mbuf, 0, "mbuf destroy calls");
240 static int      destroy_count_mount;
241 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_mount, CTLFLAG_RD,
242     &destroy_count_mount, 0, "mount destroy calls");
243 static int      destroy_count_mount_fslabel;
244 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_mount_fslabel,
245     CTLFLAG_RD, &destroy_count_mount_fslabel, 0,
246     "mount_fslabel destroy calls");
247 static int      destroy_count_socket;
248 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_socket, CTLFLAG_RD,
249     &destroy_count_socket, 0, "socket destroy calls");
250 static int      destroy_count_socket_peerlabel;
251 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_socket_peerlabel,
252     CTLFLAG_RD, &destroy_count_socket_peerlabel, 0,
253     "socket_peerlabel destroy calls");
254 static int      destroy_count_pipe;
255 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_pipe, CTLFLAG_RD,
256     &destroy_count_pipe, 0, "pipe destroy calls");
257 static int	destroy_count_posixsems;
258 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_posixsems, CTLFLAG_RD,
259     &destroy_count_posixsems, 0, "posix sems destroy calls");
260 static int      destroy_count_proc;
261 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_proc, CTLFLAG_RD,
262     &destroy_count_proc, 0, "proc destroy calls");
263 static int      destroy_count_vnode;
264 SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_vnode, CTLFLAG_RD,
265     &destroy_count_vnode, 0, "vnode destroy calls");
266 
267 static int externalize_count;
268 SYSCTL_INT(_security_mac_test, OID_AUTO, externalize_count, CTLFLAG_RD,
269     &externalize_count, 0, "Subject/object externalize calls");
270 static int internalize_count;
271 SYSCTL_INT(_security_mac_test, OID_AUTO, internalize_count, CTLFLAG_RD,
272     &internalize_count, 0, "Subject/object internalize calls");
273 
274 #ifdef KDB
275 #define	DEBUGGER(x)	kdb_enter(x)
276 #else
277 #define	DEBUGGER(x)	printf("mac_test: %s\n", (x))
278 #endif
279 
280 /*
281  * Policy module operations.
282  */
283 static void
284 mac_test_destroy(struct mac_policy_conf *conf)
285 {
286 
287 }
288 
289 static void
290 mac_test_init(struct mac_policy_conf *conf)
291 {
292 
293 }
294 
295 static int
296 mac_test_syscall(struct thread *td, int call, void *arg)
297 {
298 
299 	return (0);
300 }
301 
302 /*
303  * Label operations.
304  */
305 static void
306 mac_test_init_bpfdesc_label(struct label *label)
307 {
308 
309 	SLOT(label) = BPFMAGIC;
310 	atomic_add_int(&init_count_bpfdesc, 1);
311 }
312 
313 static void
314 mac_test_init_cred_label(struct label *label)
315 {
316 
317 	SLOT(label) = CREDMAGIC;
318 	atomic_add_int(&init_count_cred, 1);
319 }
320 
321 static void
322 mac_test_init_devfsdirent_label(struct label *label)
323 {
324 
325 	SLOT(label) = DEVFSMAGIC;
326 	atomic_add_int(&init_count_devfsdirent, 1);
327 }
328 
329 static void
330 mac_test_init_ifnet_label(struct label *label)
331 {
332 
333 	SLOT(label) = IFNETMAGIC;
334 	atomic_add_int(&init_count_ifnet, 1);
335 }
336 
337 static int
338 mac_test_init_inpcb_label(struct label *label, int flag)
339 {
340 
341 	if (flag & M_WAITOK)
342 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
343 		    "mac_test_init_inpcb_label() at %s:%d", __FILE__,
344 		    __LINE__);
345 
346 	SLOT(label) = INPCBMAGIC;
347 	atomic_add_int(&init_count_inpcb, 1);
348 	return (0);
349 }
350 
351 static void
352 mac_test_init_sysv_msgmsg_label(struct label *label)
353 {
354 	SLOT(label) = SYSVIPCMSGMAGIC;
355 	atomic_add_int(&init_count_sysv_msg, 1);
356 }
357 
358 static void
359 mac_test_init_sysv_msgqueue_label(struct label *label)
360 {
361 	SLOT(label) = SYSVIPCMSQMAGIC;
362 	atomic_add_int(&init_count_sysv_msq, 1);
363 }
364 
365 static void
366 mac_test_init_sysv_sem_label(struct label *label)
367 {
368 	SLOT(label) = SYSVIPCSEMMAGIC;
369 	atomic_add_int(&init_count_sysv_sem, 1);
370 }
371 
372 static void
373 mac_test_init_sysv_shm_label(struct label *label)
374 {
375 	SLOT(label) = SYSVIPCSHMMAGIC;
376 	atomic_add_int(&init_count_sysv_shm, 1);
377 }
378 
379 static int
380 mac_test_init_ipq_label(struct label *label, int flag)
381 {
382 
383 	if (flag & M_WAITOK)
384 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
385 		    "mac_test_init_ipq_label() at %s:%d", __FILE__,
386 		    __LINE__);
387 
388 	SLOT(label) = IPQMAGIC;
389 	atomic_add_int(&init_count_ipq, 1);
390 	return (0);
391 }
392 
393 static int
394 mac_test_init_mbuf_label(struct label *label, int flag)
395 {
396 
397 	if (flag & M_WAITOK)
398 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
399 		    "mac_test_init_mbuf_label() at %s:%d", __FILE__,
400 		    __LINE__);
401 
402 	SLOT(label) = MBUFMAGIC;
403 	atomic_add_int(&init_count_mbuf, 1);
404 	return (0);
405 }
406 
407 static void
408 mac_test_init_mount_label(struct label *label)
409 {
410 
411 	SLOT(label) = MOUNTMAGIC;
412 	atomic_add_int(&init_count_mount, 1);
413 }
414 
415 static void
416 mac_test_init_mount_fs_label(struct label *label)
417 {
418 
419 	SLOT(label) = MOUNTMAGIC;
420 	atomic_add_int(&init_count_mount_fslabel, 1);
421 }
422 
423 static int
424 mac_test_init_socket_label(struct label *label, int flag)
425 {
426 
427 	if (flag & M_WAITOK)
428 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
429 		    "mac_test_init_socket_label() at %s:%d", __FILE__,
430 		    __LINE__);
431 
432 	SLOT(label) = SOCKETMAGIC;
433 	atomic_add_int(&init_count_socket, 1);
434 	return (0);
435 }
436 
437 static int
438 mac_test_init_socket_peer_label(struct label *label, int flag)
439 {
440 
441 	if (flag & M_WAITOK)
442 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
443 		    "mac_test_init_socket_peer_label() at %s:%d", __FILE__,
444 		    __LINE__);
445 
446 	SLOT(label) = SOCKETMAGIC;
447 	atomic_add_int(&init_count_socket_peerlabel, 1);
448 	return (0);
449 }
450 
451 static void
452 mac_test_init_pipe_label(struct label *label)
453 {
454 
455 	SLOT(label) = PIPEMAGIC;
456 	atomic_add_int(&init_count_pipe, 1);
457 }
458 
459 static void
460 mac_test_init_posix_sem_label(struct label *label)
461 {
462 
463 	SLOT(label) = POSIXSEMMAGIC;
464 	atomic_add_int(&init_count_posixsems, 1);
465 }
466 
467 static void
468 mac_test_init_proc_label(struct label *label)
469 {
470 
471 	SLOT(label) = PROCMAGIC;
472 	atomic_add_int(&init_count_proc, 1);
473 }
474 
475 static void
476 mac_test_init_vnode_label(struct label *label)
477 {
478 
479 	SLOT(label) = VNODEMAGIC;
480 	atomic_add_int(&init_count_vnode, 1);
481 }
482 
483 static void
484 mac_test_destroy_bpfdesc_label(struct label *label)
485 {
486 
487 	if (SLOT(label) == BPFMAGIC || SLOT(label) == 0) {
488 		atomic_add_int(&destroy_count_bpfdesc, 1);
489 		SLOT(label) = EXMAGIC;
490 	} else if (SLOT(label) == EXMAGIC) {
491 		DEBUGGER("mac_test_destroy_bpfdesc: dup destroy");
492 	} else {
493 		DEBUGGER("mac_test_destroy_bpfdesc: corrupted label");
494 	}
495 }
496 
497 static void
498 mac_test_destroy_cred_label(struct label *label)
499 {
500 
501 	if (SLOT(label) == CREDMAGIC || SLOT(label) == 0) {
502 		atomic_add_int(&destroy_count_cred, 1);
503 		SLOT(label) = EXMAGIC;
504 	} else if (SLOT(label) == EXMAGIC) {
505 		DEBUGGER("mac_test_destroy_cred: dup destroy");
506 	} else {
507 		DEBUGGER("mac_test_destroy_cred: corrupted label");
508 	}
509 }
510 
511 static void
512 mac_test_destroy_devfsdirent_label(struct label *label)
513 {
514 
515 	if (SLOT(label) == DEVFSMAGIC || SLOT(label) == 0) {
516 		atomic_add_int(&destroy_count_devfsdirent, 1);
517 		SLOT(label) = EXMAGIC;
518 	} else if (SLOT(label) == EXMAGIC) {
519 		DEBUGGER("mac_test_destroy_devfsdirent: dup destroy");
520 	} else {
521 		DEBUGGER("mac_test_destroy_devfsdirent: corrupted label");
522 	}
523 }
524 
525 static void
526 mac_test_destroy_ifnet_label(struct label *label)
527 {
528 
529 	if (SLOT(label) == IFNETMAGIC || SLOT(label) == 0) {
530 		atomic_add_int(&destroy_count_ifnet, 1);
531 		SLOT(label) = EXMAGIC;
532 	} else if (SLOT(label) == EXMAGIC) {
533 		DEBUGGER("mac_test_destroy_ifnet: dup destroy");
534 	} else {
535 		DEBUGGER("mac_test_destroy_ifnet: corrupted label");
536 	}
537 }
538 
539 static void
540 mac_test_destroy_inpcb_label(struct label *label)
541 {
542 
543 	if (SLOT(label) == INPCBMAGIC || SLOT(label) == 0) {
544 		atomic_add_int(&destroy_count_inpcb, 1);
545 		SLOT(label) = EXMAGIC;
546 	} else if (SLOT(label) == EXMAGIC) {
547 		DEBUGGER("mac_test_destroy_inpcb: dup destroy");
548 	} else {
549 		DEBUGGER("mac_test_destroy_inpcb: corrupted label");
550 	}
551 }
552 
553 static void
554 mac_test_destroy_sysv_msgmsg_label(struct label *label)
555 {
556 
557 	if (SLOT(label) == SYSVIPCMSGMAGIC || SLOT(label) == 0) {
558 		atomic_add_int(&destroy_count_sysv_msg, 1);
559 		SLOT(label) = EXMAGIC;
560 	} else if (SLOT(label) == EXMAGIC) {
561 		DEBUGGER("mac_test_destroy_sysv_msgmsg_label: dup destroy");
562 	} else {
563 		DEBUGGER(
564 		    "mac_test_destroy_sysv_msgmsg_label: corrupted label");
565 	}
566 }
567 
568 static void
569 mac_test_destroy_sysv_msgqueue_label(struct label *label)
570 {
571 
572 	if (SLOT(label) == SYSVIPCMSQMAGIC || SLOT(label) == 0) {
573 		atomic_add_int(&destroy_count_sysv_msq, 1);
574 		SLOT(label) = EXMAGIC;
575 	} else if (SLOT(label) == EXMAGIC) {
576 		DEBUGGER("mac_test_destroy_sysv_msgqueue_label: dup destroy");
577 	} else {
578 		DEBUGGER(
579 		    "mac_test_destroy_sysv_msgqueue_label: corrupted label");
580 	}
581 }
582 
583 static void
584 mac_test_destroy_sysv_sem_label(struct label *label)
585 {
586 
587 	if (SLOT(label) == SYSVIPCSEMMAGIC || SLOT(label) == 0) {
588 		atomic_add_int(&destroy_count_sysv_sem, 1);
589 		SLOT(label) = EXMAGIC;
590 	} else if (SLOT(label) == EXMAGIC) {
591 		DEBUGGER("mac_test_destroy_sysv_sem_label: dup destroy");
592 	} else {
593 		DEBUGGER("mac_test_destroy_sysv_sem_label: corrupted label");
594 	}
595 }
596 
597 static void
598 mac_test_destroy_sysv_shm_label(struct label *label)
599 {
600 
601 	if (SLOT(label) == SYSVIPCSHMMAGIC || SLOT(label) == 0) {
602 		atomic_add_int(&destroy_count_sysv_shm, 1);
603 		SLOT(label) = EXMAGIC;
604 	} else if (SLOT(label) == EXMAGIC) {
605 		DEBUGGER("mac_test_destroy_sysv_shm_label: dup destroy");
606 	} else {
607 		DEBUGGER("mac_test_destroy_sysv_shm_label: corrupted label");
608 	}
609 }
610 
611 static void
612 mac_test_destroy_ipq_label(struct label *label)
613 {
614 
615 	if (SLOT(label) == IPQMAGIC || SLOT(label) == 0) {
616 		atomic_add_int(&destroy_count_ipq, 1);
617 		SLOT(label) = EXMAGIC;
618 	} else if (SLOT(label) == EXMAGIC) {
619 		DEBUGGER("mac_test_destroy_ipq: dup destroy");
620 	} else {
621 		DEBUGGER("mac_test_destroy_ipq: corrupted label");
622 	}
623 }
624 
625 static void
626 mac_test_destroy_mbuf_label(struct label *label)
627 {
628 
629 	/*
630 	 * If we're loaded dynamically, there may be mbufs in flight that
631 	 * didn't have label storage allocated for them.  Handle this
632 	 * gracefully.
633 	 */
634 	if (label == NULL)
635 		return;
636 
637 	if (SLOT(label) == MBUFMAGIC || SLOT(label) == 0) {
638 		atomic_add_int(&destroy_count_mbuf, 1);
639 		SLOT(label) = EXMAGIC;
640 	} else if (SLOT(label) == EXMAGIC) {
641 		DEBUGGER("mac_test_destroy_mbuf: dup destroy");
642 	} else {
643 		DEBUGGER("mac_test_destroy_mbuf: corrupted label");
644 	}
645 }
646 
647 static void
648 mac_test_destroy_mount_label(struct label *label)
649 {
650 
651 	if ((SLOT(label) == MOUNTMAGIC || SLOT(label) == 0)) {
652 		atomic_add_int(&destroy_count_mount, 1);
653 		SLOT(label) = EXMAGIC;
654 	} else if (SLOT(label) == EXMAGIC) {
655 		DEBUGGER("mac_test_destroy_mount: dup destroy");
656 	} else {
657 		DEBUGGER("mac_test_destroy_mount: corrupted label");
658 	}
659 }
660 
661 static void
662 mac_test_destroy_mount_fs_label(struct label *label)
663 {
664 
665 	if ((SLOT(label) == MOUNTMAGIC || SLOT(label) == 0)) {
666 		atomic_add_int(&destroy_count_mount_fslabel, 1);
667 		SLOT(label) = EXMAGIC;
668 	} else if (SLOT(label) == EXMAGIC) {
669 		DEBUGGER("mac_test_destroy_mount_fslabel: dup destroy");
670 	} else {
671 		DEBUGGER("mac_test_destroy_mount_fslabel: corrupted label");
672 	}
673 }
674 
675 static void
676 mac_test_destroy_socket_label(struct label *label)
677 {
678 
679 	if ((SLOT(label) == SOCKETMAGIC || SLOT(label) == 0)) {
680 		atomic_add_int(&destroy_count_socket, 1);
681 		SLOT(label) = EXMAGIC;
682 	} else if (SLOT(label) == EXMAGIC) {
683 		DEBUGGER("mac_test_destroy_socket: dup destroy");
684 	} else {
685 		DEBUGGER("mac_test_destroy_socket: corrupted label");
686 	}
687 }
688 
689 static void
690 mac_test_destroy_socket_peer_label(struct label *label)
691 {
692 
693 	if ((SLOT(label) == SOCKETMAGIC || SLOT(label) == 0)) {
694 		atomic_add_int(&destroy_count_socket_peerlabel, 1);
695 		SLOT(label) = EXMAGIC;
696 	} else if (SLOT(label) == EXMAGIC) {
697 		DEBUGGER("mac_test_destroy_socket_peerlabel: dup destroy");
698 	} else {
699 		DEBUGGER("mac_test_destroy_socket_peerlabel: corrupted label");
700 	}
701 }
702 
703 static void
704 mac_test_destroy_pipe_label(struct label *label)
705 {
706 
707 	if ((SLOT(label) == PIPEMAGIC || SLOT(label) == 0)) {
708 		atomic_add_int(&destroy_count_pipe, 1);
709 		SLOT(label) = EXMAGIC;
710 	} else if (SLOT(label) == EXMAGIC) {
711 		DEBUGGER("mac_test_destroy_pipe: dup destroy");
712 	} else {
713 		DEBUGGER("mac_test_destroy_pipe: corrupted label");
714 	}
715 }
716 
717 static void
718 mac_test_destroy_posix_sem_label(struct label *label)
719 {
720 
721 	if ((SLOT(label) == POSIXSEMMAGIC || SLOT(label) == 0)) {
722 		atomic_add_int(&destroy_count_posixsems, 1);
723 		SLOT(label) = EXMAGIC;
724 	} else if (SLOT(label) == EXMAGIC) {
725 		DEBUGGER("mac_test_destroy_posix_sem: dup destroy");
726 	} else {
727 		DEBUGGER("mac_test_destroy_posix_sem: corrupted label");
728 	}
729 }
730 
731 static void
732 mac_test_destroy_proc_label(struct label *label)
733 {
734 
735 	if ((SLOT(label) == PROCMAGIC || SLOT(label) == 0)) {
736 		atomic_add_int(&destroy_count_proc, 1);
737 		SLOT(label) = EXMAGIC;
738 	} else if (SLOT(label) == EXMAGIC) {
739 		DEBUGGER("mac_test_destroy_proc: dup destroy");
740 	} else {
741 		DEBUGGER("mac_test_destroy_proc: corrupted label");
742 	}
743 }
744 
745 static void
746 mac_test_destroy_vnode_label(struct label *label)
747 {
748 
749 	if (SLOT(label) == VNODEMAGIC || SLOT(label) == 0) {
750 		atomic_add_int(&destroy_count_vnode, 1);
751 		SLOT(label) = EXMAGIC;
752 	} else if (SLOT(label) == EXMAGIC) {
753 		DEBUGGER("mac_test_destroy_vnode: dup destroy");
754 	} else {
755 		DEBUGGER("mac_test_destroy_vnode: corrupted label");
756 	}
757 }
758 
759 static void
760 mac_test_copy_cred_label(struct label *src, struct label *dest)
761 {
762 
763 	ASSERT_CRED_LABEL(src);
764 	ASSERT_CRED_LABEL(dest);
765 }
766 
767 static void
768 mac_test_copy_ifnet_label(struct label *src, struct label *dest)
769 {
770 
771 	ASSERT_IFNET_LABEL(src);
772 	ASSERT_IFNET_LABEL(dest);
773 }
774 
775 static void
776 mac_test_copy_mbuf_label(struct label *src, struct label *dest)
777 {
778 
779 	ASSERT_MBUF_LABEL(src);
780 	ASSERT_MBUF_LABEL(dest);
781 }
782 
783 static void
784 mac_test_copy_pipe_label(struct label *src, struct label *dest)
785 {
786 
787 	ASSERT_PIPE_LABEL(src);
788 	ASSERT_PIPE_LABEL(dest);
789 }
790 
791 static void
792 mac_test_copy_socket_label(struct label *src, struct label *dest)
793 {
794 
795 	ASSERT_SOCKET_LABEL(src);
796 	ASSERT_SOCKET_LABEL(dest);
797 }
798 
799 static void
800 mac_test_copy_vnode_label(struct label *src, struct label *dest)
801 {
802 
803 	ASSERT_VNODE_LABEL(src);
804 	ASSERT_VNODE_LABEL(dest);
805 }
806 
807 static int
808 mac_test_externalize_label(struct label *label, char *element_name,
809     struct sbuf *sb, int *claimed)
810 {
811 
812 	atomic_add_int(&externalize_count, 1);
813 
814 	KASSERT(SLOT(label) != EXMAGIC,
815 	    ("mac_test_externalize_label: destroyed label"));
816 
817 	return (0);
818 }
819 
820 static int
821 mac_test_internalize_label(struct label *label, char *element_name,
822     char *element_data, int *claimed)
823 {
824 
825 	atomic_add_int(&internalize_count, 1);
826 
827 	KASSERT(SLOT(label) != EXMAGIC,
828 	    ("mac_test_internalize_label: destroyed label"));
829 
830 	return (0);
831 }
832 
833 /*
834  * Labeling event operations: file system objects, and things that look
835  * a lot like file system objects.
836  */
837 static void
838 mac_test_associate_vnode_devfs(struct mount *mp, struct label *fslabel,
839     struct devfs_dirent *de, struct label *delabel, struct vnode *vp,
840     struct label *vlabel)
841 {
842 
843 	ASSERT_MOUNT_LABEL(fslabel);
844 	ASSERT_DEVFS_LABEL(delabel);
845 	ASSERT_VNODE_LABEL(vlabel);
846 }
847 
848 static int
849 mac_test_associate_vnode_extattr(struct mount *mp, struct label *fslabel,
850     struct vnode *vp, struct label *vlabel)
851 {
852 
853 	ASSERT_MOUNT_LABEL(fslabel);
854 	ASSERT_VNODE_LABEL(vlabel);
855 	return (0);
856 }
857 
858 static void
859 mac_test_associate_vnode_singlelabel(struct mount *mp,
860     struct label *fslabel, struct vnode *vp, struct label *vlabel)
861 {
862 
863 	ASSERT_MOUNT_LABEL(fslabel);
864 	ASSERT_VNODE_LABEL(vlabel);
865 }
866 
867 static void
868 mac_test_create_devfs_device(struct mount *mp, struct cdev *dev,
869     struct devfs_dirent *devfs_dirent, struct label *label)
870 {
871 
872 	ASSERT_DEVFS_LABEL(label);
873 }
874 
875 static void
876 mac_test_create_devfs_directory(struct mount *mp, char *dirname,
877     int dirnamelen, struct devfs_dirent *devfs_dirent, struct label *label)
878 {
879 
880 	ASSERT_DEVFS_LABEL(label);
881 }
882 
883 static void
884 mac_test_create_devfs_symlink(struct ucred *cred, struct mount *mp,
885     struct devfs_dirent *dd, struct label *ddlabel, struct devfs_dirent *de,
886     struct label *delabel)
887 {
888 
889 	ASSERT_CRED_LABEL(cred->cr_label);
890 	ASSERT_DEVFS_LABEL(ddlabel);
891 	ASSERT_DEVFS_LABEL(delabel);
892 }
893 
894 static int
895 mac_test_create_vnode_extattr(struct ucred *cred, struct mount *mp,
896     struct label *fslabel, struct vnode *dvp, struct label *dlabel,
897     struct vnode *vp, struct label *vlabel, struct componentname *cnp)
898 {
899 
900 	ASSERT_CRED_LABEL(cred->cr_label);
901 	ASSERT_MOUNT_LABEL(fslabel);
902 	ASSERT_VNODE_LABEL(dlabel);
903 
904 	return (0);
905 }
906 
907 static void
908 mac_test_create_mount(struct ucred *cred, struct mount *mp,
909     struct label *mntlabel, struct label *fslabel)
910 {
911 
912 	ASSERT_CRED_LABEL(cred->cr_label);
913 	ASSERT_MOUNT_LABEL(mntlabel);
914 	ASSERT_MOUNT_LABEL(fslabel);
915 }
916 
917 static void
918 mac_test_create_root_mount(struct ucred *cred, struct mount *mp,
919     struct label *mntlabel, struct label *fslabel)
920 {
921 
922 	ASSERT_CRED_LABEL(cred->cr_label);
923 	ASSERT_MOUNT_LABEL(mntlabel);
924 	ASSERT_MOUNT_LABEL(fslabel);
925 }
926 
927 static void
928 mac_test_relabel_vnode(struct ucred *cred, struct vnode *vp,
929     struct label *vnodelabel, struct label *label)
930 {
931 
932 	ASSERT_CRED_LABEL(cred->cr_label);
933 	ASSERT_VNODE_LABEL(vnodelabel);
934 	ASSERT_VNODE_LABEL(label);
935 }
936 
937 static int
938 mac_test_setlabel_vnode_extattr(struct ucred *cred, struct vnode *vp,
939     struct label *vlabel, struct label *intlabel)
940 {
941 
942 	ASSERT_CRED_LABEL(cred->cr_label);
943 	ASSERT_VNODE_LABEL(vlabel);
944 	ASSERT_VNODE_LABEL(intlabel);
945 	return (0);
946 }
947 
948 static void
949 mac_test_update_devfsdirent(struct mount *mp,
950     struct devfs_dirent *devfs_dirent, struct label *direntlabel,
951     struct vnode *vp, struct label *vnodelabel)
952 {
953 
954 	ASSERT_DEVFS_LABEL(direntlabel);
955 	ASSERT_VNODE_LABEL(vnodelabel);
956 }
957 
958 /*
959  * Labeling event operations: IPC object.
960  */
961 static void
962 mac_test_create_mbuf_from_socket(struct socket *so, struct label *socketlabel,
963     struct mbuf *m, struct label *mbuflabel)
964 {
965 
966 	ASSERT_SOCKET_LABEL(socketlabel);
967 	ASSERT_MBUF_LABEL(mbuflabel);
968 }
969 
970 static void
971 mac_test_create_socket(struct ucred *cred, struct socket *socket,
972    struct label *socketlabel)
973 {
974 
975 	ASSERT_CRED_LABEL(cred->cr_label);
976 	ASSERT_SOCKET_LABEL(socketlabel);
977 }
978 
979 static void
980 mac_test_create_pipe(struct ucred *cred, struct pipepair *pp,
981    struct label *pipelabel)
982 {
983 
984 	ASSERT_CRED_LABEL(cred->cr_label);
985 	ASSERT_PIPE_LABEL(pipelabel);
986 }
987 
988 static void
989 mac_test_create_posix_sem(struct ucred *cred, struct ksem *ksem,
990    struct label *posixlabel)
991 {
992 
993 	ASSERT_CRED_LABEL(cred->cr_label);
994 	ASSERT_POSIX_LABEL(posixlabel);
995 }
996 
997 static void
998 mac_test_create_socket_from_socket(struct socket *oldsocket,
999     struct label *oldsocketlabel, struct socket *newsocket,
1000     struct label *newsocketlabel)
1001 {
1002 
1003 	ASSERT_SOCKET_LABEL(oldsocketlabel);
1004 	ASSERT_SOCKET_LABEL(newsocketlabel);
1005 }
1006 
1007 static void
1008 mac_test_relabel_socket(struct ucred *cred, struct socket *socket,
1009     struct label *socketlabel, struct label *newlabel)
1010 {
1011 
1012 	ASSERT_CRED_LABEL(cred->cr_label);
1013 	ASSERT_SOCKET_LABEL(newlabel);
1014 }
1015 
1016 static void
1017 mac_test_relabel_pipe(struct ucred *cred, struct pipepair *pp,
1018     struct label *pipelabel, struct label *newlabel)
1019 {
1020 
1021 	ASSERT_CRED_LABEL(cred->cr_label);
1022 	ASSERT_PIPE_LABEL(pipelabel);
1023 	ASSERT_PIPE_LABEL(newlabel);
1024 }
1025 
1026 static void
1027 mac_test_set_socket_peer_from_mbuf(struct mbuf *mbuf, struct label *mbuflabel,
1028     struct socket *socket, struct label *socketpeerlabel)
1029 {
1030 
1031 	ASSERT_MBUF_LABEL(mbuflabel);
1032 	ASSERT_SOCKET_LABEL(socketpeerlabel);
1033 }
1034 
1035 /*
1036  * Labeling event operations: network objects.
1037  */
1038 static void
1039 mac_test_set_socket_peer_from_socket(struct socket *oldsocket,
1040     struct label *oldsocketlabel, struct socket *newsocket,
1041     struct label *newsocketpeerlabel)
1042 {
1043 
1044 	ASSERT_SOCKET_LABEL(oldsocketlabel);
1045 	ASSERT_SOCKET_LABEL(newsocketpeerlabel);
1046 }
1047 
1048 static void
1049 mac_test_create_bpfdesc(struct ucred *cred, struct bpf_d *bpf_d,
1050     struct label *bpflabel)
1051 {
1052 
1053 	ASSERT_CRED_LABEL(cred->cr_label);
1054 	ASSERT_BPF_LABEL(bpflabel);
1055 }
1056 
1057 static void
1058 mac_test_create_datagram_from_ipq(struct ipq *ipq, struct label *ipqlabel,
1059     struct mbuf *datagram, struct label *datagramlabel)
1060 {
1061 
1062 	ASSERT_IPQ_LABEL(ipqlabel);
1063 	ASSERT_MBUF_LABEL(datagramlabel);
1064 }
1065 
1066 static void
1067 mac_test_create_fragment(struct mbuf *datagram, struct label *datagramlabel,
1068     struct mbuf *fragment, struct label *fragmentlabel)
1069 {
1070 
1071 	ASSERT_MBUF_LABEL(datagramlabel);
1072 	ASSERT_MBUF_LABEL(fragmentlabel);
1073 }
1074 
1075 static void
1076 mac_test_create_ifnet(struct ifnet *ifnet, struct label *ifnetlabel)
1077 {
1078 
1079 	ASSERT_IFNET_LABEL(ifnetlabel);
1080 }
1081 
1082 static void
1083 mac_test_create_inpcb_from_socket(struct socket *so, struct label *solabel,
1084     struct inpcb *inp, struct label *inplabel)
1085 {
1086 
1087 	ASSERT_SOCKET_LABEL(solabel);
1088 	ASSERT_INPCB_LABEL(inplabel);
1089 }
1090 
1091 static void
1092 mac_test_create_sysv_msgmsg(struct ucred *cred, struct msqid_kernel *msqkptr,
1093     struct label *msqlabel, struct msg *msgptr, struct label *msglabel)
1094 {
1095 
1096 	ASSERT_SYSVIPCMSG_LABEL(msglabel);
1097 	ASSERT_SYSVIPCMSQ_LABEL(msqlabel);
1098 }
1099 
1100 static void
1101 mac_test_create_sysv_msgqueue(struct ucred *cred,
1102     struct msqid_kernel *msqkptr, struct label *msqlabel)
1103 {
1104 
1105 	ASSERT_SYSVIPCMSQ_LABEL(msqlabel);
1106 }
1107 
1108 static void
1109 mac_test_create_sysv_sem(struct ucred *cred, struct semid_kernel *semakptr,
1110     struct label *semalabel)
1111 {
1112 
1113 	ASSERT_SYSVIPCSEM_LABEL(semalabel);
1114 }
1115 
1116 static void
1117 mac_test_create_sysv_shm(struct ucred *cred, struct shmid_kernel *shmsegptr,
1118     struct label *shmlabel)
1119 {
1120 
1121 	ASSERT_SYSVIPCSHM_LABEL(shmlabel);
1122 }
1123 
1124 static void
1125 mac_test_create_ipq(struct mbuf *fragment, struct label *fragmentlabel,
1126     struct ipq *ipq, struct label *ipqlabel)
1127 {
1128 
1129 	ASSERT_MBUF_LABEL(fragmentlabel);
1130 	ASSERT_IPQ_LABEL(ipqlabel);
1131 }
1132 
1133 static void
1134 mac_test_create_mbuf_from_inpcb(struct inpcb *inp, struct label *inplabel,
1135     struct mbuf *m, struct label *mlabel)
1136 {
1137 
1138 	ASSERT_INPCB_LABEL(inplabel);
1139 	ASSERT_MBUF_LABEL(mlabel);
1140 }
1141 
1142 static void
1143 mac_test_create_mbuf_linklayer(struct ifnet *ifnet, struct label *ifnetlabel,
1144     struct mbuf *mbuf, struct label *mbuflabel)
1145 {
1146 
1147 	ASSERT_IFNET_LABEL(ifnetlabel);
1148 	ASSERT_MBUF_LABEL(mbuflabel);
1149 }
1150 
1151 static void
1152 mac_test_create_mbuf_from_bpfdesc(struct bpf_d *bpf_d, struct label *bpflabel,
1153     struct mbuf *mbuf, struct label *mbuflabel)
1154 {
1155 
1156 	ASSERT_BPF_LABEL(bpflabel);
1157 	ASSERT_MBUF_LABEL(mbuflabel);
1158 }
1159 
1160 static void
1161 mac_test_create_mbuf_from_ifnet(struct ifnet *ifnet, struct label *ifnetlabel,
1162     struct mbuf *m, struct label *mbuflabel)
1163 {
1164 
1165 	ASSERT_IFNET_LABEL(ifnetlabel);
1166 	ASSERT_MBUF_LABEL(mbuflabel);
1167 }
1168 
1169 static void
1170 mac_test_create_mbuf_multicast_encap(struct mbuf *oldmbuf,
1171     struct label *oldmbuflabel, struct ifnet *ifnet, struct label *ifnetlabel,
1172     struct mbuf *newmbuf, struct label *newmbuflabel)
1173 {
1174 
1175 	ASSERT_MBUF_LABEL(oldmbuflabel);
1176 	ASSERT_IFNET_LABEL(ifnetlabel);
1177 	ASSERT_MBUF_LABEL(newmbuflabel);
1178 }
1179 
1180 static void
1181 mac_test_create_mbuf_netlayer(struct mbuf *oldmbuf,
1182     struct label *oldmbuflabel, struct mbuf *newmbuf,
1183     struct label *newmbuflabel)
1184 {
1185 
1186 	ASSERT_MBUF_LABEL(oldmbuflabel);
1187 	ASSERT_MBUF_LABEL(newmbuflabel);
1188 }
1189 
1190 static int
1191 mac_test_fragment_match(struct mbuf *fragment, struct label *fragmentlabel,
1192     struct ipq *ipq, struct label *ipqlabel)
1193 {
1194 
1195 	ASSERT_MBUF_LABEL(fragmentlabel);
1196 	ASSERT_IPQ_LABEL(ipqlabel);
1197 
1198 	return (1);
1199 }
1200 
1201 static void
1202 mac_test_reflect_mbuf_icmp(struct mbuf *m, struct label *mlabel)
1203 {
1204 
1205 	ASSERT_MBUF_LABEL(mlabel);
1206 }
1207 
1208 static void
1209 mac_test_reflect_mbuf_tcp(struct mbuf *m, struct label *mlabel)
1210 {
1211 
1212 	ASSERT_MBUF_LABEL(mlabel);
1213 }
1214 
1215 static void
1216 mac_test_relabel_ifnet(struct ucred *cred, struct ifnet *ifnet,
1217     struct label *ifnetlabel, struct label *newlabel)
1218 {
1219 
1220 	ASSERT_CRED_LABEL(cred->cr_label);
1221 	ASSERT_IFNET_LABEL(ifnetlabel);
1222 	ASSERT_IFNET_LABEL(newlabel);
1223 }
1224 
1225 static void
1226 mac_test_update_ipq(struct mbuf *fragment, struct label *fragmentlabel,
1227     struct ipq *ipq, struct label *ipqlabel)
1228 {
1229 
1230 	ASSERT_MBUF_LABEL(fragmentlabel);
1231 	ASSERT_IPQ_LABEL(ipqlabel);
1232 }
1233 
1234 static void
1235 mac_test_inpcb_sosetlabel(struct socket *so, struct label *solabel,
1236     struct inpcb *inp, struct label *inplabel)
1237 {
1238 
1239 	ASSERT_SOCKET_LABEL(solabel);
1240 	ASSERT_INPCB_LABEL(inplabel);
1241 }
1242 
1243 /*
1244  * Labeling event operations: processes.
1245  */
1246 static void
1247 mac_test_execve_transition(struct ucred *old, struct ucred *new,
1248     struct vnode *vp, struct label *filelabel,
1249     struct label *interpvnodelabel, struct image_params *imgp,
1250     struct label *execlabel)
1251 {
1252 
1253 	ASSERT_CRED_LABEL(old->cr_label);
1254 	ASSERT_CRED_LABEL(new->cr_label);
1255 	ASSERT_VNODE_LABEL(filelabel);
1256 	if (interpvnodelabel != NULL) {
1257 		ASSERT_VNODE_LABEL(interpvnodelabel);
1258 	}
1259 	if (execlabel != NULL) {
1260 		ASSERT_CRED_LABEL(execlabel);
1261 	}
1262 }
1263 
1264 static int
1265 mac_test_execve_will_transition(struct ucred *old, struct vnode *vp,
1266     struct label *filelabel, struct label *interpvnodelabel,
1267     struct image_params *imgp, struct label *execlabel)
1268 {
1269 
1270 	ASSERT_CRED_LABEL(old->cr_label);
1271 	ASSERT_VNODE_LABEL(filelabel);
1272 	if (interpvnodelabel != NULL) {
1273 		ASSERT_VNODE_LABEL(interpvnodelabel);
1274 	}
1275 	if (execlabel != NULL) {
1276 		ASSERT_CRED_LABEL(execlabel);
1277 	}
1278 
1279 	return (0);
1280 }
1281 
1282 static void
1283 mac_test_create_proc0(struct ucred *cred)
1284 {
1285 
1286 	ASSERT_CRED_LABEL(cred->cr_label);
1287 }
1288 
1289 static void
1290 mac_test_create_proc1(struct ucred *cred)
1291 {
1292 
1293 	ASSERT_CRED_LABEL(cred->cr_label);
1294 }
1295 
1296 static void
1297 mac_test_relabel_cred(struct ucred *cred, struct label *newlabel)
1298 {
1299 
1300 	ASSERT_CRED_LABEL(cred->cr_label);
1301 	ASSERT_CRED_LABEL(newlabel);
1302 }
1303 
1304 static void
1305 mac_test_thread_userret(struct thread *td)
1306 {
1307 
1308 	printf("mac_test_thread_userret(process = %d)\n",
1309 	    curthread->td_proc->p_pid);
1310 }
1311 
1312 /*
1313  * Label cleanup/flush operations
1314  */
1315 static void
1316 mac_test_cleanup_sysv_msgmsg(struct label *msglabel)
1317 {
1318 
1319 	ASSERT_SYSVIPCMSG_LABEL(msglabel);
1320 }
1321 
1322 static void
1323 mac_test_cleanup_sysv_msgqueue(struct label *msqlabel)
1324 {
1325 
1326 	ASSERT_SYSVIPCMSQ_LABEL(msqlabel);
1327 }
1328 
1329 static void
1330 mac_test_cleanup_sysv_sem(struct label *semalabel)
1331 {
1332 
1333 	ASSERT_SYSVIPCSEM_LABEL(semalabel);
1334 }
1335 
1336 static void
1337 mac_test_cleanup_sysv_shm(struct label *shmlabel)
1338 {
1339 
1340 	ASSERT_SYSVIPCSHM_LABEL(shmlabel);
1341 }
1342 
1343 /*
1344  * Access control checks.
1345  */
1346 static int
1347 mac_test_check_bpfdesc_receive(struct bpf_d *bpf_d, struct label *bpflabel,
1348     struct ifnet *ifnet, struct label *ifnetlabel)
1349 {
1350 
1351 	ASSERT_BPF_LABEL(bpflabel);
1352 	ASSERT_IFNET_LABEL(ifnetlabel);
1353 
1354 	return (0);
1355 }
1356 
1357 static int
1358 mac_test_check_cred_relabel(struct ucred *cred, struct label *newlabel)
1359 {
1360 
1361 	ASSERT_CRED_LABEL(cred->cr_label);
1362 	ASSERT_CRED_LABEL(newlabel);
1363 
1364 	return (0);
1365 }
1366 
1367 static int
1368 mac_test_check_cred_visible(struct ucred *u1, struct ucred *u2)
1369 {
1370 
1371 	ASSERT_CRED_LABEL(u1->cr_label);
1372 	ASSERT_CRED_LABEL(u2->cr_label);
1373 
1374 	return (0);
1375 }
1376 
1377 static int
1378 mac_test_check_ifnet_relabel(struct ucred *cred, struct ifnet *ifnet,
1379     struct label *ifnetlabel, struct label *newlabel)
1380 {
1381 
1382 	ASSERT_CRED_LABEL(cred->cr_label);
1383 	ASSERT_IFNET_LABEL(ifnetlabel);
1384 	ASSERT_IFNET_LABEL(newlabel);
1385 	return (0);
1386 }
1387 
1388 static int
1389 mac_test_check_ifnet_transmit(struct ifnet *ifnet, struct label *ifnetlabel,
1390     struct mbuf *m, struct label *mbuflabel)
1391 {
1392 
1393 	ASSERT_IFNET_LABEL(ifnetlabel);
1394 	ASSERT_MBUF_LABEL(mbuflabel);
1395 
1396 	return (0);
1397 }
1398 
1399 static int
1400 mac_test_check_inpcb_deliver(struct inpcb *inp, struct label *inplabel,
1401     struct mbuf *m, struct label *mlabel)
1402 {
1403 
1404 	ASSERT_INPCB_LABEL(inplabel);
1405 	ASSERT_MBUF_LABEL(mlabel);
1406 
1407 	return (0);
1408 }
1409 
1410 static int
1411 mac_test_check_sysv_msgmsq(struct ucred *cred, struct msg *msgptr,
1412     struct label *msglabel, struct msqid_kernel *msqkptr,
1413     struct label *msqklabel)
1414 {
1415 
1416 	ASSERT_SYSVIPCMSQ_LABEL(msqklabel);
1417 	ASSERT_SYSVIPCMSG_LABEL(msglabel);
1418 	ASSERT_CRED_LABEL(cred->cr_label);
1419 
1420   	return (0);
1421 }
1422 
1423 static int
1424 mac_test_check_sysv_msgrcv(struct ucred *cred, struct msg *msgptr,
1425     struct label *msglabel)
1426 {
1427 
1428 	ASSERT_SYSVIPCMSG_LABEL(msglabel);
1429 	ASSERT_CRED_LABEL(cred->cr_label);
1430 
1431 	 return (0);
1432 }
1433 
1434 
1435 static int
1436 mac_test_check_sysv_msgrmid(struct ucred *cred, struct msg *msgptr,
1437     struct label *msglabel)
1438 {
1439 
1440 	ASSERT_SYSVIPCMSG_LABEL(msglabel);
1441 	ASSERT_CRED_LABEL(cred->cr_label);
1442 
1443 	return (0);
1444 }
1445 
1446 static int
1447 mac_test_check_sysv_msqget(struct ucred *cred, struct msqid_kernel *msqkptr,
1448     struct label *msqklabel)
1449 {
1450 
1451 	ASSERT_SYSVIPCMSQ_LABEL(msqklabel);
1452 	ASSERT_CRED_LABEL(cred->cr_label);
1453 
1454 	return (0);
1455 }
1456 
1457 static int
1458 mac_test_check_sysv_msqsnd(struct ucred *cred, struct msqid_kernel *msqkptr,
1459     struct label *msqklabel)
1460 {
1461 
1462 	ASSERT_SYSVIPCMSQ_LABEL(msqklabel);
1463 	ASSERT_CRED_LABEL(cred->cr_label);
1464 
1465 	return (0);
1466 }
1467 
1468 static int
1469 mac_test_check_sysv_msqrcv(struct ucred *cred, struct msqid_kernel *msqkptr,
1470     struct label *msqklabel)
1471 {
1472 
1473 	ASSERT_SYSVIPCMSQ_LABEL(msqklabel);
1474 	ASSERT_CRED_LABEL(cred->cr_label);
1475 
1476 	return (0);
1477 }
1478 
1479 static int
1480 mac_test_check_sysv_msqctl(struct ucred *cred, struct msqid_kernel *msqkptr,
1481     struct label *msqklabel, int cmd)
1482 {
1483 
1484 	ASSERT_SYSVIPCMSQ_LABEL(msqklabel);
1485 	ASSERT_CRED_LABEL(cred->cr_label);
1486 
1487 	return (0);
1488 }
1489 
1490 static int
1491 mac_test_check_sysv_semctl(struct ucred *cred, struct semid_kernel *semakptr,
1492     struct label *semaklabel, int cmd)
1493 {
1494 
1495 	ASSERT_CRED_LABEL(cred->cr_label);
1496 	ASSERT_SYSVIPCSEM_LABEL(semaklabel);
1497 
1498   	return (0);
1499 }
1500 
1501 static int
1502 mac_test_check_sysv_semget(struct ucred *cred, struct semid_kernel *semakptr,
1503     struct label *semaklabel)
1504 {
1505 
1506 	ASSERT_CRED_LABEL(cred->cr_label);
1507 	ASSERT_SYSVIPCSEM_LABEL(semaklabel);
1508 
1509 	return (0);
1510 }
1511 
1512 static int
1513 mac_test_check_sysv_semop(struct ucred *cred, struct semid_kernel *semakptr,
1514     struct label *semaklabel, size_t accesstype)
1515 {
1516 
1517 	ASSERT_CRED_LABEL(cred->cr_label);
1518 	ASSERT_SYSVIPCSEM_LABEL(semaklabel);
1519 
1520 	return (0);
1521 }
1522 
1523 static int
1524 mac_test_check_sysv_shmat(struct ucred *cred, struct shmid_kernel *shmsegptr,
1525     struct label *shmseglabel, int shmflg)
1526 {
1527 
1528 	ASSERT_CRED_LABEL(cred->cr_label);
1529 	ASSERT_SYSVIPCSHM_LABEL(shmseglabel);
1530 
1531   	return (0);
1532 }
1533 
1534 static int
1535 mac_test_check_sysv_shmctl(struct ucred *cred, struct shmid_kernel *shmsegptr,
1536     struct label *shmseglabel, int cmd)
1537 {
1538 
1539 	ASSERT_CRED_LABEL(cred->cr_label);
1540 	ASSERT_SYSVIPCSHM_LABEL(shmseglabel);
1541 
1542   	return (0);
1543 }
1544 
1545 static int
1546 mac_test_check_sysv_shmdt(struct ucred *cred, struct shmid_kernel *shmsegptr,
1547     struct label *shmseglabel)
1548 {
1549 
1550 	ASSERT_CRED_LABEL(cred->cr_label);
1551 	ASSERT_SYSVIPCSHM_LABEL(shmseglabel);
1552 
1553 	return (0);
1554 }
1555 
1556 static int
1557 mac_test_check_sysv_shmget(struct ucred *cred, struct shmid_kernel *shmsegptr,
1558     struct label *shmseglabel, int shmflg)
1559 {
1560 
1561 	ASSERT_CRED_LABEL(cred->cr_label);
1562 	ASSERT_SYSVIPCSHM_LABEL(shmseglabel);
1563 
1564 	return (0);
1565 }
1566 
1567 static int
1568 mac_test_check_kenv_dump(struct ucred *cred)
1569 {
1570 
1571 	ASSERT_CRED_LABEL(cred->cr_label);
1572 
1573 	return (0);
1574 }
1575 
1576 static int
1577 mac_test_check_kenv_get(struct ucred *cred, char *name)
1578 {
1579 
1580 	ASSERT_CRED_LABEL(cred->cr_label);
1581 
1582 	return (0);
1583 }
1584 
1585 static int
1586 mac_test_check_kenv_set(struct ucred *cred, char *name, char *value)
1587 {
1588 
1589 	ASSERT_CRED_LABEL(cred->cr_label);
1590 
1591 	return (0);
1592 }
1593 
1594 static int
1595 mac_test_check_kenv_unset(struct ucred *cred, char *name)
1596 {
1597 
1598 	ASSERT_CRED_LABEL(cred->cr_label);
1599 
1600 	return (0);
1601 }
1602 
1603 static int
1604 mac_test_check_kld_load(struct ucred *cred, struct vnode *vp,
1605     struct label *label)
1606 {
1607 
1608 	ASSERT_CRED_LABEL(cred->cr_label);
1609 	ASSERT_VNODE_LABEL(label);
1610 
1611 	return (0);
1612 }
1613 
1614 static int
1615 mac_test_check_kld_stat(struct ucred *cred)
1616 {
1617 
1618 	ASSERT_CRED_LABEL(cred->cr_label);
1619 
1620 	return (0);
1621 }
1622 
1623 static int
1624 mac_test_check_kld_unload(struct ucred *cred)
1625 {
1626 
1627 	ASSERT_CRED_LABEL(cred->cr_label);
1628 
1629 	return (0);
1630 }
1631 
1632 static int
1633 mac_test_check_mount_stat(struct ucred *cred, struct mount *mp,
1634     struct label *mntlabel)
1635 {
1636 
1637 	ASSERT_CRED_LABEL(cred->cr_label);
1638 	ASSERT_MOUNT_LABEL(mntlabel);
1639 
1640 	return (0);
1641 }
1642 
1643 static int
1644 mac_test_check_pipe_ioctl(struct ucred *cred, struct pipepair *pp,
1645     struct label *pipelabel, unsigned long cmd, void /* caddr_t */ *data)
1646 {
1647 
1648 	ASSERT_CRED_LABEL(cred->cr_label);
1649 	ASSERT_PIPE_LABEL(pipelabel);
1650 
1651 	return (0);
1652 }
1653 
1654 static int
1655 mac_test_check_pipe_poll(struct ucred *cred, struct pipepair *pp,
1656     struct label *pipelabel)
1657 {
1658 
1659 	ASSERT_CRED_LABEL(cred->cr_label);
1660 	ASSERT_PIPE_LABEL(pipelabel);
1661 
1662 	return (0);
1663 }
1664 
1665 static int
1666 mac_test_check_pipe_read(struct ucred *cred, struct pipepair *pp,
1667     struct label *pipelabel)
1668 {
1669 
1670 	ASSERT_CRED_LABEL(cred->cr_label);
1671 	ASSERT_PIPE_LABEL(pipelabel);
1672 
1673 	return (0);
1674 }
1675 
1676 static int
1677 mac_test_check_pipe_relabel(struct ucred *cred, struct pipepair *pp,
1678     struct label *pipelabel, struct label *newlabel)
1679 {
1680 
1681 	ASSERT_CRED_LABEL(cred->cr_label);
1682 	ASSERT_PIPE_LABEL(pipelabel);
1683 	ASSERT_PIPE_LABEL(newlabel);
1684 
1685 	return (0);
1686 }
1687 
1688 static int
1689 mac_test_check_pipe_stat(struct ucred *cred, struct pipepair *pp,
1690     struct label *pipelabel)
1691 {
1692 
1693 	ASSERT_CRED_LABEL(cred->cr_label);
1694 	ASSERT_PIPE_LABEL(pipelabel);
1695 
1696 	return (0);
1697 }
1698 
1699 static int
1700 mac_test_check_pipe_write(struct ucred *cred, struct pipepair *pp,
1701     struct label *pipelabel)
1702 {
1703 
1704 	ASSERT_CRED_LABEL(cred->cr_label);
1705 	ASSERT_PIPE_LABEL(pipelabel);
1706 
1707 	return (0);
1708 }
1709 
1710 static int
1711 mac_test_check_posix_sem(struct ucred *cred, struct ksem *ksemptr,
1712     struct label *ks_label)
1713 {
1714 
1715 	ASSERT_CRED_LABEL(cred->cr_label);
1716 	ASSERT_POSIX_LABEL(ks_label);
1717 
1718 	return (0);
1719 }
1720 
1721 static int
1722 mac_test_check_proc_debug(struct ucred *cred, struct proc *proc)
1723 {
1724 
1725 	ASSERT_CRED_LABEL(cred->cr_label);
1726 	ASSERT_CRED_LABEL(proc->p_ucred->cr_label);
1727 
1728 	return (0);
1729 }
1730 
1731 static int
1732 mac_test_check_proc_sched(struct ucred *cred, struct proc *proc)
1733 {
1734 
1735 	ASSERT_CRED_LABEL(cred->cr_label);
1736 	ASSERT_CRED_LABEL(proc->p_ucred->cr_label);
1737 
1738 	return (0);
1739 }
1740 
1741 static int
1742 mac_test_check_proc_signal(struct ucred *cred, struct proc *proc, int signum)
1743 {
1744 
1745 	ASSERT_CRED_LABEL(cred->cr_label);
1746 	ASSERT_CRED_LABEL(proc->p_ucred->cr_label);
1747 
1748 	return (0);
1749 }
1750 
1751 static int
1752 mac_test_check_proc_setuid(struct ucred *cred, uid_t uid)
1753 {
1754 
1755 	ASSERT_CRED_LABEL(cred->cr_label);
1756 
1757 	return (0);
1758 }
1759 
1760 static int
1761 mac_test_check_proc_seteuid(struct ucred *cred, uid_t euid)
1762 {
1763 
1764 	ASSERT_CRED_LABEL(cred->cr_label);
1765 
1766 	return (0);
1767 }
1768 
1769 static int
1770 mac_test_check_proc_setgid(struct ucred *cred, gid_t gid)
1771 {
1772 
1773 	ASSERT_CRED_LABEL(cred->cr_label);
1774 
1775 	return (0);
1776 }
1777 
1778 static int
1779 mac_test_check_proc_setegid(struct ucred *cred, gid_t egid)
1780 {
1781 
1782 	ASSERT_CRED_LABEL(cred->cr_label);
1783 
1784 	return (0);
1785 }
1786 
1787 static int
1788 mac_test_check_proc_setgroups(struct ucred *cred, int ngroups,
1789 	gid_t *gidset)
1790 {
1791 
1792 	ASSERT_CRED_LABEL(cred->cr_label);
1793 
1794 	return (0);
1795 }
1796 
1797 static int
1798 mac_test_check_proc_setreuid(struct ucred *cred, uid_t ruid, uid_t euid)
1799 {
1800 
1801 	ASSERT_CRED_LABEL(cred->cr_label);
1802 
1803 	return (0);
1804 }
1805 
1806 static int
1807 mac_test_check_proc_setregid(struct ucred *cred, gid_t rgid, gid_t egid)
1808 {
1809 
1810 	ASSERT_CRED_LABEL(cred->cr_label);
1811 
1812 	return (0);
1813 }
1814 
1815 static int
1816 mac_test_check_proc_setresuid(struct ucred *cred, uid_t ruid, uid_t euid,
1817 	uid_t suid)
1818 {
1819 
1820 	ASSERT_CRED_LABEL(cred->cr_label);
1821 
1822 	return (0);
1823 }
1824 
1825 static int
1826 mac_test_check_proc_setresgid(struct ucred *cred, gid_t rgid, gid_t egid,
1827 	gid_t sgid)
1828 {
1829 
1830 	ASSERT_CRED_LABEL(cred->cr_label);
1831 
1832 	return (0);
1833 }
1834 
1835 static int
1836 mac_test_check_proc_wait(struct ucred *cred, struct proc *proc)
1837 {
1838 
1839 	ASSERT_CRED_LABEL(cred->cr_label);
1840 	ASSERT_CRED_LABEL(proc->p_ucred->cr_label);
1841 
1842 	return (0);
1843 }
1844 
1845 static int
1846 mac_test_check_socket_accept(struct ucred *cred, struct socket *socket,
1847     struct label *socketlabel)
1848 {
1849 
1850 	ASSERT_CRED_LABEL(cred->cr_label);
1851 	ASSERT_SOCKET_LABEL(socketlabel);
1852 
1853 	return (0);
1854 }
1855 
1856 static int
1857 mac_test_check_socket_bind(struct ucred *cred, struct socket *socket,
1858     struct label *socketlabel, struct sockaddr *sockaddr)
1859 {
1860 
1861 	ASSERT_CRED_LABEL(cred->cr_label);
1862 	ASSERT_SOCKET_LABEL(socketlabel);
1863 
1864 	return (0);
1865 }
1866 
1867 static int
1868 mac_test_check_socket_connect(struct ucred *cred, struct socket *socket,
1869     struct label *socketlabel, struct sockaddr *sockaddr)
1870 {
1871 
1872 	ASSERT_CRED_LABEL(cred->cr_label);
1873 	ASSERT_SOCKET_LABEL(socketlabel);
1874 
1875 	return (0);
1876 }
1877 
1878 static int
1879 mac_test_check_socket_deliver(struct socket *socket, struct label *socketlabel,
1880     struct mbuf *m, struct label *mbuflabel)
1881 {
1882 
1883 	ASSERT_SOCKET_LABEL(socketlabel);
1884 	ASSERT_MBUF_LABEL(mbuflabel);
1885 
1886 	return (0);
1887 }
1888 
1889 static int
1890 mac_test_check_socket_listen(struct ucred *cred, struct socket *socket,
1891     struct label *socketlabel)
1892 {
1893 
1894 	ASSERT_CRED_LABEL(cred->cr_label);
1895 	ASSERT_SOCKET_LABEL(socketlabel);
1896 
1897 	return (0);
1898 }
1899 
1900 static int
1901 mac_test_check_socket_poll(struct ucred *cred, struct socket *socket,
1902     struct label *socketlabel)
1903 {
1904 
1905 	ASSERT_CRED_LABEL(cred->cr_label);
1906 	ASSERT_SOCKET_LABEL(socketlabel);
1907 
1908 	return (0);
1909 }
1910 
1911 static int
1912 mac_test_check_socket_receive(struct ucred *cred, struct socket *socket,
1913     struct label *socketlabel)
1914 {
1915 
1916 	ASSERT_CRED_LABEL(cred->cr_label);
1917 	ASSERT_SOCKET_LABEL(socketlabel);
1918 
1919 	return (0);
1920 }
1921 
1922 static int
1923 mac_test_check_socket_relabel(struct ucred *cred, struct socket *socket,
1924     struct label *socketlabel, struct label *newlabel)
1925 {
1926 
1927 	ASSERT_CRED_LABEL(cred->cr_label);
1928 	ASSERT_SOCKET_LABEL(socketlabel);
1929 	ASSERT_SOCKET_LABEL(newlabel);
1930 
1931 	return (0);
1932 }
1933 
1934 static int
1935 mac_test_check_socket_send(struct ucred *cred, struct socket *socket,
1936     struct label *socketlabel)
1937 {
1938 
1939 	ASSERT_CRED_LABEL(cred->cr_label);
1940 	ASSERT_SOCKET_LABEL(socketlabel);
1941 
1942 	return (0);
1943 }
1944 
1945 static int
1946 mac_test_check_socket_stat(struct ucred *cred, struct socket *socket,
1947     struct label *socketlabel)
1948 {
1949 
1950 	ASSERT_CRED_LABEL(cred->cr_label);
1951 	ASSERT_SOCKET_LABEL(socketlabel);
1952 
1953 	return (0);
1954 }
1955 
1956 static int
1957 mac_test_check_socket_visible(struct ucred *cred, struct socket *socket,
1958     struct label *socketlabel)
1959 {
1960 
1961 	ASSERT_CRED_LABEL(cred->cr_label);
1962 	ASSERT_SOCKET_LABEL(socketlabel);
1963 
1964 	return (0);
1965 }
1966 
1967 static int
1968 mac_test_check_sysarch_ioperm(struct ucred *cred)
1969 {
1970 
1971 	ASSERT_CRED_LABEL(cred->cr_label);
1972 
1973 	return (0);
1974 }
1975 
1976 static int
1977 mac_test_check_system_acct(struct ucred *cred, struct vnode *vp,
1978     struct label *label)
1979 {
1980 
1981 	ASSERT_CRED_LABEL(cred->cr_label);
1982 
1983 	return (0);
1984 }
1985 
1986 static int
1987 mac_test_check_system_reboot(struct ucred *cred, int how)
1988 {
1989 
1990 	ASSERT_CRED_LABEL(cred->cr_label);
1991 
1992 	return (0);
1993 }
1994 
1995 static int
1996 mac_test_check_system_settime(struct ucred *cred)
1997 {
1998 
1999 	ASSERT_CRED_LABEL(cred->cr_label);
2000 
2001 	return (0);
2002 }
2003 
2004 static int
2005 mac_test_check_system_swapon(struct ucred *cred, struct vnode *vp,
2006     struct label *label)
2007 {
2008 
2009 	ASSERT_CRED_LABEL(cred->cr_label);
2010 	ASSERT_VNODE_LABEL(label);
2011 
2012 	return (0);
2013 }
2014 
2015 static int
2016 mac_test_check_system_swapoff(struct ucred *cred, struct vnode *vp,
2017     struct label *label)
2018 {
2019 
2020 	ASSERT_CRED_LABEL(cred->cr_label);
2021 	ASSERT_VNODE_LABEL(label);
2022 
2023 	return (0);
2024 }
2025 
2026 static int
2027 mac_test_check_system_sysctl(struct ucred *cred, struct sysctl_oid *oidp,
2028     void *arg1, int arg2, struct sysctl_req *req)
2029 {
2030 
2031 	ASSERT_CRED_LABEL(cred->cr_label);
2032 
2033 	return (0);
2034 }
2035 
2036 static int
2037 mac_test_check_vnode_access(struct ucred *cred, struct vnode *vp,
2038     struct label *label, int acc_mode)
2039 {
2040 
2041 	ASSERT_CRED_LABEL(cred->cr_label);
2042 	ASSERT_VNODE_LABEL(label);
2043 
2044 	return (0);
2045 }
2046 
2047 static int
2048 mac_test_check_vnode_chdir(struct ucred *cred, struct vnode *dvp,
2049     struct label *dlabel)
2050 {
2051 
2052 	ASSERT_CRED_LABEL(cred->cr_label);
2053 	ASSERT_VNODE_LABEL(dlabel);
2054 
2055 	return (0);
2056 }
2057 
2058 static int
2059 mac_test_check_vnode_chroot(struct ucred *cred, struct vnode *dvp,
2060     struct label *dlabel)
2061 {
2062 
2063 	ASSERT_CRED_LABEL(cred->cr_label);
2064 	ASSERT_VNODE_LABEL(dlabel);
2065 
2066 	return (0);
2067 }
2068 
2069 static int
2070 mac_test_check_vnode_create(struct ucred *cred, struct vnode *dvp,
2071     struct label *dlabel, struct componentname *cnp, struct vattr *vap)
2072 {
2073 
2074 	ASSERT_CRED_LABEL(cred->cr_label);
2075 	ASSERT_VNODE_LABEL(dlabel);
2076 
2077 	return (0);
2078 }
2079 
2080 static int
2081 mac_test_check_vnode_delete(struct ucred *cred, struct vnode *dvp,
2082     struct label *dlabel, struct vnode *vp, struct label *label,
2083     struct componentname *cnp)
2084 {
2085 
2086 	ASSERT_CRED_LABEL(cred->cr_label);
2087 	ASSERT_VNODE_LABEL(dlabel);
2088 	ASSERT_VNODE_LABEL(label);
2089 
2090 	return (0);
2091 }
2092 
2093 static int
2094 mac_test_check_vnode_deleteacl(struct ucred *cred, struct vnode *vp,
2095     struct label *label, acl_type_t type)
2096 {
2097 
2098 	ASSERT_CRED_LABEL(cred->cr_label);
2099 	ASSERT_VNODE_LABEL(label);
2100 
2101 	return (0);
2102 }
2103 
2104 static int
2105 mac_test_check_vnode_deleteextattr(struct ucred *cred, struct vnode *vp,
2106     struct label *label, int attrnamespace, const char *name)
2107 {
2108 
2109 	ASSERT_CRED_LABEL(cred->cr_label);
2110 	ASSERT_VNODE_LABEL(label);
2111 
2112 	return (0);
2113 }
2114 
2115 static int
2116 mac_test_check_vnode_exec(struct ucred *cred, struct vnode *vp,
2117     struct label *label, struct image_params *imgp,
2118     struct label *execlabel)
2119 {
2120 
2121 	ASSERT_CRED_LABEL(cred->cr_label);
2122 	ASSERT_VNODE_LABEL(label);
2123 	if (execlabel != NULL) {
2124 		ASSERT_CRED_LABEL(execlabel);
2125 	}
2126 
2127 	return (0);
2128 }
2129 
2130 static int
2131 mac_test_check_vnode_getacl(struct ucred *cred, struct vnode *vp,
2132     struct label *label, acl_type_t type)
2133 {
2134 
2135 	ASSERT_CRED_LABEL(cred->cr_label);
2136 	ASSERT_VNODE_LABEL(label);
2137 
2138 	return (0);
2139 }
2140 
2141 static int
2142 mac_test_check_vnode_getextattr(struct ucred *cred, struct vnode *vp,
2143     struct label *label, int attrnamespace, const char *name, struct uio *uio)
2144 {
2145 
2146 	ASSERT_CRED_LABEL(cred->cr_label);
2147 	ASSERT_VNODE_LABEL(label);
2148 
2149 	return (0);
2150 }
2151 
2152 static int
2153 mac_test_check_vnode_link(struct ucred *cred, struct vnode *dvp,
2154     struct label *dlabel, struct vnode *vp, struct label *label,
2155     struct componentname *cnp)
2156 {
2157 
2158 	ASSERT_CRED_LABEL(cred->cr_label);
2159 	ASSERT_VNODE_LABEL(dlabel);
2160 	ASSERT_VNODE_LABEL(label);
2161 
2162 	return (0);
2163 }
2164 
2165 static int
2166 mac_test_check_vnode_listextattr(struct ucred *cred, struct vnode *vp,
2167     struct label *label, int attrnamespace)
2168 {
2169 
2170 	ASSERT_CRED_LABEL(cred->cr_label);
2171 	ASSERT_VNODE_LABEL(label);
2172 
2173 	return (0);
2174 }
2175 
2176 static int
2177 mac_test_check_vnode_lookup(struct ucred *cred, struct vnode *dvp,
2178     struct label *dlabel, struct componentname *cnp)
2179 {
2180 
2181 	ASSERT_CRED_LABEL(cred->cr_label);
2182 	ASSERT_VNODE_LABEL(dlabel);
2183 
2184 	return (0);
2185 }
2186 
2187 static int
2188 mac_test_check_vnode_mmap(struct ucred *cred, struct vnode *vp,
2189     struct label *label, int prot, int flags)
2190 {
2191 
2192 	ASSERT_CRED_LABEL(cred->cr_label);
2193 	ASSERT_VNODE_LABEL(label);
2194 
2195 	return (0);
2196 }
2197 
2198 static int
2199 mac_test_check_vnode_open(struct ucred *cred, struct vnode *vp,
2200     struct label *filelabel, int acc_mode)
2201 {
2202 
2203 	ASSERT_CRED_LABEL(cred->cr_label);
2204 	ASSERT_VNODE_LABEL(filelabel);
2205 
2206 	return (0);
2207 }
2208 
2209 static int
2210 mac_test_check_vnode_poll(struct ucred *active_cred, struct ucred *file_cred,
2211     struct vnode *vp, struct label *label)
2212 {
2213 
2214 	ASSERT_CRED_LABEL(active_cred->cr_label);
2215 	ASSERT_CRED_LABEL(file_cred->cr_label);
2216 	ASSERT_VNODE_LABEL(label);
2217 
2218 	return (0);
2219 }
2220 
2221 static int
2222 mac_test_check_vnode_read(struct ucred *active_cred, struct ucred *file_cred,
2223     struct vnode *vp, struct label *label)
2224 {
2225 
2226 	ASSERT_CRED_LABEL(active_cred->cr_label);
2227 	if (file_cred != NULL) {
2228 		ASSERT_CRED_LABEL(file_cred->cr_label);
2229 	}
2230 	ASSERT_VNODE_LABEL(label);
2231 
2232 	return (0);
2233 }
2234 
2235 static int
2236 mac_test_check_vnode_readdir(struct ucred *cred, struct vnode *dvp,
2237     struct label *dlabel)
2238 {
2239 
2240 	ASSERT_CRED_LABEL(cred->cr_label);
2241 	ASSERT_VNODE_LABEL(dlabel);
2242 
2243 	return (0);
2244 }
2245 
2246 static int
2247 mac_test_check_vnode_readlink(struct ucred *cred, struct vnode *vp,
2248     struct label *vnodelabel)
2249 {
2250 
2251 	ASSERT_CRED_LABEL(cred->cr_label);
2252 	ASSERT_VNODE_LABEL(vnodelabel);
2253 
2254 	return (0);
2255 }
2256 
2257 static int
2258 mac_test_check_vnode_relabel(struct ucred *cred, struct vnode *vp,
2259     struct label *vnodelabel, struct label *newlabel)
2260 {
2261 
2262 	ASSERT_CRED_LABEL(cred->cr_label);
2263 	ASSERT_VNODE_LABEL(vnodelabel);
2264 	ASSERT_VNODE_LABEL(newlabel);
2265 
2266 	return (0);
2267 }
2268 
2269 static int
2270 mac_test_check_vnode_rename_from(struct ucred *cred, struct vnode *dvp,
2271     struct label *dlabel, struct vnode *vp, struct label *label,
2272     struct componentname *cnp)
2273 {
2274 
2275 	ASSERT_CRED_LABEL(cred->cr_label);
2276 	ASSERT_VNODE_LABEL(dlabel);
2277 	ASSERT_VNODE_LABEL(label);
2278 
2279 	return (0);
2280 }
2281 
2282 static int
2283 mac_test_check_vnode_rename_to(struct ucred *cred, struct vnode *dvp,
2284     struct label *dlabel, struct vnode *vp, struct label *label, int samedir,
2285     struct componentname *cnp)
2286 {
2287 
2288 	ASSERT_CRED_LABEL(cred->cr_label);
2289 	ASSERT_VNODE_LABEL(dlabel);
2290 
2291 	if (vp != NULL) {
2292 		ASSERT_VNODE_LABEL(label);
2293 	}
2294 
2295 	return (0);
2296 }
2297 
2298 static int
2299 mac_test_check_vnode_revoke(struct ucred *cred, struct vnode *vp,
2300     struct label *label)
2301 {
2302 
2303 	ASSERT_CRED_LABEL(cred->cr_label);
2304 	ASSERT_VNODE_LABEL(label);
2305 
2306 	return (0);
2307 }
2308 
2309 static int
2310 mac_test_check_vnode_setacl(struct ucred *cred, struct vnode *vp,
2311     struct label *label, acl_type_t type, struct acl *acl)
2312 {
2313 
2314 	ASSERT_CRED_LABEL(cred->cr_label);
2315 	ASSERT_VNODE_LABEL(label);
2316 
2317 	return (0);
2318 }
2319 
2320 static int
2321 mac_test_check_vnode_setextattr(struct ucred *cred, struct vnode *vp,
2322     struct label *label, int attrnamespace, const char *name, struct uio *uio)
2323 {
2324 
2325 	ASSERT_CRED_LABEL(cred->cr_label);
2326 	ASSERT_VNODE_LABEL(label);
2327 
2328 	return (0);
2329 }
2330 
2331 static int
2332 mac_test_check_vnode_setflags(struct ucred *cred, struct vnode *vp,
2333     struct label *label, u_long flags)
2334 {
2335 
2336 	ASSERT_CRED_LABEL(cred->cr_label);
2337 	ASSERT_VNODE_LABEL(label);
2338 
2339 	return (0);
2340 }
2341 
2342 static int
2343 mac_test_check_vnode_setmode(struct ucred *cred, struct vnode *vp,
2344     struct label *label, mode_t mode)
2345 {
2346 
2347 	ASSERT_CRED_LABEL(cred->cr_label);
2348 	ASSERT_VNODE_LABEL(label);
2349 
2350 	return (0);
2351 }
2352 
2353 static int
2354 mac_test_check_vnode_setowner(struct ucred *cred, struct vnode *vp,
2355     struct label *label, uid_t uid, gid_t gid)
2356 {
2357 
2358 	ASSERT_CRED_LABEL(cred->cr_label);
2359 	ASSERT_VNODE_LABEL(label);
2360 
2361 	return (0);
2362 }
2363 
2364 static int
2365 mac_test_check_vnode_setutimes(struct ucred *cred, struct vnode *vp,
2366     struct label *label, struct timespec atime, struct timespec mtime)
2367 {
2368 
2369 	ASSERT_CRED_LABEL(cred->cr_label);
2370 	ASSERT_VNODE_LABEL(label);
2371 
2372 	return (0);
2373 }
2374 
2375 static int
2376 mac_test_check_vnode_stat(struct ucred *active_cred, struct ucred *file_cred,
2377     struct vnode *vp, struct label *label)
2378 {
2379 
2380 	ASSERT_CRED_LABEL(active_cred->cr_label);
2381 	if (file_cred != NULL) {
2382 		ASSERT_CRED_LABEL(file_cred->cr_label);
2383 	}
2384 	ASSERT_VNODE_LABEL(label);
2385 
2386 	return (0);
2387 }
2388 
2389 static int
2390 mac_test_check_vnode_write(struct ucred *active_cred,
2391     struct ucred *file_cred, struct vnode *vp, struct label *label)
2392 {
2393 
2394 	ASSERT_CRED_LABEL(active_cred->cr_label);
2395 	if (file_cred != NULL) {
2396 		ASSERT_CRED_LABEL(file_cred->cr_label);
2397 	}
2398 	ASSERT_VNODE_LABEL(label);
2399 
2400 	return (0);
2401 }
2402 
2403 static struct mac_policy_ops mac_test_ops =
2404 {
2405 	.mpo_destroy = mac_test_destroy,
2406 	.mpo_init = mac_test_init,
2407 	.mpo_syscall = mac_test_syscall,
2408 	.mpo_init_bpfdesc_label = mac_test_init_bpfdesc_label,
2409 	.mpo_init_cred_label = mac_test_init_cred_label,
2410 	.mpo_init_devfsdirent_label = mac_test_init_devfsdirent_label,
2411 	.mpo_init_ifnet_label = mac_test_init_ifnet_label,
2412 	.mpo_init_sysv_msgmsg_label = mac_test_init_sysv_msgmsg_label,
2413 	.mpo_init_sysv_msgqueue_label = mac_test_init_sysv_msgqueue_label,
2414 	.mpo_init_sysv_sem_label = mac_test_init_sysv_sem_label,
2415 	.mpo_init_sysv_shm_label = mac_test_init_sysv_shm_label,
2416 	.mpo_init_inpcb_label = mac_test_init_inpcb_label,
2417 	.mpo_init_ipq_label = mac_test_init_ipq_label,
2418 	.mpo_init_mbuf_label = mac_test_init_mbuf_label,
2419 	.mpo_init_mount_label = mac_test_init_mount_label,
2420 	.mpo_init_mount_fs_label = mac_test_init_mount_fs_label,
2421 	.mpo_init_pipe_label = mac_test_init_pipe_label,
2422 	.mpo_init_posix_sem_label = mac_test_init_posix_sem_label,
2423 	.mpo_init_proc_label = mac_test_init_proc_label,
2424 	.mpo_init_socket_label = mac_test_init_socket_label,
2425 	.mpo_init_socket_peer_label = mac_test_init_socket_peer_label,
2426 	.mpo_init_vnode_label = mac_test_init_vnode_label,
2427 	.mpo_destroy_bpfdesc_label = mac_test_destroy_bpfdesc_label,
2428 	.mpo_destroy_cred_label = mac_test_destroy_cred_label,
2429 	.mpo_destroy_devfsdirent_label = mac_test_destroy_devfsdirent_label,
2430 	.mpo_destroy_ifnet_label = mac_test_destroy_ifnet_label,
2431 	.mpo_destroy_sysv_msgmsg_label = mac_test_destroy_sysv_msgmsg_label,
2432 	.mpo_destroy_sysv_msgqueue_label =
2433 	    mac_test_destroy_sysv_msgqueue_label,
2434 	.mpo_destroy_sysv_sem_label = mac_test_destroy_sysv_sem_label,
2435 	.mpo_destroy_sysv_shm_label = mac_test_destroy_sysv_shm_label,
2436 	.mpo_destroy_inpcb_label = mac_test_destroy_inpcb_label,
2437 	.mpo_destroy_ipq_label = mac_test_destroy_ipq_label,
2438 	.mpo_destroy_mbuf_label = mac_test_destroy_mbuf_label,
2439 	.mpo_destroy_mount_label = mac_test_destroy_mount_label,
2440 	.mpo_destroy_mount_fs_label = mac_test_destroy_mount_fs_label,
2441 	.mpo_destroy_pipe_label = mac_test_destroy_pipe_label,
2442 	.mpo_destroy_posix_sem_label = mac_test_destroy_posix_sem_label,
2443 	.mpo_destroy_proc_label = mac_test_destroy_proc_label,
2444 	.mpo_destroy_socket_label = mac_test_destroy_socket_label,
2445 	.mpo_destroy_socket_peer_label = mac_test_destroy_socket_peer_label,
2446 	.mpo_destroy_vnode_label = mac_test_destroy_vnode_label,
2447 	.mpo_copy_cred_label = mac_test_copy_cred_label,
2448 	.mpo_copy_ifnet_label = mac_test_copy_ifnet_label,
2449 	.mpo_copy_mbuf_label = mac_test_copy_mbuf_label,
2450 	.mpo_copy_pipe_label = mac_test_copy_pipe_label,
2451 	.mpo_copy_socket_label = mac_test_copy_socket_label,
2452 	.mpo_copy_vnode_label = mac_test_copy_vnode_label,
2453 	.mpo_externalize_cred_label = mac_test_externalize_label,
2454 	.mpo_externalize_ifnet_label = mac_test_externalize_label,
2455 	.mpo_externalize_pipe_label = mac_test_externalize_label,
2456 	.mpo_externalize_socket_label = mac_test_externalize_label,
2457 	.mpo_externalize_socket_peer_label = mac_test_externalize_label,
2458 	.mpo_externalize_vnode_label = mac_test_externalize_label,
2459 	.mpo_internalize_cred_label = mac_test_internalize_label,
2460 	.mpo_internalize_ifnet_label = mac_test_internalize_label,
2461 	.mpo_internalize_pipe_label = mac_test_internalize_label,
2462 	.mpo_internalize_socket_label = mac_test_internalize_label,
2463 	.mpo_internalize_vnode_label = mac_test_internalize_label,
2464 	.mpo_associate_vnode_devfs = mac_test_associate_vnode_devfs,
2465 	.mpo_associate_vnode_extattr = mac_test_associate_vnode_extattr,
2466 	.mpo_associate_vnode_singlelabel = mac_test_associate_vnode_singlelabel,
2467 	.mpo_create_devfs_device = mac_test_create_devfs_device,
2468 	.mpo_create_devfs_directory = mac_test_create_devfs_directory,
2469 	.mpo_create_devfs_symlink = mac_test_create_devfs_symlink,
2470 	.mpo_create_vnode_extattr = mac_test_create_vnode_extattr,
2471 	.mpo_create_mount = mac_test_create_mount,
2472 	.mpo_create_root_mount = mac_test_create_root_mount,
2473 	.mpo_relabel_vnode = mac_test_relabel_vnode,
2474 	.mpo_setlabel_vnode_extattr = mac_test_setlabel_vnode_extattr,
2475 	.mpo_update_devfsdirent = mac_test_update_devfsdirent,
2476 	.mpo_create_mbuf_from_socket = mac_test_create_mbuf_from_socket,
2477 	.mpo_create_pipe = mac_test_create_pipe,
2478 	.mpo_create_posix_sem = mac_test_create_posix_sem,
2479 	.mpo_create_socket = mac_test_create_socket,
2480 	.mpo_create_socket_from_socket = mac_test_create_socket_from_socket,
2481 	.mpo_relabel_pipe = mac_test_relabel_pipe,
2482 	.mpo_relabel_socket = mac_test_relabel_socket,
2483 	.mpo_set_socket_peer_from_mbuf = mac_test_set_socket_peer_from_mbuf,
2484 	.mpo_set_socket_peer_from_socket = mac_test_set_socket_peer_from_socket,
2485 	.mpo_create_bpfdesc = mac_test_create_bpfdesc,
2486 	.mpo_create_ifnet = mac_test_create_ifnet,
2487 	.mpo_create_inpcb_from_socket = mac_test_create_inpcb_from_socket,
2488 	.mpo_create_sysv_msgmsg = mac_test_create_sysv_msgmsg,
2489 	.mpo_create_sysv_msgqueue = mac_test_create_sysv_msgqueue,
2490 	.mpo_create_sysv_sem = mac_test_create_sysv_sem,
2491 	.mpo_create_sysv_shm = mac_test_create_sysv_shm,
2492 	.mpo_create_datagram_from_ipq = mac_test_create_datagram_from_ipq,
2493 	.mpo_create_fragment = mac_test_create_fragment,
2494 	.mpo_create_ipq = mac_test_create_ipq,
2495 	.mpo_create_mbuf_from_inpcb = mac_test_create_mbuf_from_inpcb,
2496 	.mpo_create_mbuf_linklayer = mac_test_create_mbuf_linklayer,
2497 	.mpo_create_mbuf_from_bpfdesc = mac_test_create_mbuf_from_bpfdesc,
2498 	.mpo_create_mbuf_from_ifnet = mac_test_create_mbuf_from_ifnet,
2499 	.mpo_create_mbuf_multicast_encap = mac_test_create_mbuf_multicast_encap,
2500 	.mpo_create_mbuf_netlayer = mac_test_create_mbuf_netlayer,
2501 	.mpo_fragment_match = mac_test_fragment_match,
2502 	.mpo_reflect_mbuf_icmp = mac_test_reflect_mbuf_icmp,
2503 	.mpo_reflect_mbuf_tcp = mac_test_reflect_mbuf_tcp,
2504 	.mpo_relabel_ifnet = mac_test_relabel_ifnet,
2505 	.mpo_update_ipq = mac_test_update_ipq,
2506 	.mpo_inpcb_sosetlabel = mac_test_inpcb_sosetlabel,
2507 	.mpo_execve_transition = mac_test_execve_transition,
2508 	.mpo_execve_will_transition = mac_test_execve_will_transition,
2509 	.mpo_create_proc0 = mac_test_create_proc0,
2510 	.mpo_create_proc1 = mac_test_create_proc1,
2511 	.mpo_relabel_cred = mac_test_relabel_cred,
2512 	.mpo_thread_userret = mac_test_thread_userret,
2513 	.mpo_cleanup_sysv_msgmsg = mac_test_cleanup_sysv_msgmsg,
2514 	.mpo_cleanup_sysv_msgqueue = mac_test_cleanup_sysv_msgqueue,
2515 	.mpo_cleanup_sysv_sem = mac_test_cleanup_sysv_sem,
2516 	.mpo_cleanup_sysv_shm = mac_test_cleanup_sysv_shm,
2517 	.mpo_check_bpfdesc_receive = mac_test_check_bpfdesc_receive,
2518 	.mpo_check_cred_relabel = mac_test_check_cred_relabel,
2519 	.mpo_check_cred_visible = mac_test_check_cred_visible,
2520 	.mpo_check_ifnet_relabel = mac_test_check_ifnet_relabel,
2521 	.mpo_check_ifnet_transmit = mac_test_check_ifnet_transmit,
2522 	.mpo_check_inpcb_deliver = mac_test_check_inpcb_deliver,
2523 	.mpo_check_sysv_msgmsq = mac_test_check_sysv_msgmsq,
2524 	.mpo_check_sysv_msgrcv = mac_test_check_sysv_msgrcv,
2525 	.mpo_check_sysv_msgrmid = mac_test_check_sysv_msgrmid,
2526 	.mpo_check_sysv_msqget = mac_test_check_sysv_msqget,
2527 	.mpo_check_sysv_msqsnd = mac_test_check_sysv_msqsnd,
2528 	.mpo_check_sysv_msqrcv = mac_test_check_sysv_msqrcv,
2529 	.mpo_check_sysv_msqctl = mac_test_check_sysv_msqctl,
2530 	.mpo_check_sysv_semctl = mac_test_check_sysv_semctl,
2531 	.mpo_check_sysv_semget = mac_test_check_sysv_semget,
2532 	.mpo_check_sysv_semop = mac_test_check_sysv_semop,
2533 	.mpo_check_sysv_shmat = mac_test_check_sysv_shmat,
2534 	.mpo_check_sysv_shmctl = mac_test_check_sysv_shmctl,
2535 	.mpo_check_sysv_shmdt = mac_test_check_sysv_shmdt,
2536 	.mpo_check_sysv_shmget = mac_test_check_sysv_shmget,
2537 	.mpo_check_kenv_dump = mac_test_check_kenv_dump,
2538 	.mpo_check_kenv_get = mac_test_check_kenv_get,
2539 	.mpo_check_kenv_set = mac_test_check_kenv_set,
2540 	.mpo_check_kenv_unset = mac_test_check_kenv_unset,
2541 	.mpo_check_kld_load = mac_test_check_kld_load,
2542 	.mpo_check_kld_stat = mac_test_check_kld_stat,
2543 	.mpo_check_kld_unload = mac_test_check_kld_unload,
2544 	.mpo_check_mount_stat = mac_test_check_mount_stat,
2545 	.mpo_check_pipe_ioctl = mac_test_check_pipe_ioctl,
2546 	.mpo_check_pipe_poll = mac_test_check_pipe_poll,
2547 	.mpo_check_pipe_read = mac_test_check_pipe_read,
2548 	.mpo_check_pipe_relabel = mac_test_check_pipe_relabel,
2549 	.mpo_check_pipe_stat = mac_test_check_pipe_stat,
2550 	.mpo_check_pipe_write = mac_test_check_pipe_write,
2551 	.mpo_check_posix_sem_destroy = mac_test_check_posix_sem,
2552 	.mpo_check_posix_sem_getvalue = mac_test_check_posix_sem,
2553 	.mpo_check_posix_sem_open = mac_test_check_posix_sem,
2554 	.mpo_check_posix_sem_post = mac_test_check_posix_sem,
2555 	.mpo_check_posix_sem_unlink = mac_test_check_posix_sem,
2556 	.mpo_check_posix_sem_wait = mac_test_check_posix_sem,
2557 	.mpo_check_proc_debug = mac_test_check_proc_debug,
2558 	.mpo_check_proc_sched = mac_test_check_proc_sched,
2559 	.mpo_check_proc_setuid = mac_test_check_proc_setuid,
2560 	.mpo_check_proc_seteuid = mac_test_check_proc_seteuid,
2561 	.mpo_check_proc_setgid = mac_test_check_proc_setgid,
2562 	.mpo_check_proc_setegid = mac_test_check_proc_setegid,
2563 	.mpo_check_proc_setgroups = mac_test_check_proc_setgroups,
2564 	.mpo_check_proc_setreuid = mac_test_check_proc_setreuid,
2565 	.mpo_check_proc_setregid = mac_test_check_proc_setregid,
2566 	.mpo_check_proc_setresuid = mac_test_check_proc_setresuid,
2567 	.mpo_check_proc_setresgid = mac_test_check_proc_setresgid,
2568 	.mpo_check_proc_signal = mac_test_check_proc_signal,
2569 	.mpo_check_proc_wait = mac_test_check_proc_wait,
2570 	.mpo_check_socket_accept = mac_test_check_socket_accept,
2571 	.mpo_check_socket_bind = mac_test_check_socket_bind,
2572 	.mpo_check_socket_connect = mac_test_check_socket_connect,
2573 	.mpo_check_socket_deliver = mac_test_check_socket_deliver,
2574 	.mpo_check_socket_listen = mac_test_check_socket_listen,
2575 	.mpo_check_socket_poll = mac_test_check_socket_poll,
2576 	.mpo_check_socket_receive = mac_test_check_socket_receive,
2577 	.mpo_check_socket_relabel = mac_test_check_socket_relabel,
2578 	.mpo_check_socket_send = mac_test_check_socket_send,
2579 	.mpo_check_socket_stat = mac_test_check_socket_stat,
2580 	.mpo_check_socket_visible = mac_test_check_socket_visible,
2581 	.mpo_check_sysarch_ioperm = mac_test_check_sysarch_ioperm,
2582 	.mpo_check_system_acct = mac_test_check_system_acct,
2583 	.mpo_check_system_reboot = mac_test_check_system_reboot,
2584 	.mpo_check_system_settime = mac_test_check_system_settime,
2585 	.mpo_check_system_swapon = mac_test_check_system_swapon,
2586 	.mpo_check_system_swapoff = mac_test_check_system_swapoff,
2587 	.mpo_check_system_sysctl = mac_test_check_system_sysctl,
2588 	.mpo_check_vnode_access = mac_test_check_vnode_access,
2589 	.mpo_check_vnode_chdir = mac_test_check_vnode_chdir,
2590 	.mpo_check_vnode_chroot = mac_test_check_vnode_chroot,
2591 	.mpo_check_vnode_create = mac_test_check_vnode_create,
2592 	.mpo_check_vnode_delete = mac_test_check_vnode_delete,
2593 	.mpo_check_vnode_deleteacl = mac_test_check_vnode_deleteacl,
2594 	.mpo_check_vnode_deleteextattr = mac_test_check_vnode_deleteextattr,
2595 	.mpo_check_vnode_exec = mac_test_check_vnode_exec,
2596 	.mpo_check_vnode_getacl = mac_test_check_vnode_getacl,
2597 	.mpo_check_vnode_getextattr = mac_test_check_vnode_getextattr,
2598 	.mpo_check_vnode_link = mac_test_check_vnode_link,
2599 	.mpo_check_vnode_listextattr = mac_test_check_vnode_listextattr,
2600 	.mpo_check_vnode_lookup = mac_test_check_vnode_lookup,
2601 	.mpo_check_vnode_mmap = mac_test_check_vnode_mmap,
2602 	.mpo_check_vnode_open = mac_test_check_vnode_open,
2603 	.mpo_check_vnode_poll = mac_test_check_vnode_poll,
2604 	.mpo_check_vnode_read = mac_test_check_vnode_read,
2605 	.mpo_check_vnode_readdir = mac_test_check_vnode_readdir,
2606 	.mpo_check_vnode_readlink = mac_test_check_vnode_readlink,
2607 	.mpo_check_vnode_relabel = mac_test_check_vnode_relabel,
2608 	.mpo_check_vnode_rename_from = mac_test_check_vnode_rename_from,
2609 	.mpo_check_vnode_rename_to = mac_test_check_vnode_rename_to,
2610 	.mpo_check_vnode_revoke = mac_test_check_vnode_revoke,
2611 	.mpo_check_vnode_setacl = mac_test_check_vnode_setacl,
2612 	.mpo_check_vnode_setextattr = mac_test_check_vnode_setextattr,
2613 	.mpo_check_vnode_setflags = mac_test_check_vnode_setflags,
2614 	.mpo_check_vnode_setmode = mac_test_check_vnode_setmode,
2615 	.mpo_check_vnode_setowner = mac_test_check_vnode_setowner,
2616 	.mpo_check_vnode_setutimes = mac_test_check_vnode_setutimes,
2617 	.mpo_check_vnode_stat = mac_test_check_vnode_stat,
2618 	.mpo_check_vnode_write = mac_test_check_vnode_write,
2619 };
2620 
2621 MAC_POLICY_SET(&mac_test_ops, mac_test, "TrustedBSD MAC/Test",
2622     MPC_LOADTIME_FLAG_UNLOADOK | MPC_LOADTIME_FLAG_LABELMBUFS, &test_slot);
2623