mac_test.c revision 145855
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: head/sys/security/mac_test/mac_test.c 145855 2005-05-04 10:39:15Z rwatson $
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
78SYSCTL_DECL(_security_mac);
79
80SYSCTL_NODE(_security_mac, OID_AUTO, test, CTLFLAG_RW, 0,
81    "TrustedBSD mac_test policy controls");
82
83static int	mac_test_enabled = 1;
84SYSCTL_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
144static int	test_slot;
145SYSCTL_INT(_security_mac_test, OID_AUTO, slot, CTLFLAG_RD,
146    &test_slot, 0, "Slot allocated by framework");
147
148static int	init_count_bpfdesc;
149SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_bpfdesc, CTLFLAG_RD,
150    &init_count_bpfdesc, 0, "bpfdesc init calls");
151static int	init_count_cred;
152SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_cred, CTLFLAG_RD,
153    &init_count_cred, 0, "cred init calls");
154static int	init_count_devfsdirent;
155SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_devfsdirent, CTLFLAG_RD,
156    &init_count_devfsdirent, 0, "devfsdirent init calls");
157static int	init_count_ifnet;
158SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_ifnet, CTLFLAG_RD,
159    &init_count_ifnet, 0, "ifnet init calls");
160static int	init_count_inpcb;
161SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_inpcb, CTLFLAG_RD,
162    &init_count_inpcb, 0, "inpcb init calls");
163static int	init_count_sysv_msg;
164SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_sysv_msg, CTLFLAG_RD,
165    &init_count_sysv_msg, 0, "ipc_msg init calls");
166static int	init_count_sysv_msq;
167SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_sysv_msq, CTLFLAG_RD,
168    &init_count_sysv_msq, 0, "ipc_msq init calls");
169static int	init_count_sysv_sema;
170SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_sysv_sema, CTLFLAG_RD,
171    &init_count_sysv_sema, 0, "ipc_sema init calls");
172static int	init_count_sysv_shm;
173SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_sysv_shm, CTLFLAG_RD,
174    &init_count_sysv_shm, 0, "ipc_shm init calls");
175static int	init_count_ipq;
176SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_ipq, CTLFLAG_RD,
177    &init_count_ipq, 0, "ipq init calls");
178static int	init_count_mbuf;
179SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_mbuf, CTLFLAG_RD,
180    &init_count_mbuf, 0, "mbuf init calls");
181static int	init_count_mount;
182SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_mount, CTLFLAG_RD,
183    &init_count_mount, 0, "mount init calls");
184static int	init_count_mount_fslabel;
185SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_mount_fslabel, CTLFLAG_RD,
186    &init_count_mount_fslabel, 0, "mount_fslabel init calls");
187static int	init_count_socket;
188SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_socket, CTLFLAG_RD,
189    &init_count_socket, 0, "socket init calls");
190static int	init_count_socket_peerlabel;
191SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_socket_peerlabel,
192    CTLFLAG_RD, &init_count_socket_peerlabel, 0,
193    "socket_peerlabel init calls");
194static int	init_count_pipe;
195SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_pipe, CTLFLAG_RD,
196    &init_count_pipe, 0, "pipe init calls");
197static int	init_count_posixsems;
198SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_posixsems, CTLFLAG_RD,
199    &init_count_posixsems, 0, "posix sems init calls");
200static int	init_count_proc;
201SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_proc, CTLFLAG_RD,
202    &init_count_proc, 0, "proc init calls");
203static int	init_count_vnode;
204SYSCTL_INT(_security_mac_test, OID_AUTO, init_count_vnode, CTLFLAG_RD,
205    &init_count_vnode, 0, "vnode init calls");
206
207static int	destroy_count_bpfdesc;
208SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_bpfdesc, CTLFLAG_RD,
209    &destroy_count_bpfdesc, 0, "bpfdesc destroy calls");
210static int	destroy_count_cred;
211SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_cred, CTLFLAG_RD,
212    &destroy_count_cred, 0, "cred destroy calls");
213static int	destroy_count_devfsdirent;
214SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_devfsdirent, CTLFLAG_RD,
215    &destroy_count_devfsdirent, 0, "devfsdirent destroy calls");
216static int	destroy_count_ifnet;
217SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_ifnet, CTLFLAG_RD,
218    &destroy_count_ifnet, 0, "ifnet destroy calls");
219static int	destroy_count_inpcb;
220SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_inpcb, CTLFLAG_RD,
221    &destroy_count_inpcb, 0, "inpcb destroy calls");
222static int	destroy_count_sysv_msg;
223SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_sysv_msg, CTLFLAG_RD,
224    &destroy_count_sysv_msg, 0, "ipc_msg destroy calls");
225static int	destroy_count_sysv_msq;
226SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_sysv_msq, CTLFLAG_RD,
227    &destroy_count_sysv_msq, 0, "ipc_msq destroy calls");
228static int	destroy_count_sysv_sema;
229SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_sysv_sema, CTLFLAG_RD,
230    &destroy_count_sysv_sema, 0, "ipc_sema destroy calls");
231static int	destroy_count_sysv_shm;
232SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_sysv_shm, CTLFLAG_RD,
233    &destroy_count_sysv_shm, 0, "ipc_shm destroy calls");
234static int	destroy_count_ipq;
235SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_ipq, CTLFLAG_RD,
236    &destroy_count_ipq, 0, "ipq destroy calls");
237static int      destroy_count_mbuf;
238SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_mbuf, CTLFLAG_RD,
239    &destroy_count_mbuf, 0, "mbuf destroy calls");
240static int      destroy_count_mount;
241SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_mount, CTLFLAG_RD,
242    &destroy_count_mount, 0, "mount destroy calls");
243static int      destroy_count_mount_fslabel;
244SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_mount_fslabel,
245    CTLFLAG_RD, &destroy_count_mount_fslabel, 0,
246    "mount_fslabel destroy calls");
247static int      destroy_count_socket;
248SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_socket, CTLFLAG_RD,
249    &destroy_count_socket, 0, "socket destroy calls");
250static int      destroy_count_socket_peerlabel;
251SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_socket_peerlabel,
252    CTLFLAG_RD, &destroy_count_socket_peerlabel, 0,
253    "socket_peerlabel destroy calls");
254static int      destroy_count_pipe;
255SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_pipe, CTLFLAG_RD,
256    &destroy_count_pipe, 0, "pipe destroy calls");
257static int	destroy_count_posixsems;
258SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_posixsems, CTLFLAG_RD,
259    &destroy_count_posixsems, 0, "posix sems destroy calls");
260static int      destroy_count_proc;
261SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_proc, CTLFLAG_RD,
262    &destroy_count_proc, 0, "proc destroy calls");
263static int      destroy_count_vnode;
264SYSCTL_INT(_security_mac_test, OID_AUTO, destroy_count_vnode, CTLFLAG_RD,
265    &destroy_count_vnode, 0, "vnode destroy calls");
266
267static int externalize_count;
268SYSCTL_INT(_security_mac_test, OID_AUTO, externalize_count, CTLFLAG_RD,
269    &externalize_count, 0, "Subject/object externalize calls");
270static int internalize_count;
271SYSCTL_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 */
283static void
284mac_test_destroy(struct mac_policy_conf *conf)
285{
286
287}
288
289static void
290mac_test_init(struct mac_policy_conf *conf)
291{
292
293}
294
295static int
296mac_test_syscall(struct thread *td, int call, void *arg)
297{
298
299	return (0);
300}
301
302/*
303 * Label operations.
304 */
305static void
306mac_test_init_bpfdesc_label(struct label *label)
307{
308
309	SLOT(label) = BPFMAGIC;
310	atomic_add_int(&init_count_bpfdesc, 1);
311}
312
313static void
314mac_test_init_cred_label(struct label *label)
315{
316
317	SLOT(label) = CREDMAGIC;
318	atomic_add_int(&init_count_cred, 1);
319}
320
321static void
322mac_test_init_devfsdirent_label(struct label *label)
323{
324
325	SLOT(label) = DEVFSMAGIC;
326	atomic_add_int(&init_count_devfsdirent, 1);
327}
328
329static void
330mac_test_init_ifnet_label(struct label *label)
331{
332
333	SLOT(label) = IFNETMAGIC;
334	atomic_add_int(&init_count_ifnet, 1);
335}
336
337static int
338mac_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
351static void
352mac_test_init_sysv_msgmsg_label(struct label *label)
353{
354	SLOT(label) = SYSVIPCMSGMAGIC;
355	atomic_add_int(&init_count_sysv_msg, 1);
356}
357
358static void
359mac_test_init_sysv_msgqueue_label(struct label *label)
360{
361	SLOT(label) = SYSVIPCMSQMAGIC;
362	atomic_add_int(&init_count_sysv_msq, 1);
363}
364
365static void
366mac_test_init_sysv_sema_label(struct label *label)
367{
368	SLOT(label) = SYSVIPCSEMMAGIC;
369	atomic_add_int(&init_count_sysv_sema, 1);
370}
371
372static void
373mac_test_init_sysv_shm_label(struct label *label)
374{
375	SLOT(label) = SYSVIPCSHMMAGIC;
376	atomic_add_int(&init_count_sysv_shm, 1);
377}
378
379static int
380mac_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
393static int
394mac_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
407static void
408mac_test_init_mount_label(struct label *label)
409{
410
411	SLOT(label) = MOUNTMAGIC;
412	atomic_add_int(&init_count_mount, 1);
413}
414
415static void
416mac_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
423static int
424mac_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
437static int
438mac_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
451static void
452mac_test_init_pipe_label(struct label *label)
453{
454
455	SLOT(label) = PIPEMAGIC;
456	atomic_add_int(&init_count_pipe, 1);
457}
458
459static void
460mac_test_init_posix_sem_label(struct label *label)
461{
462
463	SLOT(label) = POSIXSEMMAGIC;
464	atomic_add_int(&init_count_posixsems, 1);
465}
466
467static void
468mac_test_init_proc_label(struct label *label)
469{
470
471	SLOT(label) = PROCMAGIC;
472	atomic_add_int(&init_count_proc, 1);
473}
474
475static void
476mac_test_init_vnode_label(struct label *label)
477{
478
479	SLOT(label) = VNODEMAGIC;
480	atomic_add_int(&init_count_vnode, 1);
481}
482
483static void
484mac_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
497static void
498mac_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
511static void
512mac_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
525static void
526mac_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
539static void
540mac_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
553static void
554mac_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
568static void
569mac_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
583static void
584mac_test_destroy_sysv_sema_label(struct label *label)
585{
586
587	if (SLOT(label) == SYSVIPCSEMMAGIC || SLOT(label) == 0) {
588		atomic_add_int(&destroy_count_sysv_sema, 1);
589		SLOT(label) = EXMAGIC;
590	} else if (SLOT(label) == EXMAGIC) {
591		DEBUGGER("mac_test_destroy_sysv_sema_label: dup destroy");
592	} else {
593		DEBUGGER("mac_test_destroy_sysv_sema_label: corrupted label");
594	}
595}
596
597static void
598mac_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
611static void
612mac_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
625static void
626mac_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
647static void
648mac_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
661static void
662mac_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
675static void
676mac_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
689static void
690mac_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
703static void
704mac_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
717static void
718mac_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
731static void
732mac_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
745static void
746mac_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
759static void
760mac_test_copy_cred_label(struct label *src, struct label *dest)
761{
762
763	ASSERT_CRED_LABEL(src);
764	ASSERT_CRED_LABEL(dest);
765}
766
767static void
768mac_test_copy_ifnet_label(struct label *src, struct label *dest)
769{
770
771	ASSERT_IFNET_LABEL(src);
772	ASSERT_IFNET_LABEL(dest);
773}
774
775static void
776mac_test_copy_mbuf_label(struct label *src, struct label *dest)
777{
778
779	ASSERT_MBUF_LABEL(src);
780	ASSERT_MBUF_LABEL(dest);
781}
782
783static void
784mac_test_copy_pipe_label(struct label *src, struct label *dest)
785{
786
787	ASSERT_PIPE_LABEL(src);
788	ASSERT_PIPE_LABEL(dest);
789}
790
791static void
792mac_test_copy_socket_label(struct label *src, struct label *dest)
793{
794
795	ASSERT_SOCKET_LABEL(src);
796	ASSERT_SOCKET_LABEL(dest);
797}
798
799static void
800mac_test_copy_vnode_label(struct label *src, struct label *dest)
801{
802
803	ASSERT_VNODE_LABEL(src);
804	ASSERT_VNODE_LABEL(dest);
805}
806
807static int
808mac_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
820static int
821mac_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 */
837static void
838mac_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
848static int
849mac_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
858static void
859mac_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
867static void
868mac_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
875static void
876mac_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
883static void
884mac_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
894static int
895mac_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
907static void
908mac_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
917static void
918mac_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
927static void
928mac_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
937static int
938mac_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
948static void
949mac_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 */
961static void
962mac_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
970static void
971mac_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
979static void
980mac_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
988static void
989mac_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
997static void
998mac_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
1007static void
1008mac_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
1016static void
1017mac_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
1026static void
1027mac_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 */
1038static void
1039mac_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
1048static void
1049mac_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
1057static void
1058mac_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
1066static void
1067mac_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
1075static void
1076mac_test_create_ifnet(struct ifnet *ifnet, struct label *ifnetlabel)
1077{
1078
1079	ASSERT_IFNET_LABEL(ifnetlabel);
1080}
1081
1082static void
1083mac_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
1091static void
1092mac_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
1100static void
1101mac_test_create_sysv_msgqueue(struct ucred *cred,
1102    struct msqid_kernel *msqkptr, struct label *msqlabel)
1103{
1104
1105	ASSERT_SYSVIPCMSQ_LABEL(msqlabel);
1106}
1107
1108static void
1109mac_test_create_sysv_sema(struct ucred *cred, struct semid_kernel *semakptr,
1110    struct label *semalabel)
1111{
1112
1113	ASSERT_SYSVIPCSEM_LABEL(semalabel);
1114}
1115
1116static void
1117mac_test_create_sysv_shm(struct ucred *cred, struct shmid_kernel *shmsegptr,
1118    struct label *shmlabel)
1119{
1120
1121	ASSERT_SYSVIPCSHM_LABEL(shmlabel);
1122}
1123
1124static void
1125mac_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
1133static void
1134mac_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
1142static void
1143mac_test_create_mbuf_from_mbuf(struct mbuf *oldmbuf,
1144    struct label *oldmbuflabel, struct mbuf *newmbuf,
1145    struct label *newmbuflabel)
1146{
1147
1148	ASSERT_MBUF_LABEL(oldmbuflabel);
1149	ASSERT_MBUF_LABEL(newmbuflabel);
1150}
1151
1152static void
1153mac_test_create_mbuf_linklayer(struct ifnet *ifnet, struct label *ifnetlabel,
1154    struct mbuf *mbuf, struct label *mbuflabel)
1155{
1156
1157	ASSERT_IFNET_LABEL(ifnetlabel);
1158	ASSERT_MBUF_LABEL(mbuflabel);
1159}
1160
1161static void
1162mac_test_create_mbuf_from_bpfdesc(struct bpf_d *bpf_d, struct label *bpflabel,
1163    struct mbuf *mbuf, struct label *mbuflabel)
1164{
1165
1166	ASSERT_BPF_LABEL(bpflabel);
1167	ASSERT_MBUF_LABEL(mbuflabel);
1168}
1169
1170static void
1171mac_test_create_mbuf_from_ifnet(struct ifnet *ifnet, struct label *ifnetlabel,
1172    struct mbuf *m, struct label *mbuflabel)
1173{
1174
1175	ASSERT_IFNET_LABEL(ifnetlabel);
1176	ASSERT_MBUF_LABEL(mbuflabel);
1177}
1178
1179static void
1180mac_test_create_mbuf_multicast_encap(struct mbuf *oldmbuf,
1181    struct label *oldmbuflabel, struct ifnet *ifnet, struct label *ifnetlabel,
1182    struct mbuf *newmbuf, struct label *newmbuflabel)
1183{
1184
1185	ASSERT_MBUF_LABEL(oldmbuflabel);
1186	ASSERT_IFNET_LABEL(ifnetlabel);
1187	ASSERT_MBUF_LABEL(newmbuflabel);
1188}
1189
1190static void
1191mac_test_create_mbuf_netlayer(struct mbuf *oldmbuf,
1192    struct label *oldmbuflabel, struct mbuf *newmbuf,
1193    struct label *newmbuflabel)
1194{
1195
1196	ASSERT_MBUF_LABEL(oldmbuflabel);
1197	ASSERT_MBUF_LABEL(newmbuflabel);
1198}
1199
1200static int
1201mac_test_fragment_match(struct mbuf *fragment, struct label *fragmentlabel,
1202    struct ipq *ipq, struct label *ipqlabel)
1203{
1204
1205	ASSERT_MBUF_LABEL(fragmentlabel);
1206	ASSERT_IPQ_LABEL(ipqlabel);
1207
1208	return (1);
1209}
1210
1211static void
1212mac_test_reflect_mbuf_icmp(struct mbuf *m, struct label *mlabel)
1213{
1214
1215	ASSERT_MBUF_LABEL(mlabel);
1216}
1217
1218static void
1219mac_test_reflect_mbuf_tcp(struct mbuf *m, struct label *mlabel)
1220{
1221
1222	ASSERT_MBUF_LABEL(mlabel);
1223}
1224
1225static void
1226mac_test_relabel_ifnet(struct ucred *cred, struct ifnet *ifnet,
1227    struct label *ifnetlabel, struct label *newlabel)
1228{
1229
1230	ASSERT_CRED_LABEL(cred->cr_label);
1231	ASSERT_IFNET_LABEL(ifnetlabel);
1232	ASSERT_IFNET_LABEL(newlabel);
1233}
1234
1235static void
1236mac_test_update_ipq(struct mbuf *fragment, struct label *fragmentlabel,
1237    struct ipq *ipq, struct label *ipqlabel)
1238{
1239
1240	ASSERT_MBUF_LABEL(fragmentlabel);
1241	ASSERT_IPQ_LABEL(ipqlabel);
1242}
1243
1244static void
1245mac_test_inpcb_sosetlabel(struct socket *so, struct label *solabel,
1246    struct inpcb *inp, struct label *inplabel)
1247{
1248
1249	ASSERT_SOCKET_LABEL(solabel);
1250	ASSERT_INPCB_LABEL(inplabel);
1251}
1252
1253/*
1254 * Labeling event operations: processes.
1255 */
1256static void
1257mac_test_execve_transition(struct ucred *old, struct ucred *new,
1258    struct vnode *vp, struct label *filelabel,
1259    struct label *interpvnodelabel, struct image_params *imgp,
1260    struct label *execlabel)
1261{
1262
1263	ASSERT_CRED_LABEL(old->cr_label);
1264	ASSERT_CRED_LABEL(new->cr_label);
1265	ASSERT_VNODE_LABEL(filelabel);
1266	if (interpvnodelabel != NULL) {
1267		ASSERT_VNODE_LABEL(interpvnodelabel);
1268	}
1269	if (execlabel != NULL) {
1270		ASSERT_CRED_LABEL(execlabel);
1271	}
1272}
1273
1274static int
1275mac_test_execve_will_transition(struct ucred *old, struct vnode *vp,
1276    struct label *filelabel, struct label *interpvnodelabel,
1277    struct image_params *imgp, struct label *execlabel)
1278{
1279
1280	ASSERT_CRED_LABEL(old->cr_label);
1281	ASSERT_VNODE_LABEL(filelabel);
1282	if (interpvnodelabel != NULL) {
1283		ASSERT_VNODE_LABEL(interpvnodelabel);
1284	}
1285	if (execlabel != NULL) {
1286		ASSERT_CRED_LABEL(execlabel);
1287	}
1288
1289	return (0);
1290}
1291
1292static void
1293mac_test_create_proc0(struct ucred *cred)
1294{
1295
1296	ASSERT_CRED_LABEL(cred->cr_label);
1297}
1298
1299static void
1300mac_test_create_proc1(struct ucred *cred)
1301{
1302
1303	ASSERT_CRED_LABEL(cred->cr_label);
1304}
1305
1306static void
1307mac_test_relabel_cred(struct ucred *cred, struct label *newlabel)
1308{
1309
1310	ASSERT_CRED_LABEL(cred->cr_label);
1311	ASSERT_CRED_LABEL(newlabel);
1312}
1313
1314static void
1315mac_test_thread_userret(struct thread *td)
1316{
1317
1318	printf("mac_test_thread_userret(process = %d)\n",
1319	    curthread->td_proc->p_pid);
1320}
1321
1322/*
1323 * Label cleanup/flush operations
1324 */
1325static void
1326mac_test_cleanup_sysv_msgmsg(struct label *msglabel)
1327{
1328
1329	ASSERT_SYSVIPCMSG_LABEL(msglabel);
1330}
1331
1332static void
1333mac_test_cleanup_sysv_msgqueue(struct label *msqlabel)
1334{
1335
1336	ASSERT_SYSVIPCMSQ_LABEL(msqlabel);
1337}
1338
1339static void
1340mac_test_cleanup_sysv_sema(struct label *semalabel)
1341{
1342
1343	ASSERT_SYSVIPCSEM_LABEL(semalabel);
1344}
1345
1346static void
1347mac_test_cleanup_sysv_shm(struct label *shmlabel)
1348{
1349
1350	ASSERT_SYSVIPCSHM_LABEL(shmlabel);
1351}
1352
1353/*
1354 * Access control checks.
1355 */
1356static int
1357mac_test_check_bpfdesc_receive(struct bpf_d *bpf_d, struct label *bpflabel,
1358    struct ifnet *ifnet, struct label *ifnetlabel)
1359{
1360
1361	ASSERT_BPF_LABEL(bpflabel);
1362	ASSERT_IFNET_LABEL(ifnetlabel);
1363
1364	return (0);
1365}
1366
1367static int
1368mac_test_check_cred_relabel(struct ucred *cred, struct label *newlabel)
1369{
1370
1371	ASSERT_CRED_LABEL(cred->cr_label);
1372	ASSERT_CRED_LABEL(newlabel);
1373
1374	return (0);
1375}
1376
1377static int
1378mac_test_check_cred_visible(struct ucred *u1, struct ucred *u2)
1379{
1380
1381	ASSERT_CRED_LABEL(u1->cr_label);
1382	ASSERT_CRED_LABEL(u2->cr_label);
1383
1384	return (0);
1385}
1386
1387static int
1388mac_test_check_ifnet_relabel(struct ucred *cred, struct ifnet *ifnet,
1389    struct label *ifnetlabel, struct label *newlabel)
1390{
1391
1392	ASSERT_CRED_LABEL(cred->cr_label);
1393	ASSERT_IFNET_LABEL(ifnetlabel);
1394	ASSERT_IFNET_LABEL(newlabel);
1395	return (0);
1396}
1397
1398static int
1399mac_test_check_ifnet_transmit(struct ifnet *ifnet, struct label *ifnetlabel,
1400    struct mbuf *m, struct label *mbuflabel)
1401{
1402
1403	ASSERT_IFNET_LABEL(ifnetlabel);
1404	ASSERT_MBUF_LABEL(mbuflabel);
1405
1406	return (0);
1407}
1408
1409static int
1410mac_test_check_inpcb_deliver(struct inpcb *inp, struct label *inplabel,
1411    struct mbuf *m, struct label *mlabel)
1412{
1413
1414	ASSERT_INPCB_LABEL(inplabel);
1415	ASSERT_MBUF_LABEL(mlabel);
1416
1417	return (0);
1418}
1419
1420static int
1421mac_test_check_sysv_msgmsq(struct ucred *cred, struct msg *msgptr,
1422    struct label *msglabel, struct msqid_kernel *msqkptr,
1423    struct label *msqklabel)
1424{
1425
1426	ASSERT_SYSVIPCMSQ_LABEL(msqklabel);
1427	ASSERT_SYSVIPCMSG_LABEL(msglabel);
1428	ASSERT_CRED_LABEL(cred->cr_label);
1429
1430  	return (0);
1431}
1432
1433static int
1434mac_test_check_sysv_msgrcv(struct ucred *cred, struct msg *msgptr,
1435    struct label *msglabel)
1436{
1437
1438	ASSERT_SYSVIPCMSG_LABEL(msglabel);
1439	ASSERT_CRED_LABEL(cred->cr_label);
1440
1441	 return (0);
1442}
1443
1444
1445static int
1446mac_test_check_sysv_msgrmid(struct ucred *cred, struct msg *msgptr,
1447    struct label *msglabel)
1448{
1449
1450	ASSERT_SYSVIPCMSG_LABEL(msglabel);
1451	ASSERT_CRED_LABEL(cred->cr_label);
1452
1453	return (0);
1454}
1455
1456static int
1457mac_test_check_sysv_msqget(struct ucred *cred, struct msqid_kernel *msqkptr,
1458    struct label *msqklabel)
1459{
1460
1461	ASSERT_SYSVIPCMSQ_LABEL(msqklabel);
1462	ASSERT_CRED_LABEL(cred->cr_label);
1463
1464	return (0);
1465}
1466
1467static int
1468mac_test_check_sysv_msqsnd(struct ucred *cred, struct msqid_kernel *msqkptr,
1469    struct label *msqklabel)
1470{
1471
1472	ASSERT_SYSVIPCMSQ_LABEL(msqklabel);
1473	ASSERT_CRED_LABEL(cred->cr_label);
1474
1475	return (0);
1476}
1477
1478static int
1479mac_test_check_sysv_msqrcv(struct ucred *cred, struct msqid_kernel *msqkptr,
1480    struct label *msqklabel)
1481{
1482
1483	ASSERT_SYSVIPCMSQ_LABEL(msqklabel);
1484	ASSERT_CRED_LABEL(cred->cr_label);
1485
1486	return (0);
1487}
1488
1489static int
1490mac_test_check_sysv_msqctl(struct ucred *cred, struct msqid_kernel *msqkptr,
1491    struct label *msqklabel, int cmd)
1492{
1493
1494	ASSERT_SYSVIPCMSQ_LABEL(msqklabel);
1495	ASSERT_CRED_LABEL(cred->cr_label);
1496
1497	return (0);
1498}
1499
1500static int
1501mac_test_check_sysv_semctl(struct ucred *cred, struct semid_kernel *semakptr,
1502    struct label *semaklabel, int cmd)
1503{
1504
1505	ASSERT_CRED_LABEL(cred->cr_label);
1506	ASSERT_SYSVIPCSEM_LABEL(semaklabel);
1507
1508  	return (0);
1509}
1510
1511static int
1512mac_test_check_sysv_semget(struct ucred *cred, struct semid_kernel *semakptr,
1513    struct label *semaklabel)
1514{
1515
1516	ASSERT_CRED_LABEL(cred->cr_label);
1517	ASSERT_SYSVIPCSEM_LABEL(semaklabel);
1518
1519	return (0);
1520}
1521
1522static int
1523mac_test_check_sysv_semop(struct ucred *cred, struct semid_kernel *semakptr,
1524    struct label *semaklabel, size_t accesstype)
1525{
1526
1527	ASSERT_CRED_LABEL(cred->cr_label);
1528	ASSERT_SYSVIPCSEM_LABEL(semaklabel);
1529
1530	return (0);
1531}
1532
1533static int
1534mac_test_check_sysv_shmat(struct ucred *cred, struct shmid_kernel *shmsegptr,
1535    struct label *shmseglabel, int shmflg)
1536{
1537
1538	ASSERT_CRED_LABEL(cred->cr_label);
1539	ASSERT_SYSVIPCSHM_LABEL(shmseglabel);
1540
1541  	return (0);
1542}
1543
1544static int
1545mac_test_check_sysv_shmctl(struct ucred *cred, struct shmid_kernel *shmsegptr,
1546    struct label *shmseglabel, int cmd)
1547{
1548
1549	ASSERT_CRED_LABEL(cred->cr_label);
1550	ASSERT_SYSVIPCSHM_LABEL(shmseglabel);
1551
1552  	return (0);
1553}
1554
1555static int
1556mac_test_check_sysv_shmdt(struct ucred *cred, struct shmid_kernel *shmsegptr,
1557    struct label *shmseglabel)
1558{
1559
1560	ASSERT_CRED_LABEL(cred->cr_label);
1561	ASSERT_SYSVIPCSHM_LABEL(shmseglabel);
1562
1563	return (0);
1564}
1565
1566static int
1567mac_test_check_sysv_shmget(struct ucred *cred, struct shmid_kernel *shmsegptr,
1568    struct label *shmseglabel, int shmflg)
1569{
1570
1571	ASSERT_CRED_LABEL(cred->cr_label);
1572	ASSERT_SYSVIPCSHM_LABEL(shmseglabel);
1573
1574	return (0);
1575}
1576
1577static int
1578mac_test_check_kenv_dump(struct ucred *cred)
1579{
1580
1581	ASSERT_CRED_LABEL(cred->cr_label);
1582
1583	return (0);
1584}
1585
1586static int
1587mac_test_check_kenv_get(struct ucred *cred, char *name)
1588{
1589
1590	ASSERT_CRED_LABEL(cred->cr_label);
1591
1592	return (0);
1593}
1594
1595static int
1596mac_test_check_kenv_set(struct ucred *cred, char *name, char *value)
1597{
1598
1599	ASSERT_CRED_LABEL(cred->cr_label);
1600
1601	return (0);
1602}
1603
1604static int
1605mac_test_check_kenv_unset(struct ucred *cred, char *name)
1606{
1607
1608	ASSERT_CRED_LABEL(cred->cr_label);
1609
1610	return (0);
1611}
1612
1613static int
1614mac_test_check_kld_load(struct ucred *cred, struct vnode *vp,
1615    struct label *label)
1616{
1617
1618	ASSERT_CRED_LABEL(cred->cr_label);
1619	ASSERT_VNODE_LABEL(label);
1620
1621	return (0);
1622}
1623
1624static int
1625mac_test_check_kld_stat(struct ucred *cred)
1626{
1627
1628	ASSERT_CRED_LABEL(cred->cr_label);
1629
1630	return (0);
1631}
1632
1633static int
1634mac_test_check_kld_unload(struct ucred *cred)
1635{
1636
1637	ASSERT_CRED_LABEL(cred->cr_label);
1638
1639	return (0);
1640}
1641
1642static int
1643mac_test_check_mount_stat(struct ucred *cred, struct mount *mp,
1644    struct label *mntlabel)
1645{
1646
1647	ASSERT_CRED_LABEL(cred->cr_label);
1648	ASSERT_MOUNT_LABEL(mntlabel);
1649
1650	return (0);
1651}
1652
1653static int
1654mac_test_check_pipe_ioctl(struct ucred *cred, struct pipepair *pp,
1655    struct label *pipelabel, unsigned long cmd, void /* caddr_t */ *data)
1656{
1657
1658	ASSERT_CRED_LABEL(cred->cr_label);
1659	ASSERT_PIPE_LABEL(pipelabel);
1660
1661	return (0);
1662}
1663
1664static int
1665mac_test_check_pipe_poll(struct ucred *cred, struct pipepair *pp,
1666    struct label *pipelabel)
1667{
1668
1669	ASSERT_CRED_LABEL(cred->cr_label);
1670	ASSERT_PIPE_LABEL(pipelabel);
1671
1672	return (0);
1673}
1674
1675static int
1676mac_test_check_pipe_read(struct ucred *cred, struct pipepair *pp,
1677    struct label *pipelabel)
1678{
1679
1680	ASSERT_CRED_LABEL(cred->cr_label);
1681	ASSERT_PIPE_LABEL(pipelabel);
1682
1683	return (0);
1684}
1685
1686static int
1687mac_test_check_pipe_relabel(struct ucred *cred, struct pipepair *pp,
1688    struct label *pipelabel, struct label *newlabel)
1689{
1690
1691	ASSERT_CRED_LABEL(cred->cr_label);
1692	ASSERT_PIPE_LABEL(pipelabel);
1693	ASSERT_PIPE_LABEL(newlabel);
1694
1695	return (0);
1696}
1697
1698static int
1699mac_test_check_pipe_stat(struct ucred *cred, struct pipepair *pp,
1700    struct label *pipelabel)
1701{
1702
1703	ASSERT_CRED_LABEL(cred->cr_label);
1704	ASSERT_PIPE_LABEL(pipelabel);
1705
1706	return (0);
1707}
1708
1709static int
1710mac_test_check_pipe_write(struct ucred *cred, struct pipepair *pp,
1711    struct label *pipelabel)
1712{
1713
1714	ASSERT_CRED_LABEL(cred->cr_label);
1715	ASSERT_PIPE_LABEL(pipelabel);
1716
1717	return (0);
1718}
1719
1720static int
1721mac_test_check_posix_sem(struct ucred *cred, struct ksem *ksemptr,
1722    struct label *ks_label)
1723{
1724
1725	ASSERT_CRED_LABEL(cred->cr_label);
1726	ASSERT_POSIX_LABEL(ks_label);
1727
1728	return (0);
1729}
1730
1731static int
1732mac_test_check_proc_debug(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
1741static int
1742mac_test_check_proc_sched(struct ucred *cred, struct proc *proc)
1743{
1744
1745	ASSERT_CRED_LABEL(cred->cr_label);
1746	ASSERT_CRED_LABEL(proc->p_ucred->cr_label);
1747
1748	return (0);
1749}
1750
1751static int
1752mac_test_check_proc_signal(struct ucred *cred, struct proc *proc, int signum)
1753{
1754
1755	ASSERT_CRED_LABEL(cred->cr_label);
1756	ASSERT_CRED_LABEL(proc->p_ucred->cr_label);
1757
1758	return (0);
1759}
1760
1761static int
1762mac_test_check_proc_setuid(struct ucred *cred, uid_t uid)
1763{
1764
1765	ASSERT_CRED_LABEL(cred->cr_label);
1766
1767	return (0);
1768}
1769
1770static int
1771mac_test_check_proc_seteuid(struct ucred *cred, uid_t euid)
1772{
1773
1774	ASSERT_CRED_LABEL(cred->cr_label);
1775
1776	return (0);
1777}
1778
1779static int
1780mac_test_check_proc_setgid(struct ucred *cred, gid_t gid)
1781{
1782
1783	ASSERT_CRED_LABEL(cred->cr_label);
1784
1785	return (0);
1786}
1787
1788static int
1789mac_test_check_proc_setegid(struct ucred *cred, gid_t egid)
1790{
1791
1792	ASSERT_CRED_LABEL(cred->cr_label);
1793
1794	return (0);
1795}
1796
1797static int
1798mac_test_check_proc_setgroups(struct ucred *cred, int ngroups,
1799	gid_t *gidset)
1800{
1801
1802	ASSERT_CRED_LABEL(cred->cr_label);
1803
1804	return (0);
1805}
1806
1807static int
1808mac_test_check_proc_setreuid(struct ucred *cred, uid_t ruid, uid_t euid)
1809{
1810
1811	ASSERT_CRED_LABEL(cred->cr_label);
1812
1813	return (0);
1814}
1815
1816static int
1817mac_test_check_proc_setregid(struct ucred *cred, gid_t rgid, gid_t egid)
1818{
1819
1820	ASSERT_CRED_LABEL(cred->cr_label);
1821
1822	return (0);
1823}
1824
1825static int
1826mac_test_check_proc_setresuid(struct ucred *cred, uid_t ruid, uid_t euid,
1827	uid_t suid)
1828{
1829
1830	ASSERT_CRED_LABEL(cred->cr_label);
1831
1832	return (0);
1833}
1834
1835static int
1836mac_test_check_proc_setresgid(struct ucred *cred, gid_t rgid, gid_t egid,
1837	gid_t sgid)
1838{
1839
1840	ASSERT_CRED_LABEL(cred->cr_label);
1841
1842	return (0);
1843}
1844
1845static int
1846mac_test_check_proc_wait(struct ucred *cred, struct proc *proc)
1847{
1848
1849	ASSERT_CRED_LABEL(cred->cr_label);
1850	ASSERT_CRED_LABEL(proc->p_ucred->cr_label);
1851
1852	return (0);
1853}
1854
1855static int
1856mac_test_check_socket_accept(struct ucred *cred, struct socket *socket,
1857    struct label *socketlabel)
1858{
1859
1860	ASSERT_CRED_LABEL(cred->cr_label);
1861	ASSERT_SOCKET_LABEL(socketlabel);
1862
1863	return (0);
1864}
1865
1866static int
1867mac_test_check_socket_bind(struct ucred *cred, struct socket *socket,
1868    struct label *socketlabel, struct sockaddr *sockaddr)
1869{
1870
1871	ASSERT_CRED_LABEL(cred->cr_label);
1872	ASSERT_SOCKET_LABEL(socketlabel);
1873
1874	return (0);
1875}
1876
1877static int
1878mac_test_check_socket_connect(struct ucred *cred, struct socket *socket,
1879    struct label *socketlabel, struct sockaddr *sockaddr)
1880{
1881
1882	ASSERT_CRED_LABEL(cred->cr_label);
1883	ASSERT_SOCKET_LABEL(socketlabel);
1884
1885	return (0);
1886}
1887
1888static int
1889mac_test_check_socket_deliver(struct socket *socket, struct label *socketlabel,
1890    struct mbuf *m, struct label *mbuflabel)
1891{
1892
1893	ASSERT_SOCKET_LABEL(socketlabel);
1894	ASSERT_MBUF_LABEL(mbuflabel);
1895
1896	return (0);
1897}
1898
1899static int
1900mac_test_check_socket_listen(struct ucred *cred, struct socket *socket,
1901    struct label *socketlabel)
1902{
1903
1904	ASSERT_CRED_LABEL(cred->cr_label);
1905	ASSERT_SOCKET_LABEL(socketlabel);
1906
1907	return (0);
1908}
1909
1910static int
1911mac_test_check_socket_poll(struct ucred *cred, struct socket *socket,
1912    struct label *socketlabel)
1913{
1914
1915	ASSERT_CRED_LABEL(cred->cr_label);
1916	ASSERT_SOCKET_LABEL(socketlabel);
1917
1918	return (0);
1919}
1920
1921static int
1922mac_test_check_socket_receive(struct ucred *cred, struct socket *socket,
1923    struct label *socketlabel)
1924{
1925
1926	ASSERT_CRED_LABEL(cred->cr_label);
1927	ASSERT_SOCKET_LABEL(socketlabel);
1928
1929	return (0);
1930}
1931
1932static int
1933mac_test_check_socket_relabel(struct ucred *cred, struct socket *socket,
1934    struct label *socketlabel, struct label *newlabel)
1935{
1936
1937	ASSERT_CRED_LABEL(cred->cr_label);
1938	ASSERT_SOCKET_LABEL(socketlabel);
1939	ASSERT_SOCKET_LABEL(newlabel);
1940
1941	return (0);
1942}
1943
1944static int
1945mac_test_check_socket_send(struct ucred *cred, struct socket *socket,
1946    struct label *socketlabel)
1947{
1948
1949	ASSERT_CRED_LABEL(cred->cr_label);
1950	ASSERT_SOCKET_LABEL(socketlabel);
1951
1952	return (0);
1953}
1954
1955static int
1956mac_test_check_socket_stat(struct ucred *cred, struct socket *socket,
1957    struct label *socketlabel)
1958{
1959
1960	ASSERT_CRED_LABEL(cred->cr_label);
1961	ASSERT_SOCKET_LABEL(socketlabel);
1962
1963	return (0);
1964}
1965
1966static int
1967mac_test_check_socket_visible(struct ucred *cred, struct socket *socket,
1968    struct label *socketlabel)
1969{
1970
1971	ASSERT_CRED_LABEL(cred->cr_label);
1972	ASSERT_SOCKET_LABEL(socketlabel);
1973
1974	return (0);
1975}
1976
1977static int
1978mac_test_check_sysarch_ioperm(struct ucred *cred)
1979{
1980
1981	ASSERT_CRED_LABEL(cred->cr_label);
1982
1983	return (0);
1984}
1985
1986static int
1987mac_test_check_system_acct(struct ucred *cred, struct vnode *vp,
1988    struct label *label)
1989{
1990
1991	ASSERT_CRED_LABEL(cred->cr_label);
1992
1993	return (0);
1994}
1995
1996static int
1997mac_test_check_system_reboot(struct ucred *cred, int how)
1998{
1999
2000	ASSERT_CRED_LABEL(cred->cr_label);
2001
2002	return (0);
2003}
2004
2005static int
2006mac_test_check_system_settime(struct ucred *cred)
2007{
2008
2009	ASSERT_CRED_LABEL(cred->cr_label);
2010
2011	return (0);
2012}
2013
2014static int
2015mac_test_check_system_swapon(struct ucred *cred, struct vnode *vp,
2016    struct label *label)
2017{
2018
2019	ASSERT_CRED_LABEL(cred->cr_label);
2020	ASSERT_VNODE_LABEL(label);
2021
2022	return (0);
2023}
2024
2025static int
2026mac_test_check_system_swapoff(struct ucred *cred, struct vnode *vp,
2027    struct label *label)
2028{
2029
2030	ASSERT_CRED_LABEL(cred->cr_label);
2031	ASSERT_VNODE_LABEL(label);
2032
2033	return (0);
2034}
2035
2036static int
2037mac_test_check_system_sysctl(struct ucred *cred, struct sysctl_oid *oidp,
2038    void *arg1, int arg2, struct sysctl_req *req)
2039{
2040
2041	ASSERT_CRED_LABEL(cred->cr_label);
2042
2043	return (0);
2044}
2045
2046static int
2047mac_test_check_vnode_access(struct ucred *cred, struct vnode *vp,
2048    struct label *label, int acc_mode)
2049{
2050
2051	ASSERT_CRED_LABEL(cred->cr_label);
2052	ASSERT_VNODE_LABEL(label);
2053
2054	return (0);
2055}
2056
2057static int
2058mac_test_check_vnode_chdir(struct ucred *cred, struct vnode *dvp,
2059    struct label *dlabel)
2060{
2061
2062	ASSERT_CRED_LABEL(cred->cr_label);
2063	ASSERT_VNODE_LABEL(dlabel);
2064
2065	return (0);
2066}
2067
2068static int
2069mac_test_check_vnode_chroot(struct ucred *cred, struct vnode *dvp,
2070    struct label *dlabel)
2071{
2072
2073	ASSERT_CRED_LABEL(cred->cr_label);
2074	ASSERT_VNODE_LABEL(dlabel);
2075
2076	return (0);
2077}
2078
2079static int
2080mac_test_check_vnode_create(struct ucred *cred, struct vnode *dvp,
2081    struct label *dlabel, struct componentname *cnp, struct vattr *vap)
2082{
2083
2084	ASSERT_CRED_LABEL(cred->cr_label);
2085	ASSERT_VNODE_LABEL(dlabel);
2086
2087	return (0);
2088}
2089
2090static int
2091mac_test_check_vnode_delete(struct ucred *cred, struct vnode *dvp,
2092    struct label *dlabel, struct vnode *vp, struct label *label,
2093    struct componentname *cnp)
2094{
2095
2096	ASSERT_CRED_LABEL(cred->cr_label);
2097	ASSERT_VNODE_LABEL(dlabel);
2098	ASSERT_VNODE_LABEL(label);
2099
2100	return (0);
2101}
2102
2103static int
2104mac_test_check_vnode_deleteacl(struct ucred *cred, struct vnode *vp,
2105    struct label *label, acl_type_t type)
2106{
2107
2108	ASSERT_CRED_LABEL(cred->cr_label);
2109	ASSERT_VNODE_LABEL(label);
2110
2111	return (0);
2112}
2113
2114static int
2115mac_test_check_vnode_deleteextattr(struct ucred *cred, struct vnode *vp,
2116    struct label *label, int attrnamespace, const char *name)
2117{
2118
2119	ASSERT_CRED_LABEL(cred->cr_label);
2120	ASSERT_VNODE_LABEL(label);
2121
2122	return (0);
2123}
2124
2125static int
2126mac_test_check_vnode_exec(struct ucred *cred, struct vnode *vp,
2127    struct label *label, struct image_params *imgp,
2128    struct label *execlabel)
2129{
2130
2131	ASSERT_CRED_LABEL(cred->cr_label);
2132	ASSERT_VNODE_LABEL(label);
2133	if (execlabel != NULL) {
2134		ASSERT_CRED_LABEL(execlabel);
2135	}
2136
2137	return (0);
2138}
2139
2140static int
2141mac_test_check_vnode_getacl(struct ucred *cred, struct vnode *vp,
2142    struct label *label, acl_type_t type)
2143{
2144
2145	ASSERT_CRED_LABEL(cred->cr_label);
2146	ASSERT_VNODE_LABEL(label);
2147
2148	return (0);
2149}
2150
2151static int
2152mac_test_check_vnode_getextattr(struct ucred *cred, struct vnode *vp,
2153    struct label *label, int attrnamespace, const char *name, struct uio *uio)
2154{
2155
2156	ASSERT_CRED_LABEL(cred->cr_label);
2157	ASSERT_VNODE_LABEL(label);
2158
2159	return (0);
2160}
2161
2162static int
2163mac_test_check_vnode_link(struct ucred *cred, struct vnode *dvp,
2164    struct label *dlabel, struct vnode *vp, struct label *label,
2165    struct componentname *cnp)
2166{
2167
2168	ASSERT_CRED_LABEL(cred->cr_label);
2169	ASSERT_VNODE_LABEL(dlabel);
2170	ASSERT_VNODE_LABEL(label);
2171
2172	return (0);
2173}
2174
2175static int
2176mac_test_check_vnode_listextattr(struct ucred *cred, struct vnode *vp,
2177    struct label *label, int attrnamespace)
2178{
2179
2180	ASSERT_CRED_LABEL(cred->cr_label);
2181	ASSERT_VNODE_LABEL(label);
2182
2183	return (0);
2184}
2185
2186static int
2187mac_test_check_vnode_lookup(struct ucred *cred, struct vnode *dvp,
2188    struct label *dlabel, struct componentname *cnp)
2189{
2190
2191	ASSERT_CRED_LABEL(cred->cr_label);
2192	ASSERT_VNODE_LABEL(dlabel);
2193
2194	return (0);
2195}
2196
2197static int
2198mac_test_check_vnode_mmap(struct ucred *cred, struct vnode *vp,
2199    struct label *label, int prot, int flags)
2200{
2201
2202	ASSERT_CRED_LABEL(cred->cr_label);
2203	ASSERT_VNODE_LABEL(label);
2204
2205	return (0);
2206}
2207
2208static int
2209mac_test_check_vnode_open(struct ucred *cred, struct vnode *vp,
2210    struct label *filelabel, int acc_mode)
2211{
2212
2213	ASSERT_CRED_LABEL(cred->cr_label);
2214	ASSERT_VNODE_LABEL(filelabel);
2215
2216	return (0);
2217}
2218
2219static int
2220mac_test_check_vnode_poll(struct ucred *active_cred, struct ucred *file_cred,
2221    struct vnode *vp, struct label *label)
2222{
2223
2224	ASSERT_CRED_LABEL(active_cred->cr_label);
2225	ASSERT_CRED_LABEL(file_cred->cr_label);
2226	ASSERT_VNODE_LABEL(label);
2227
2228	return (0);
2229}
2230
2231static int
2232mac_test_check_vnode_read(struct ucred *active_cred, struct ucred *file_cred,
2233    struct vnode *vp, struct label *label)
2234{
2235
2236	ASSERT_CRED_LABEL(active_cred->cr_label);
2237	if (file_cred != NULL) {
2238		ASSERT_CRED_LABEL(file_cred->cr_label);
2239	}
2240	ASSERT_VNODE_LABEL(label);
2241
2242	return (0);
2243}
2244
2245static int
2246mac_test_check_vnode_readdir(struct ucred *cred, struct vnode *dvp,
2247    struct label *dlabel)
2248{
2249
2250	ASSERT_CRED_LABEL(cred->cr_label);
2251	ASSERT_VNODE_LABEL(dlabel);
2252
2253	return (0);
2254}
2255
2256static int
2257mac_test_check_vnode_readlink(struct ucred *cred, struct vnode *vp,
2258    struct label *vnodelabel)
2259{
2260
2261	ASSERT_CRED_LABEL(cred->cr_label);
2262	ASSERT_VNODE_LABEL(vnodelabel);
2263
2264	return (0);
2265}
2266
2267static int
2268mac_test_check_vnode_relabel(struct ucred *cred, struct vnode *vp,
2269    struct label *vnodelabel, struct label *newlabel)
2270{
2271
2272	ASSERT_CRED_LABEL(cred->cr_label);
2273	ASSERT_VNODE_LABEL(vnodelabel);
2274	ASSERT_VNODE_LABEL(newlabel);
2275
2276	return (0);
2277}
2278
2279static int
2280mac_test_check_vnode_rename_from(struct ucred *cred, struct vnode *dvp,
2281    struct label *dlabel, struct vnode *vp, struct label *label,
2282    struct componentname *cnp)
2283{
2284
2285	ASSERT_CRED_LABEL(cred->cr_label);
2286	ASSERT_VNODE_LABEL(dlabel);
2287	ASSERT_VNODE_LABEL(label);
2288
2289	return (0);
2290}
2291
2292static int
2293mac_test_check_vnode_rename_to(struct ucred *cred, struct vnode *dvp,
2294    struct label *dlabel, struct vnode *vp, struct label *label, int samedir,
2295    struct componentname *cnp)
2296{
2297
2298	ASSERT_CRED_LABEL(cred->cr_label);
2299	ASSERT_VNODE_LABEL(dlabel);
2300
2301	if (vp != NULL) {
2302		ASSERT_VNODE_LABEL(label);
2303	}
2304
2305	return (0);
2306}
2307
2308static int
2309mac_test_check_vnode_revoke(struct ucred *cred, struct vnode *vp,
2310    struct label *label)
2311{
2312
2313	ASSERT_CRED_LABEL(cred->cr_label);
2314	ASSERT_VNODE_LABEL(label);
2315
2316	return (0);
2317}
2318
2319static int
2320mac_test_check_vnode_setacl(struct ucred *cred, struct vnode *vp,
2321    struct label *label, acl_type_t type, struct acl *acl)
2322{
2323
2324	ASSERT_CRED_LABEL(cred->cr_label);
2325	ASSERT_VNODE_LABEL(label);
2326
2327	return (0);
2328}
2329
2330static int
2331mac_test_check_vnode_setextattr(struct ucred *cred, struct vnode *vp,
2332    struct label *label, int attrnamespace, const char *name, struct uio *uio)
2333{
2334
2335	ASSERT_CRED_LABEL(cred->cr_label);
2336	ASSERT_VNODE_LABEL(label);
2337
2338	return (0);
2339}
2340
2341static int
2342mac_test_check_vnode_setflags(struct ucred *cred, struct vnode *vp,
2343    struct label *label, u_long flags)
2344{
2345
2346	ASSERT_CRED_LABEL(cred->cr_label);
2347	ASSERT_VNODE_LABEL(label);
2348
2349	return (0);
2350}
2351
2352static int
2353mac_test_check_vnode_setmode(struct ucred *cred, struct vnode *vp,
2354    struct label *label, mode_t mode)
2355{
2356
2357	ASSERT_CRED_LABEL(cred->cr_label);
2358	ASSERT_VNODE_LABEL(label);
2359
2360	return (0);
2361}
2362
2363static int
2364mac_test_check_vnode_setowner(struct ucred *cred, struct vnode *vp,
2365    struct label *label, uid_t uid, gid_t gid)
2366{
2367
2368	ASSERT_CRED_LABEL(cred->cr_label);
2369	ASSERT_VNODE_LABEL(label);
2370
2371	return (0);
2372}
2373
2374static int
2375mac_test_check_vnode_setutimes(struct ucred *cred, struct vnode *vp,
2376    struct label *label, struct timespec atime, struct timespec mtime)
2377{
2378
2379	ASSERT_CRED_LABEL(cred->cr_label);
2380	ASSERT_VNODE_LABEL(label);
2381
2382	return (0);
2383}
2384
2385static int
2386mac_test_check_vnode_stat(struct ucred *active_cred, struct ucred *file_cred,
2387    struct vnode *vp, struct label *label)
2388{
2389
2390	ASSERT_CRED_LABEL(active_cred->cr_label);
2391	if (file_cred != NULL) {
2392		ASSERT_CRED_LABEL(file_cred->cr_label);
2393	}
2394	ASSERT_VNODE_LABEL(label);
2395
2396	return (0);
2397}
2398
2399static int
2400mac_test_check_vnode_write(struct ucred *active_cred,
2401    struct ucred *file_cred, struct vnode *vp, struct label *label)
2402{
2403
2404	ASSERT_CRED_LABEL(active_cred->cr_label);
2405	if (file_cred != NULL) {
2406		ASSERT_CRED_LABEL(file_cred->cr_label);
2407	}
2408	ASSERT_VNODE_LABEL(label);
2409
2410	return (0);
2411}
2412
2413static struct mac_policy_ops mac_test_ops =
2414{
2415	.mpo_destroy = mac_test_destroy,
2416	.mpo_init = mac_test_init,
2417	.mpo_syscall = mac_test_syscall,
2418	.mpo_init_bpfdesc_label = mac_test_init_bpfdesc_label,
2419	.mpo_init_cred_label = mac_test_init_cred_label,
2420	.mpo_init_devfsdirent_label = mac_test_init_devfsdirent_label,
2421	.mpo_init_ifnet_label = mac_test_init_ifnet_label,
2422	.mpo_init_sysv_msgmsg_label = mac_test_init_sysv_msgmsg_label,
2423	.mpo_init_sysv_msgqueue_label = mac_test_init_sysv_msgqueue_label,
2424	.mpo_init_sysv_sema_label = mac_test_init_sysv_sema_label,
2425	.mpo_init_sysv_shm_label = mac_test_init_sysv_shm_label,
2426	.mpo_init_inpcb_label = mac_test_init_inpcb_label,
2427	.mpo_init_ipq_label = mac_test_init_ipq_label,
2428	.mpo_init_mbuf_label = mac_test_init_mbuf_label,
2429	.mpo_init_mount_label = mac_test_init_mount_label,
2430	.mpo_init_mount_fs_label = mac_test_init_mount_fs_label,
2431	.mpo_init_pipe_label = mac_test_init_pipe_label,
2432	.mpo_init_posix_sem_label = mac_test_init_posix_sem_label,
2433	.mpo_init_proc_label = mac_test_init_proc_label,
2434	.mpo_init_socket_label = mac_test_init_socket_label,
2435	.mpo_init_socket_peer_label = mac_test_init_socket_peer_label,
2436	.mpo_init_vnode_label = mac_test_init_vnode_label,
2437	.mpo_destroy_bpfdesc_label = mac_test_destroy_bpfdesc_label,
2438	.mpo_destroy_cred_label = mac_test_destroy_cred_label,
2439	.mpo_destroy_devfsdirent_label = mac_test_destroy_devfsdirent_label,
2440	.mpo_destroy_ifnet_label = mac_test_destroy_ifnet_label,
2441	.mpo_destroy_sysv_msgmsg_label = mac_test_destroy_sysv_msgmsg_label,
2442	.mpo_destroy_sysv_msgqueue_label =
2443	    mac_test_destroy_sysv_msgqueue_label,
2444	.mpo_destroy_sysv_sema_label = mac_test_destroy_sysv_sema_label,
2445	.mpo_destroy_sysv_shm_label = mac_test_destroy_sysv_shm_label,
2446	.mpo_destroy_inpcb_label = mac_test_destroy_inpcb_label,
2447	.mpo_destroy_ipq_label = mac_test_destroy_ipq_label,
2448	.mpo_destroy_mbuf_label = mac_test_destroy_mbuf_label,
2449	.mpo_destroy_mount_label = mac_test_destroy_mount_label,
2450	.mpo_destroy_mount_fs_label = mac_test_destroy_mount_fs_label,
2451	.mpo_destroy_pipe_label = mac_test_destroy_pipe_label,
2452	.mpo_destroy_posix_sem_label = mac_test_destroy_posix_sem_label,
2453	.mpo_destroy_proc_label = mac_test_destroy_proc_label,
2454	.mpo_destroy_socket_label = mac_test_destroy_socket_label,
2455	.mpo_destroy_socket_peer_label = mac_test_destroy_socket_peer_label,
2456	.mpo_destroy_vnode_label = mac_test_destroy_vnode_label,
2457	.mpo_copy_cred_label = mac_test_copy_cred_label,
2458	.mpo_copy_ifnet_label = mac_test_copy_ifnet_label,
2459	.mpo_copy_mbuf_label = mac_test_copy_mbuf_label,
2460	.mpo_copy_pipe_label = mac_test_copy_pipe_label,
2461	.mpo_copy_socket_label = mac_test_copy_socket_label,
2462	.mpo_copy_vnode_label = mac_test_copy_vnode_label,
2463	.mpo_externalize_cred_label = mac_test_externalize_label,
2464	.mpo_externalize_ifnet_label = mac_test_externalize_label,
2465	.mpo_externalize_pipe_label = mac_test_externalize_label,
2466	.mpo_externalize_socket_label = mac_test_externalize_label,
2467	.mpo_externalize_socket_peer_label = mac_test_externalize_label,
2468	.mpo_externalize_vnode_label = mac_test_externalize_label,
2469	.mpo_internalize_cred_label = mac_test_internalize_label,
2470	.mpo_internalize_ifnet_label = mac_test_internalize_label,
2471	.mpo_internalize_pipe_label = mac_test_internalize_label,
2472	.mpo_internalize_socket_label = mac_test_internalize_label,
2473	.mpo_internalize_vnode_label = mac_test_internalize_label,
2474	.mpo_associate_vnode_devfs = mac_test_associate_vnode_devfs,
2475	.mpo_associate_vnode_extattr = mac_test_associate_vnode_extattr,
2476	.mpo_associate_vnode_singlelabel = mac_test_associate_vnode_singlelabel,
2477	.mpo_create_devfs_device = mac_test_create_devfs_device,
2478	.mpo_create_devfs_directory = mac_test_create_devfs_directory,
2479	.mpo_create_devfs_symlink = mac_test_create_devfs_symlink,
2480	.mpo_create_vnode_extattr = mac_test_create_vnode_extattr,
2481	.mpo_create_mount = mac_test_create_mount,
2482	.mpo_create_root_mount = mac_test_create_root_mount,
2483	.mpo_relabel_vnode = mac_test_relabel_vnode,
2484	.mpo_setlabel_vnode_extattr = mac_test_setlabel_vnode_extattr,
2485	.mpo_update_devfsdirent = mac_test_update_devfsdirent,
2486	.mpo_create_mbuf_from_socket = mac_test_create_mbuf_from_socket,
2487	.mpo_create_pipe = mac_test_create_pipe,
2488	.mpo_create_posix_sem = mac_test_create_posix_sem,
2489	.mpo_create_socket = mac_test_create_socket,
2490	.mpo_create_socket_from_socket = mac_test_create_socket_from_socket,
2491	.mpo_relabel_pipe = mac_test_relabel_pipe,
2492	.mpo_relabel_socket = mac_test_relabel_socket,
2493	.mpo_set_socket_peer_from_mbuf = mac_test_set_socket_peer_from_mbuf,
2494	.mpo_set_socket_peer_from_socket = mac_test_set_socket_peer_from_socket,
2495	.mpo_create_bpfdesc = mac_test_create_bpfdesc,
2496	.mpo_create_ifnet = mac_test_create_ifnet,
2497	.mpo_create_inpcb_from_socket = mac_test_create_inpcb_from_socket,
2498	.mpo_create_sysv_msgmsg = mac_test_create_sysv_msgmsg,
2499	.mpo_create_sysv_msgqueue = mac_test_create_sysv_msgqueue,
2500	.mpo_create_sysv_sema = mac_test_create_sysv_sema,
2501	.mpo_create_sysv_shm = mac_test_create_sysv_shm,
2502	.mpo_create_datagram_from_ipq = mac_test_create_datagram_from_ipq,
2503	.mpo_create_fragment = mac_test_create_fragment,
2504	.mpo_create_ipq = mac_test_create_ipq,
2505	.mpo_create_mbuf_from_inpcb = mac_test_create_mbuf_from_inpcb,
2506	.mpo_create_mbuf_from_mbuf = mac_test_create_mbuf_from_mbuf,
2507	.mpo_create_mbuf_linklayer = mac_test_create_mbuf_linklayer,
2508	.mpo_create_mbuf_from_bpfdesc = mac_test_create_mbuf_from_bpfdesc,
2509	.mpo_create_mbuf_from_ifnet = mac_test_create_mbuf_from_ifnet,
2510	.mpo_create_mbuf_multicast_encap = mac_test_create_mbuf_multicast_encap,
2511	.mpo_create_mbuf_netlayer = mac_test_create_mbuf_netlayer,
2512	.mpo_fragment_match = mac_test_fragment_match,
2513	.mpo_reflect_mbuf_icmp = mac_test_reflect_mbuf_icmp,
2514	.mpo_reflect_mbuf_tcp = mac_test_reflect_mbuf_tcp,
2515	.mpo_relabel_ifnet = mac_test_relabel_ifnet,
2516	.mpo_update_ipq = mac_test_update_ipq,
2517	.mpo_inpcb_sosetlabel = mac_test_inpcb_sosetlabel,
2518	.mpo_execve_transition = mac_test_execve_transition,
2519	.mpo_execve_will_transition = mac_test_execve_will_transition,
2520	.mpo_create_proc0 = mac_test_create_proc0,
2521	.mpo_create_proc1 = mac_test_create_proc1,
2522	.mpo_relabel_cred = mac_test_relabel_cred,
2523	.mpo_thread_userret = mac_test_thread_userret,
2524	.mpo_cleanup_sysv_msgmsg = mac_test_cleanup_sysv_msgmsg,
2525	.mpo_cleanup_sysv_msgqueue = mac_test_cleanup_sysv_msgqueue,
2526	.mpo_cleanup_sysv_sema = mac_test_cleanup_sysv_sema,
2527	.mpo_cleanup_sysv_shm = mac_test_cleanup_sysv_shm,
2528	.mpo_check_bpfdesc_receive = mac_test_check_bpfdesc_receive,
2529	.mpo_check_cred_relabel = mac_test_check_cred_relabel,
2530	.mpo_check_cred_visible = mac_test_check_cred_visible,
2531	.mpo_check_ifnet_relabel = mac_test_check_ifnet_relabel,
2532	.mpo_check_ifnet_transmit = mac_test_check_ifnet_transmit,
2533	.mpo_check_inpcb_deliver = mac_test_check_inpcb_deliver,
2534	.mpo_check_sysv_msgmsq = mac_test_check_sysv_msgmsq,
2535	.mpo_check_sysv_msgrcv = mac_test_check_sysv_msgrcv,
2536	.mpo_check_sysv_msgrmid = mac_test_check_sysv_msgrmid,
2537	.mpo_check_sysv_msqget = mac_test_check_sysv_msqget,
2538	.mpo_check_sysv_msqsnd = mac_test_check_sysv_msqsnd,
2539	.mpo_check_sysv_msqrcv = mac_test_check_sysv_msqrcv,
2540	.mpo_check_sysv_msqctl = mac_test_check_sysv_msqctl,
2541	.mpo_check_sysv_semctl = mac_test_check_sysv_semctl,
2542	.mpo_check_sysv_semget = mac_test_check_sysv_semget,
2543	.mpo_check_sysv_semop = mac_test_check_sysv_semop,
2544	.mpo_check_sysv_shmat = mac_test_check_sysv_shmat,
2545	.mpo_check_sysv_shmctl = mac_test_check_sysv_shmctl,
2546	.mpo_check_sysv_shmdt = mac_test_check_sysv_shmdt,
2547	.mpo_check_sysv_shmget = mac_test_check_sysv_shmget,
2548	.mpo_check_kenv_dump = mac_test_check_kenv_dump,
2549	.mpo_check_kenv_get = mac_test_check_kenv_get,
2550	.mpo_check_kenv_set = mac_test_check_kenv_set,
2551	.mpo_check_kenv_unset = mac_test_check_kenv_unset,
2552	.mpo_check_kld_load = mac_test_check_kld_load,
2553	.mpo_check_kld_stat = mac_test_check_kld_stat,
2554	.mpo_check_kld_unload = mac_test_check_kld_unload,
2555	.mpo_check_mount_stat = mac_test_check_mount_stat,
2556	.mpo_check_pipe_ioctl = mac_test_check_pipe_ioctl,
2557	.mpo_check_pipe_poll = mac_test_check_pipe_poll,
2558	.mpo_check_pipe_read = mac_test_check_pipe_read,
2559	.mpo_check_pipe_relabel = mac_test_check_pipe_relabel,
2560	.mpo_check_pipe_stat = mac_test_check_pipe_stat,
2561	.mpo_check_pipe_write = mac_test_check_pipe_write,
2562	.mpo_check_posix_sem_destroy = mac_test_check_posix_sem,
2563	.mpo_check_posix_sem_getvalue = mac_test_check_posix_sem,
2564	.mpo_check_posix_sem_open = mac_test_check_posix_sem,
2565	.mpo_check_posix_sem_post = mac_test_check_posix_sem,
2566	.mpo_check_posix_sem_unlink = mac_test_check_posix_sem,
2567	.mpo_check_posix_sem_wait = mac_test_check_posix_sem,
2568	.mpo_check_proc_debug = mac_test_check_proc_debug,
2569	.mpo_check_proc_sched = mac_test_check_proc_sched,
2570	.mpo_check_proc_setuid = mac_test_check_proc_setuid,
2571	.mpo_check_proc_seteuid = mac_test_check_proc_seteuid,
2572	.mpo_check_proc_setgid = mac_test_check_proc_setgid,
2573	.mpo_check_proc_setegid = mac_test_check_proc_setegid,
2574	.mpo_check_proc_setgroups = mac_test_check_proc_setgroups,
2575	.mpo_check_proc_setreuid = mac_test_check_proc_setreuid,
2576	.mpo_check_proc_setregid = mac_test_check_proc_setregid,
2577	.mpo_check_proc_setresuid = mac_test_check_proc_setresuid,
2578	.mpo_check_proc_setresgid = mac_test_check_proc_setresgid,
2579	.mpo_check_proc_signal = mac_test_check_proc_signal,
2580	.mpo_check_proc_wait = mac_test_check_proc_wait,
2581	.mpo_check_socket_accept = mac_test_check_socket_accept,
2582	.mpo_check_socket_bind = mac_test_check_socket_bind,
2583	.mpo_check_socket_connect = mac_test_check_socket_connect,
2584	.mpo_check_socket_deliver = mac_test_check_socket_deliver,
2585	.mpo_check_socket_listen = mac_test_check_socket_listen,
2586	.mpo_check_socket_poll = mac_test_check_socket_poll,
2587	.mpo_check_socket_receive = mac_test_check_socket_receive,
2588	.mpo_check_socket_relabel = mac_test_check_socket_relabel,
2589	.mpo_check_socket_send = mac_test_check_socket_send,
2590	.mpo_check_socket_stat = mac_test_check_socket_stat,
2591	.mpo_check_socket_visible = mac_test_check_socket_visible,
2592	.mpo_check_sysarch_ioperm = mac_test_check_sysarch_ioperm,
2593	.mpo_check_system_acct = mac_test_check_system_acct,
2594	.mpo_check_system_reboot = mac_test_check_system_reboot,
2595	.mpo_check_system_settime = mac_test_check_system_settime,
2596	.mpo_check_system_swapon = mac_test_check_system_swapon,
2597	.mpo_check_system_swapoff = mac_test_check_system_swapoff,
2598	.mpo_check_system_sysctl = mac_test_check_system_sysctl,
2599	.mpo_check_vnode_access = mac_test_check_vnode_access,
2600	.mpo_check_vnode_chdir = mac_test_check_vnode_chdir,
2601	.mpo_check_vnode_chroot = mac_test_check_vnode_chroot,
2602	.mpo_check_vnode_create = mac_test_check_vnode_create,
2603	.mpo_check_vnode_delete = mac_test_check_vnode_delete,
2604	.mpo_check_vnode_deleteacl = mac_test_check_vnode_deleteacl,
2605	.mpo_check_vnode_deleteextattr = mac_test_check_vnode_deleteextattr,
2606	.mpo_check_vnode_exec = mac_test_check_vnode_exec,
2607	.mpo_check_vnode_getacl = mac_test_check_vnode_getacl,
2608	.mpo_check_vnode_getextattr = mac_test_check_vnode_getextattr,
2609	.mpo_check_vnode_link = mac_test_check_vnode_link,
2610	.mpo_check_vnode_listextattr = mac_test_check_vnode_listextattr,
2611	.mpo_check_vnode_lookup = mac_test_check_vnode_lookup,
2612	.mpo_check_vnode_mmap = mac_test_check_vnode_mmap,
2613	.mpo_check_vnode_open = mac_test_check_vnode_open,
2614	.mpo_check_vnode_poll = mac_test_check_vnode_poll,
2615	.mpo_check_vnode_read = mac_test_check_vnode_read,
2616	.mpo_check_vnode_readdir = mac_test_check_vnode_readdir,
2617	.mpo_check_vnode_readlink = mac_test_check_vnode_readlink,
2618	.mpo_check_vnode_relabel = mac_test_check_vnode_relabel,
2619	.mpo_check_vnode_rename_from = mac_test_check_vnode_rename_from,
2620	.mpo_check_vnode_rename_to = mac_test_check_vnode_rename_to,
2621	.mpo_check_vnode_revoke = mac_test_check_vnode_revoke,
2622	.mpo_check_vnode_setacl = mac_test_check_vnode_setacl,
2623	.mpo_check_vnode_setextattr = mac_test_check_vnode_setextattr,
2624	.mpo_check_vnode_setflags = mac_test_check_vnode_setflags,
2625	.mpo_check_vnode_setmode = mac_test_check_vnode_setmode,
2626	.mpo_check_vnode_setowner = mac_test_check_vnode_setowner,
2627	.mpo_check_vnode_setutimes = mac_test_check_vnode_setutimes,
2628	.mpo_check_vnode_stat = mac_test_check_vnode_stat,
2629	.mpo_check_vnode_write = mac_test_check_vnode_write,
2630};
2631
2632MAC_POLICY_SET(&mac_test_ops, mac_test, "TrustedBSD MAC/Test",
2633    MPC_LOADTIME_FLAG_UNLOADOK | MPC_LOADTIME_FLAG_LABELMBUFS, &test_slot);
2634