xref: /freebsd/sys/security/mac_test/mac_test.c (revision fe09513e7da852fcd5b4c63445142930cb99413b)
1d8a7b7a3SRobert Watson /*-
20142affcSRobert Watson  * Copyright (c) 1999-2002, 2007 Robert N. M. Watson
364094732SRobert Watson  * Copyright (c) 2001-2005 McAfee, Inc.
4d8a7b7a3SRobert Watson  * All rights reserved.
5d8a7b7a3SRobert Watson  *
6d8a7b7a3SRobert Watson  * This software was developed by Robert Watson for the TrustedBSD Project.
7d8a7b7a3SRobert Watson  *
864094732SRobert Watson  * This software was developed for the FreeBSD Project in part by McAfee
964094732SRobert Watson  * Research, the Security Research Division of McAfee, Inc. under
1064094732SRobert Watson  * DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the DARPA
1164094732SRobert Watson  * CHATS research program.
12d8a7b7a3SRobert Watson  *
13d8a7b7a3SRobert Watson  * Redistribution and use in source and binary forms, with or without
14d8a7b7a3SRobert Watson  * modification, are permitted provided that the following conditions
15d8a7b7a3SRobert Watson  * are met:
16d8a7b7a3SRobert Watson  * 1. Redistributions of source code must retain the above copyright
17d8a7b7a3SRobert Watson  *    notice, this list of conditions and the following disclaimer.
18d8a7b7a3SRobert Watson  * 2. Redistributions in binary form must reproduce the above copyright
19d8a7b7a3SRobert Watson  *    notice, this list of conditions and the following disclaimer in the
20d8a7b7a3SRobert Watson  *    documentation and/or other materials provided with the distribution.
21d8a7b7a3SRobert Watson  *
22d8a7b7a3SRobert Watson  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23d8a7b7a3SRobert Watson  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24d8a7b7a3SRobert Watson  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25d8a7b7a3SRobert Watson  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
26d8a7b7a3SRobert Watson  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27d8a7b7a3SRobert Watson  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28d8a7b7a3SRobert Watson  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29d8a7b7a3SRobert Watson  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30d8a7b7a3SRobert Watson  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31d8a7b7a3SRobert Watson  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32d8a7b7a3SRobert Watson  * SUCH DAMAGE.
33d8a7b7a3SRobert Watson  *
34d8a7b7a3SRobert Watson  * $FreeBSD$
35d8a7b7a3SRobert Watson  */
36d8a7b7a3SRobert Watson 
37d8a7b7a3SRobert Watson /*
38d8a7b7a3SRobert Watson  * Developed by the TrustedBSD Project.
396827d029SRobert Watson  *
406827d029SRobert Watson  * MAC Test policy - tests MAC Framework labeling by assigning object class
416827d029SRobert Watson  * magic numbers to each label and validates that each time an object label
426827d029SRobert Watson  * is passed into the policy, it has a consistent object type, catching
436827d029SRobert Watson  * incorrectly passed labels, labels passed after free, etc.
44d8a7b7a3SRobert Watson  */
45d8a7b7a3SRobert Watson 
46d8a7b7a3SRobert Watson #include <sys/param.h>
47d8a7b7a3SRobert Watson #include <sys/acl.h>
4832240d08SMarcel Moolenaar #include <sys/kdb.h>
49d8a7b7a3SRobert Watson #include <sys/kernel.h>
506aeb05d7STom Rhodes #include <sys/ksem.h>
510712b254SRobert Watson #include <sys/malloc.h>
527405fcc3SRobert Watson #include <sys/module.h>
53d8a7b7a3SRobert Watson #include <sys/mount.h>
547405fcc3SRobert Watson #include <sys/msg.h>
55d8a7b7a3SRobert Watson #include <sys/proc.h>
56d8a7b7a3SRobert Watson #include <sys/vnode.h>
577405fcc3SRobert Watson #include <sys/sem.h>
587405fcc3SRobert Watson #include <sys/shm.h>
59d8a7b7a3SRobert Watson #include <sys/socket.h>
60d8a7b7a3SRobert Watson #include <sys/socketvar.h>
6136422989SPoul-Henning Kamp #include <sys/sx.h>
62d8a7b7a3SRobert Watson #include <sys/sysctl.h>
63d8a7b7a3SRobert Watson 
64d8a7b7a3SRobert Watson #include <fs/devfs/devfs.h>
65d8a7b7a3SRobert Watson 
66d8a7b7a3SRobert Watson #include <net/bpfdesc.h>
67d8a7b7a3SRobert Watson #include <net/if.h>
68d8a7b7a3SRobert Watson #include <net/if_types.h>
69d8a7b7a3SRobert Watson #include <net/if_var.h>
70d8a7b7a3SRobert Watson 
710efd6615SRobert Watson #include <security/mac/mac_policy.h>
72d8a7b7a3SRobert Watson 
73d8a7b7a3SRobert Watson SYSCTL_DECL(_security_mac);
74d8a7b7a3SRobert Watson 
75d8a7b7a3SRobert Watson SYSCTL_NODE(_security_mac, OID_AUTO, test, CTLFLAG_RW, 0,
76d8a7b7a3SRobert Watson     "TrustedBSD mac_test policy controls");
77d8a7b7a3SRobert Watson 
786827d029SRobert Watson #define	MAGIC_BPF	0xfe1ad1b6
796827d029SRobert Watson #define	MAGIC_DEVFS	0x9ee79c32
806827d029SRobert Watson #define	MAGIC_IFNET	0xc218b120
816827d029SRobert Watson #define	MAGIC_INPCB	0x4440f7bb
826827d029SRobert Watson #define	MAGIC_IPQ	0x206188ef
836827d029SRobert Watson #define	MAGIC_MBUF	0xbbefa5bb
846827d029SRobert Watson #define	MAGIC_MOUNT	0xc7c46e47
856827d029SRobert Watson #define	MAGIC_SOCKET	0x9199c6cd
86269ad130SRobert Watson #define	MAGIC_SYSV_MSG	0x8bbba61e
87269ad130SRobert Watson #define	MAGIC_SYSV_MSQ	0xea672391
88269ad130SRobert Watson #define	MAGIC_SYSV_SEM	0x896e8a0b
89269ad130SRobert Watson #define	MAGIC_SYSV_SHM	0x76119ab0
906827d029SRobert Watson #define	MAGIC_PIPE	0xdc6c9919
91269ad130SRobert Watson #define	MAGIC_POSIX_SEM	0x78ae980c
926827d029SRobert Watson #define	MAGIC_PROC	0x3b4be98f
936827d029SRobert Watson #define	MAGIC_CRED	0x9a5a4987
946827d029SRobert Watson #define	MAGIC_VNODE	0x1a67a45c
956827d029SRobert Watson #define	MAGIC_FREE	0x849ba1fd
96d8a7b7a3SRobert Watson 
970142affcSRobert Watson #define	SLOT(x)	mac_label_get((x), test_slot)
980142affcSRobert Watson #define	SLOT_SET(x, v)	mac_label_set((x), test_slot, (v))
99250ee706SRobert Watson 
100d8a7b7a3SRobert Watson static int	test_slot;
101d8a7b7a3SRobert Watson SYSCTL_INT(_security_mac_test, OID_AUTO, slot, CTLFLAG_RD,
102d8a7b7a3SRobert Watson     &test_slot, 0, "Slot allocated by framework");
103d8a7b7a3SRobert Watson 
1046827d029SRobert Watson SYSCTL_NODE(_security_mac_test, OID_AUTO, counter, CTLFLAG_RW, 0,
1056827d029SRobert Watson     "TrustedBSD mac_test counters controls");
106d8a7b7a3SRobert Watson 
1076827d029SRobert Watson #define	COUNTER_DECL(variable)						\
1086827d029SRobert Watson 	static int counter_##variable;					\
1096827d029SRobert Watson 	SYSCTL_INT(_security_mac_test_counter, OID_AUTO, variable,	\
1106827d029SRobert Watson 	CTLFLAG_RD, &counter_##variable, 0, #variable)
111d8a7b7a3SRobert Watson 
1126827d029SRobert Watson #define	COUNTER_INC(variable)	atomic_add_int(&counter_##variable, 1)
1136827d029SRobert Watson 
114b2e3811cSRobert Watson #ifdef KDB
1156827d029SRobert Watson #define	DEBUGGER(func, string)	kdb_enter((string))
116b2e3811cSRobert Watson #else
1176827d029SRobert Watson #define	DEBUGGER(func, string)	printf("mac_test: %s: %s\n", (func), (string))
118b2e3811cSRobert Watson #endif
119b2e3811cSRobert Watson 
1206827d029SRobert Watson #define	LABEL_CHECK(label, magic) do {					\
1216827d029SRobert Watson 	if (label != NULL) {						\
1226827d029SRobert Watson 		KASSERT(SLOT(label) == magic ||	SLOT(label) == 0,	\
1236827d029SRobert Watson 		    ("%s: bad %s label", __func__, #magic));		\
1246827d029SRobert Watson 	}								\
1256827d029SRobert Watson } while (0)
1266827d029SRobert Watson 
127269ad130SRobert Watson #define	LABEL_DESTROY(label, magic) do {				\
1286827d029SRobert Watson 	if (SLOT(label) == magic || SLOT(label) == 0) {			\
1296827d029SRobert Watson 		SLOT_SET(label, MAGIC_FREE);				\
1306827d029SRobert Watson 	} else if (SLOT(label) == MAGIC_FREE) {				\
1316827d029SRobert Watson 		DEBUGGER("%s: dup destroy", __func__);			\
1326827d029SRobert Watson 	} else {							\
1336827d029SRobert Watson 		DEBUGGER("%s: corrupted label", __func__);		\
1346827d029SRobert Watson 	}								\
1356827d029SRobert Watson } while (0)
1366827d029SRobert Watson 
137269ad130SRobert Watson #define	LABEL_INIT(label, magic) do {					\
138269ad130SRobert Watson 	SLOT_SET(label, magic);						\
139269ad130SRobert Watson } while (0)
140269ad130SRobert Watson 
1416827d029SRobert Watson #define	LABEL_NOTFREE(label) do {					\
1426827d029SRobert Watson 	KASSERT(SLOT(label) != MAGIC_FREE,				\
1436827d029SRobert Watson 	    ("%s: destroyed label", __func__));				\
1446827d029SRobert Watson } while (0)
1456827d029SRobert Watson 
146d8a7b7a3SRobert Watson /*
147d8a7b7a3SRobert Watson  * Label operations.
148d8a7b7a3SRobert Watson  */
149269ad130SRobert Watson COUNTER_DECL(init_bpfdesc_label);
150d8a7b7a3SRobert Watson static void
15196adb909SRobert Watson mac_test_init_bpfdesc_label(struct label *label)
152d8a7b7a3SRobert Watson {
153d8a7b7a3SRobert Watson 
154269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_BPF);
155269ad130SRobert Watson 	COUNTER_INC(init_bpfdesc_label);
156d8a7b7a3SRobert Watson }
157d8a7b7a3SRobert Watson 
158269ad130SRobert Watson COUNTER_DECL(init_cred_label);
159d8a7b7a3SRobert Watson static void
16096adb909SRobert Watson mac_test_init_cred_label(struct label *label)
161d8a7b7a3SRobert Watson {
162d8a7b7a3SRobert Watson 
163269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_CRED);
164269ad130SRobert Watson 	COUNTER_INC(init_cred_label);
165d8a7b7a3SRobert Watson }
166d8a7b7a3SRobert Watson 
16730575990SRobert Watson COUNTER_DECL(init_devfs_label);
168d8a7b7a3SRobert Watson static void
16930575990SRobert Watson mac_test_init_devfs_label(struct label *label)
170d8a7b7a3SRobert Watson {
171d8a7b7a3SRobert Watson 
172269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_DEVFS);
17330575990SRobert Watson 	COUNTER_INC(init_devfs_label);
174d8a7b7a3SRobert Watson }
175d8a7b7a3SRobert Watson 
176269ad130SRobert Watson COUNTER_DECL(init_ifnet_label);
177d8a7b7a3SRobert Watson static void
17896adb909SRobert Watson mac_test_init_ifnet_label(struct label *label)
179d8a7b7a3SRobert Watson {
180d8a7b7a3SRobert Watson 
181269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_IFNET);
182269ad130SRobert Watson 	COUNTER_INC(init_ifnet_label);
183d8a7b7a3SRobert Watson }
184d8a7b7a3SRobert Watson 
185269ad130SRobert Watson COUNTER_DECL(init_inpcb_label);
1865e7ce478SRobert Watson static int
187a557af22SRobert Watson mac_test_init_inpcb_label(struct label *label, int flag)
188a557af22SRobert Watson {
189a557af22SRobert Watson 
190a557af22SRobert Watson 	if (flag & M_WAITOK)
191a557af22SRobert Watson 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
192a557af22SRobert Watson 		    "mac_test_init_inpcb_label() at %s:%d", __FILE__,
193a557af22SRobert Watson 		    __LINE__);
194a557af22SRobert Watson 
195269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_INPCB);
196269ad130SRobert Watson 	COUNTER_INC(init_inpcb_label);
197a557af22SRobert Watson 	return (0);
198a557af22SRobert Watson }
199a557af22SRobert Watson 
200269ad130SRobert Watson COUNTER_DECL(init_sysv_msg_label);
2017e400ed1SRobert Watson static void
2027e400ed1SRobert Watson mac_test_init_sysv_msgmsg_label(struct label *label)
2037e400ed1SRobert Watson {
204269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_SYSV_MSG);
205269ad130SRobert Watson 	COUNTER_INC(init_sysv_msg_label);
2067e400ed1SRobert Watson }
2077e400ed1SRobert Watson 
208269ad130SRobert Watson COUNTER_DECL(init_sysv_msq_label);
2097e400ed1SRobert Watson static void
2107e400ed1SRobert Watson mac_test_init_sysv_msgqueue_label(struct label *label)
2117e400ed1SRobert Watson {
212269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_SYSV_MSQ);
213269ad130SRobert Watson 	COUNTER_INC(init_sysv_msq_label);
2147e400ed1SRobert Watson }
2157e400ed1SRobert Watson 
216269ad130SRobert Watson COUNTER_DECL(init_sysv_sem_label);
2177e400ed1SRobert Watson static void
2183831e7d7SRobert Watson mac_test_init_sysv_sem_label(struct label *label)
2197e400ed1SRobert Watson {
220269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_SYSV_SEM);
221269ad130SRobert Watson 	COUNTER_INC(init_sysv_sem_label);
2227e400ed1SRobert Watson }
2237e400ed1SRobert Watson 
224269ad130SRobert Watson COUNTER_DECL(init_sysv_shm_label);
2257e400ed1SRobert Watson static void
2267e400ed1SRobert Watson mac_test_init_sysv_shm_label(struct label *label)
2277e400ed1SRobert Watson {
228269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_SYSV_SHM);
229269ad130SRobert Watson 	COUNTER_INC(init_sysv_shm_label);
2307e400ed1SRobert Watson }
2317e400ed1SRobert Watson 
232269ad130SRobert Watson COUNTER_DECL(init_ipq_label);
233a557af22SRobert Watson static int
2345e7ce478SRobert Watson mac_test_init_ipq_label(struct label *label, int flag)
235d8a7b7a3SRobert Watson {
236d8a7b7a3SRobert Watson 
2370712b254SRobert Watson 	if (flag & M_WAITOK)
2380712b254SRobert Watson 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
2390712b254SRobert Watson 		    "mac_test_init_ipq_label() at %s:%d", __FILE__,
2400712b254SRobert Watson 		    __LINE__);
2410712b254SRobert Watson 
242269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_IPQ);
243269ad130SRobert Watson 	COUNTER_INC(init_ipq_label);
2445e7ce478SRobert Watson 	return (0);
245d8a7b7a3SRobert Watson }
246d8a7b7a3SRobert Watson 
247269ad130SRobert Watson COUNTER_DECL(init_mbuf_label);
248d8a7b7a3SRobert Watson static int
24996adb909SRobert Watson mac_test_init_mbuf_label(struct label *label, int flag)
250d8a7b7a3SRobert Watson {
251d8a7b7a3SRobert Watson 
2520712b254SRobert Watson 	if (flag & M_WAITOK)
2530712b254SRobert Watson 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
2540712b254SRobert Watson 		    "mac_test_init_mbuf_label() at %s:%d", __FILE__,
2550712b254SRobert Watson 		    __LINE__);
2560712b254SRobert Watson 
257269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_MBUF);
258269ad130SRobert Watson 	COUNTER_INC(init_mbuf_label);
259d8a7b7a3SRobert Watson 	return (0);
260d8a7b7a3SRobert Watson }
261d8a7b7a3SRobert Watson 
262269ad130SRobert Watson COUNTER_DECL(init_mount_label);
263d8a7b7a3SRobert Watson static void
26496adb909SRobert Watson mac_test_init_mount_label(struct label *label)
265d8a7b7a3SRobert Watson {
266d8a7b7a3SRobert Watson 
267269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_MOUNT);
268269ad130SRobert Watson 	COUNTER_INC(init_mount_label);
269d8a7b7a3SRobert Watson }
270d8a7b7a3SRobert Watson 
271269ad130SRobert Watson COUNTER_DECL(init_socket_label);
27283985c26SRobert Watson static int
27383985c26SRobert Watson mac_test_init_socket_label(struct label *label, int flag)
274d8a7b7a3SRobert Watson {
275d8a7b7a3SRobert Watson 
2760712b254SRobert Watson 	if (flag & M_WAITOK)
2770712b254SRobert Watson 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
2780712b254SRobert Watson 		    "mac_test_init_socket_label() at %s:%d", __FILE__,
2790712b254SRobert Watson 		    __LINE__);
2800712b254SRobert Watson 
281269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_SOCKET);
282269ad130SRobert Watson 	COUNTER_INC(init_socket_label);
28383985c26SRobert Watson 	return (0);
284d8a7b7a3SRobert Watson }
285d8a7b7a3SRobert Watson 
286269ad130SRobert Watson COUNTER_DECL(init_socket_peer_label);
28783985c26SRobert Watson static int
28883985c26SRobert Watson mac_test_init_socket_peer_label(struct label *label, int flag)
28996adb909SRobert Watson {
29096adb909SRobert Watson 
2910712b254SRobert Watson 	if (flag & M_WAITOK)
2920712b254SRobert Watson 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
2930712b254SRobert Watson 		    "mac_test_init_socket_peer_label() at %s:%d", __FILE__,
2940712b254SRobert Watson 		    __LINE__);
2950712b254SRobert Watson 
296269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_SOCKET);
297269ad130SRobert Watson 	COUNTER_INC(init_socket_peer_label);
29883985c26SRobert Watson 	return (0);
29996adb909SRobert Watson }
30096adb909SRobert Watson 
301269ad130SRobert Watson COUNTER_DECL(init_pipe_label);
30296adb909SRobert Watson static void
30396adb909SRobert Watson mac_test_init_pipe_label(struct label *label)
304d8a7b7a3SRobert Watson {
305d8a7b7a3SRobert Watson 
306269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_PIPE);
307269ad130SRobert Watson 	COUNTER_INC(init_pipe_label);
308d8a7b7a3SRobert Watson }
309d8a7b7a3SRobert Watson 
310269ad130SRobert Watson COUNTER_DECL(init_posix_sem_label);
311d8a7b7a3SRobert Watson static void
31252648411SRobert Watson mac_test_init_posix_sem_label(struct label *label)
31352648411SRobert Watson {
31452648411SRobert Watson 
315269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_POSIX_SEM);
316269ad130SRobert Watson 	COUNTER_INC(init_posix_sem_label);
31752648411SRobert Watson }
31852648411SRobert Watson 
319269ad130SRobert Watson COUNTER_DECL(init_proc_label);
32052648411SRobert Watson static void
321ca26e8baSRobert Watson mac_test_init_proc_label(struct label *label)
322ca26e8baSRobert Watson {
323ca26e8baSRobert Watson 
324269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_PROC);
325269ad130SRobert Watson 	COUNTER_INC(init_proc_label);
326ca26e8baSRobert Watson }
327ca26e8baSRobert Watson 
328269ad130SRobert Watson COUNTER_DECL(init_vnode_label);
329ca26e8baSRobert Watson static void
33096adb909SRobert Watson mac_test_init_vnode_label(struct label *label)
331d8a7b7a3SRobert Watson {
332d8a7b7a3SRobert Watson 
333269ad130SRobert Watson 	LABEL_INIT(label, MAGIC_VNODE);
334269ad130SRobert Watson 	COUNTER_INC(init_vnode_label);
335d8a7b7a3SRobert Watson }
336d8a7b7a3SRobert Watson 
337269ad130SRobert Watson COUNTER_DECL(destroy_bpfdesc_label);
338d8a7b7a3SRobert Watson static void
33996adb909SRobert Watson mac_test_destroy_bpfdesc_label(struct label *label)
340d8a7b7a3SRobert Watson {
341d8a7b7a3SRobert Watson 
342269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_BPF);
343269ad130SRobert Watson 	COUNTER_INC(destroy_bpfdesc_label);
344d8a7b7a3SRobert Watson }
345d8a7b7a3SRobert Watson 
346269ad130SRobert Watson COUNTER_DECL(destroy_cred_label);
347d8a7b7a3SRobert Watson static void
34896adb909SRobert Watson mac_test_destroy_cred_label(struct label *label)
349d8a7b7a3SRobert Watson {
350d8a7b7a3SRobert Watson 
351269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_CRED);
352269ad130SRobert Watson 	COUNTER_INC(destroy_cred_label);
353d8a7b7a3SRobert Watson }
354d8a7b7a3SRobert Watson 
35530575990SRobert Watson COUNTER_DECL(destroy_devfs_label);
356d8a7b7a3SRobert Watson static void
35730575990SRobert Watson mac_test_destroy_devfs_label(struct label *label)
358d8a7b7a3SRobert Watson {
359d8a7b7a3SRobert Watson 
360269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_DEVFS);
36130575990SRobert Watson 	COUNTER_INC(destroy_devfs_label);
362d8a7b7a3SRobert Watson }
363d8a7b7a3SRobert Watson 
364269ad130SRobert Watson COUNTER_DECL(destroy_ifnet_label);
365d8a7b7a3SRobert Watson static void
36696adb909SRobert Watson mac_test_destroy_ifnet_label(struct label *label)
367d8a7b7a3SRobert Watson {
368d8a7b7a3SRobert Watson 
369269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_IFNET);
370269ad130SRobert Watson 	COUNTER_INC(destroy_ifnet_label);
371d8a7b7a3SRobert Watson }
372d8a7b7a3SRobert Watson 
373269ad130SRobert Watson COUNTER_DECL(destroy_inpcb_label);
374d8a7b7a3SRobert Watson static void
375a557af22SRobert Watson mac_test_destroy_inpcb_label(struct label *label)
376a557af22SRobert Watson {
377a557af22SRobert Watson 
378269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_INPCB);
379269ad130SRobert Watson 	COUNTER_INC(destroy_inpcb_label);
380a557af22SRobert Watson }
381a557af22SRobert Watson 
382269ad130SRobert Watson COUNTER_DECL(destroy_sysv_msg_label);
383a557af22SRobert Watson static void
3847e400ed1SRobert Watson mac_test_destroy_sysv_msgmsg_label(struct label *label)
3857e400ed1SRobert Watson {
3867e400ed1SRobert Watson 
387269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_SYSV_MSG);
388269ad130SRobert Watson 	COUNTER_INC(destroy_sysv_msg_label);
3897e400ed1SRobert Watson }
3907e400ed1SRobert Watson 
391269ad130SRobert Watson COUNTER_DECL(destroy_sysv_msq_label);
3927e400ed1SRobert Watson static void
3937e400ed1SRobert Watson mac_test_destroy_sysv_msgqueue_label(struct label *label)
3947e400ed1SRobert Watson {
3957e400ed1SRobert Watson 
396269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_SYSV_MSQ);
397269ad130SRobert Watson 	COUNTER_INC(destroy_sysv_msq_label);
3987e400ed1SRobert Watson }
3997e400ed1SRobert Watson 
400269ad130SRobert Watson COUNTER_DECL(destroy_sysv_sem_label);
4017e400ed1SRobert Watson static void
4023831e7d7SRobert Watson mac_test_destroy_sysv_sem_label(struct label *label)
4037e400ed1SRobert Watson {
4047e400ed1SRobert Watson 
405269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_SYSV_SEM);
406269ad130SRobert Watson 	COUNTER_INC(destroy_sysv_sem_label);
4077e400ed1SRobert Watson }
4087e400ed1SRobert Watson 
409269ad130SRobert Watson COUNTER_DECL(destroy_sysv_shm_label);
4107e400ed1SRobert Watson static void
4117e400ed1SRobert Watson mac_test_destroy_sysv_shm_label(struct label *label)
4127e400ed1SRobert Watson {
4137e400ed1SRobert Watson 
414269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_SYSV_SHM);
415269ad130SRobert Watson 	COUNTER_INC(destroy_sysv_shm_label);
4167e400ed1SRobert Watson }
4177e400ed1SRobert Watson 
418269ad130SRobert Watson COUNTER_DECL(destroy_ipq_label);
4197e400ed1SRobert Watson static void
42096adb909SRobert Watson mac_test_destroy_ipq_label(struct label *label)
421d8a7b7a3SRobert Watson {
422d8a7b7a3SRobert Watson 
423269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_IPQ);
424269ad130SRobert Watson 	COUNTER_INC(destroy_ipq_label);
425d8a7b7a3SRobert Watson }
426d8a7b7a3SRobert Watson 
427269ad130SRobert Watson COUNTER_DECL(destroy_mbuf_label);
428d8a7b7a3SRobert Watson static void
42996adb909SRobert Watson mac_test_destroy_mbuf_label(struct label *label)
430d8a7b7a3SRobert Watson {
431d8a7b7a3SRobert Watson 
4320712b254SRobert Watson 	/*
4330712b254SRobert Watson 	 * If we're loaded dynamically, there may be mbufs in flight that
4340712b254SRobert Watson 	 * didn't have label storage allocated for them.  Handle this
4350712b254SRobert Watson 	 * gracefully.
4360712b254SRobert Watson 	 */
4370712b254SRobert Watson 	if (label == NULL)
4380712b254SRobert Watson 		return;
4390712b254SRobert Watson 
440269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_MBUF);
441269ad130SRobert Watson 	COUNTER_INC(destroy_mbuf_label);
442d8a7b7a3SRobert Watson }
443d8a7b7a3SRobert Watson 
444269ad130SRobert Watson COUNTER_DECL(destroy_mount_label);
445d8a7b7a3SRobert Watson static void
44696adb909SRobert Watson mac_test_destroy_mount_label(struct label *label)
447d8a7b7a3SRobert Watson {
448d8a7b7a3SRobert Watson 
449269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_MOUNT);
450269ad130SRobert Watson 	COUNTER_INC(destroy_mount_label);
451d8a7b7a3SRobert Watson }
452d8a7b7a3SRobert Watson 
453269ad130SRobert Watson COUNTER_DECL(destroy_socket_label);
45496adb909SRobert Watson static void
45596adb909SRobert Watson mac_test_destroy_socket_label(struct label *label)
45696adb909SRobert Watson {
45796adb909SRobert Watson 
458269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_SOCKET);
459269ad130SRobert Watson 	COUNTER_INC(destroy_socket_label);
460d8a7b7a3SRobert Watson }
46196adb909SRobert Watson 
462269ad130SRobert Watson COUNTER_DECL(destroy_socket_peer_label);
463d8a7b7a3SRobert Watson static void
46496adb909SRobert Watson mac_test_destroy_socket_peer_label(struct label *label)
46596adb909SRobert Watson {
46696adb909SRobert Watson 
467269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_SOCKET);
468269ad130SRobert Watson 	COUNTER_INC(destroy_socket_peer_label);
46996adb909SRobert Watson }
47096adb909SRobert Watson 
471269ad130SRobert Watson COUNTER_DECL(destroy_pipe_label);
47296adb909SRobert Watson static void
47396adb909SRobert Watson mac_test_destroy_pipe_label(struct label *label)
474d8a7b7a3SRobert Watson {
475d8a7b7a3SRobert Watson 
476269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_PIPE);
477269ad130SRobert Watson 	COUNTER_INC(destroy_pipe_label);
478d8a7b7a3SRobert Watson }
479d8a7b7a3SRobert Watson 
480269ad130SRobert Watson COUNTER_DECL(destroy_posix_sem_label);
481d8a7b7a3SRobert Watson static void
48252648411SRobert Watson mac_test_destroy_posix_sem_label(struct label *label)
48352648411SRobert Watson {
48452648411SRobert Watson 
485269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_POSIX_SEM);
486269ad130SRobert Watson 	COUNTER_INC(destroy_posix_sem_label);
48752648411SRobert Watson }
48852648411SRobert Watson 
489269ad130SRobert Watson COUNTER_DECL(destroy_proc_label);
49052648411SRobert Watson static void
491ca26e8baSRobert Watson mac_test_destroy_proc_label(struct label *label)
492ca26e8baSRobert Watson {
493ca26e8baSRobert Watson 
494269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_PROC);
495269ad130SRobert Watson 	COUNTER_INC(destroy_proc_label);
496ca26e8baSRobert Watson }
497ca26e8baSRobert Watson 
498269ad130SRobert Watson COUNTER_DECL(destroy_vnode_label);
499ca26e8baSRobert Watson static void
50096adb909SRobert Watson mac_test_destroy_vnode_label(struct label *label)
501d8a7b7a3SRobert Watson {
502d8a7b7a3SRobert Watson 
503269ad130SRobert Watson 	LABEL_DESTROY(label, MAGIC_VNODE);
504269ad130SRobert Watson 	COUNTER_INC(destroy_vnode_label);
505d8a7b7a3SRobert Watson }
506d8a7b7a3SRobert Watson 
507269ad130SRobert Watson COUNTER_DECL(copy_cred_label);
5080196273bSRobert Watson static void
50956d9e932SRobert Watson mac_test_copy_cred_label(struct label *src, struct label *dest)
51056d9e932SRobert Watson {
51156d9e932SRobert Watson 
5126827d029SRobert Watson 	LABEL_CHECK(src, MAGIC_CRED);
5136827d029SRobert Watson 	LABEL_CHECK(dest, MAGIC_CRED);
514269ad130SRobert Watson 	COUNTER_INC(copy_cred_label);
51556d9e932SRobert Watson }
51656d9e932SRobert Watson 
517269ad130SRobert Watson COUNTER_DECL(copy_ifnet_label);
51856d9e932SRobert Watson static void
5192220907bSRobert Watson mac_test_copy_ifnet_label(struct label *src, struct label *dest)
5202220907bSRobert Watson {
5212220907bSRobert Watson 
5226827d029SRobert Watson 	LABEL_CHECK(src, MAGIC_IFNET);
5236827d029SRobert Watson 	LABEL_CHECK(dest, MAGIC_IFNET);
524269ad130SRobert Watson 	COUNTER_INC(copy_ifnet_label);
5252220907bSRobert Watson }
5262220907bSRobert Watson 
527269ad130SRobert Watson COUNTER_DECL(copy_mbuf_label);
5282220907bSRobert Watson static void
5290196273bSRobert Watson mac_test_copy_mbuf_label(struct label *src, struct label *dest)
5300196273bSRobert Watson {
5310196273bSRobert Watson 
5326827d029SRobert Watson 	LABEL_CHECK(src, MAGIC_MBUF);
5336827d029SRobert Watson 	LABEL_CHECK(dest, MAGIC_MBUF);
534269ad130SRobert Watson 	COUNTER_INC(copy_mbuf_label);
5350196273bSRobert Watson }
5360196273bSRobert Watson 
537269ad130SRobert Watson COUNTER_DECL(copy_pipe_label);
5380196273bSRobert Watson static void
5390196273bSRobert Watson mac_test_copy_pipe_label(struct label *src, struct label *dest)
5400196273bSRobert Watson {
5410196273bSRobert Watson 
5426827d029SRobert Watson 	LABEL_CHECK(src, MAGIC_PIPE);
5436827d029SRobert Watson 	LABEL_CHECK(dest, MAGIC_PIPE);
544269ad130SRobert Watson 	COUNTER_INC(copy_pipe_label);
5450196273bSRobert Watson }
5460196273bSRobert Watson 
547269ad130SRobert Watson COUNTER_DECL(copy_socket_label);
5480196273bSRobert Watson static void
549b0323ea3SRobert Watson mac_test_copy_socket_label(struct label *src, struct label *dest)
550b0323ea3SRobert Watson {
551b0323ea3SRobert Watson 
5526827d029SRobert Watson 	LABEL_CHECK(src, MAGIC_SOCKET);
5536827d029SRobert Watson 	LABEL_CHECK(dest, MAGIC_SOCKET);
554269ad130SRobert Watson 	COUNTER_INC(copy_socket_label);
555b0323ea3SRobert Watson }
556b0323ea3SRobert Watson 
557269ad130SRobert Watson COUNTER_DECL(copy_vnode_label);
558b0323ea3SRobert Watson static void
5590196273bSRobert Watson mac_test_copy_vnode_label(struct label *src, struct label *dest)
5600196273bSRobert Watson {
5610196273bSRobert Watson 
5626827d029SRobert Watson 	LABEL_CHECK(src, MAGIC_VNODE);
5636827d029SRobert Watson 	LABEL_CHECK(dest, MAGIC_VNODE);
564269ad130SRobert Watson 	COUNTER_INC(copy_vnode_label);
5650196273bSRobert Watson }
5660196273bSRobert Watson 
567269ad130SRobert Watson COUNTER_DECL(externalize_label);
568d8a7b7a3SRobert Watson static int
56924e8d0d0SRobert Watson mac_test_externalize_label(struct label *label, char *element_name,
570f51e5803SRobert Watson     struct sbuf *sb, int *claimed)
571d8a7b7a3SRobert Watson {
572d8a7b7a3SRobert Watson 
5736827d029SRobert Watson 	LABEL_NOTFREE(label);
574269ad130SRobert Watson 	COUNTER_INC(externalize_label);
575250ee706SRobert Watson 
576d8a7b7a3SRobert Watson 	return (0);
577d8a7b7a3SRobert Watson }
578d8a7b7a3SRobert Watson 
579269ad130SRobert Watson COUNTER_DECL(internalize_label);
580d8a7b7a3SRobert Watson static int
5811979061bSRobert Watson mac_test_internalize_label(struct label *label, char *element_name,
5821979061bSRobert Watson     char *element_data, int *claimed)
583d8a7b7a3SRobert Watson {
584d8a7b7a3SRobert Watson 
5856827d029SRobert Watson 	LABEL_NOTFREE(label);
586269ad130SRobert Watson 	COUNTER_INC(internalize_label);
587250ee706SRobert Watson 
588d8a7b7a3SRobert Watson 	return (0);
589d8a7b7a3SRobert Watson }
590d8a7b7a3SRobert Watson 
591d8a7b7a3SRobert Watson /*
592d8a7b7a3SRobert Watson  * Labeling event operations: file system objects, and things that look
593d8a7b7a3SRobert Watson  * a lot like file system objects.
594d8a7b7a3SRobert Watson  */
595269ad130SRobert Watson COUNTER_DECL(associate_vnode_devfs);
596d8a7b7a3SRobert Watson static void
59778007886SRobert Watson mac_test_associate_vnode_devfs(struct mount *mp, struct label *mplabel,
598763bbd2fSRobert Watson     struct devfs_dirent *de, struct label *delabel, struct vnode *vp,
59978007886SRobert Watson     struct label *vplabel)
600763bbd2fSRobert Watson {
601763bbd2fSRobert Watson 
60278007886SRobert Watson 	LABEL_CHECK(mplabel, MAGIC_MOUNT);
6036827d029SRobert Watson 	LABEL_CHECK(delabel, MAGIC_DEVFS);
60478007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
605269ad130SRobert Watson 	COUNTER_INC(associate_vnode_devfs);
606763bbd2fSRobert Watson }
607763bbd2fSRobert Watson 
608269ad130SRobert Watson COUNTER_DECL(associate_vnode_extattr);
609763bbd2fSRobert Watson static int
61078007886SRobert Watson mac_test_associate_vnode_extattr(struct mount *mp, struct label *mplabel,
61178007886SRobert Watson     struct vnode *vp, struct label *vplabel)
612763bbd2fSRobert Watson {
613763bbd2fSRobert Watson 
61478007886SRobert Watson 	LABEL_CHECK(mplabel, MAGIC_MOUNT);
61578007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
616269ad130SRobert Watson 	COUNTER_INC(associate_vnode_extattr);
617269ad130SRobert Watson 
618763bbd2fSRobert Watson 	return (0);
619763bbd2fSRobert Watson }
620763bbd2fSRobert Watson 
621269ad130SRobert Watson COUNTER_DECL(associate_vnode_singlelabel);
622763bbd2fSRobert Watson static void
62378007886SRobert Watson mac_test_associate_vnode_singlelabel(struct mount *mp, struct label *mplabel,
62478007886SRobert Watson     struct vnode *vp, struct label *vplabel)
625763bbd2fSRobert Watson {
626763bbd2fSRobert Watson 
62778007886SRobert Watson 	LABEL_CHECK(mplabel, MAGIC_MOUNT);
62878007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
629269ad130SRobert Watson 	COUNTER_INC(associate_vnode_singlelabel);
630763bbd2fSRobert Watson }
631763bbd2fSRobert Watson 
632269ad130SRobert Watson COUNTER_DECL(create_devfs_device);
633763bbd2fSRobert Watson static void
634d26dd2d9SRobert Watson mac_test_create_devfs_device(struct ucred *cred, struct mount *mp,
63578007886SRobert Watson     struct cdev *dev, struct devfs_dirent *de, struct label *delabel)
636d8a7b7a3SRobert Watson {
637d8a7b7a3SRobert Watson 
6386827d029SRobert Watson 	if (cred != NULL)
6396827d029SRobert Watson 		LABEL_CHECK(cred->cr_label, MAGIC_CRED);
64078007886SRobert Watson 	LABEL_CHECK(delabel, MAGIC_DEVFS);
641269ad130SRobert Watson 	COUNTER_INC(create_devfs_device);
642d8a7b7a3SRobert Watson }
643d8a7b7a3SRobert Watson 
644269ad130SRobert Watson COUNTER_DECL(create_devfs_directory);
645d8a7b7a3SRobert Watson static void
646990b4b2dSRobert Watson mac_test_create_devfs_directory(struct mount *mp, char *dirname,
64778007886SRobert Watson     int dirnamelen, struct devfs_dirent *de, struct label *delabel)
648990b4b2dSRobert Watson {
649990b4b2dSRobert Watson 
65078007886SRobert Watson 	LABEL_CHECK(delabel, MAGIC_DEVFS);
651269ad130SRobert Watson 	COUNTER_INC(create_devfs_directory);
652990b4b2dSRobert Watson }
653990b4b2dSRobert Watson 
654269ad130SRobert Watson COUNTER_DECL(create_devfs_symlink);
655990b4b2dSRobert Watson static void
656990b4b2dSRobert Watson mac_test_create_devfs_symlink(struct ucred *cred, struct mount *mp,
657990b4b2dSRobert Watson     struct devfs_dirent *dd, struct label *ddlabel, struct devfs_dirent *de,
658990b4b2dSRobert Watson     struct label *delabel)
659eea8ea31SRobert Watson {
660eea8ea31SRobert Watson 
6616827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
6626827d029SRobert Watson 	LABEL_CHECK(ddlabel, MAGIC_DEVFS);
6636827d029SRobert Watson 	LABEL_CHECK(delabel, MAGIC_DEVFS);
664269ad130SRobert Watson 	COUNTER_INC(create_devfs_symlink);
665eea8ea31SRobert Watson }
666eea8ea31SRobert Watson 
667269ad130SRobert Watson COUNTER_DECL(create_vnode_extattr);
668763bbd2fSRobert Watson static int
669763bbd2fSRobert Watson mac_test_create_vnode_extattr(struct ucred *cred, struct mount *mp,
67078007886SRobert Watson     struct label *mplabel, struct vnode *dvp, struct label *dvplabel,
67178007886SRobert Watson     struct vnode *vp, struct label *vplabel, struct componentname *cnp)
672d8a7b7a3SRobert Watson {
673d8a7b7a3SRobert Watson 
6746827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
67578007886SRobert Watson 	LABEL_CHECK(mplabel, MAGIC_MOUNT);
67678007886SRobert Watson 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
677269ad130SRobert Watson 	COUNTER_INC(create_vnode_extattr);
678250ee706SRobert Watson 
679763bbd2fSRobert Watson 	return (0);
680d8a7b7a3SRobert Watson }
681d8a7b7a3SRobert Watson 
682269ad130SRobert Watson COUNTER_DECL(create_mount);
683d8a7b7a3SRobert Watson static void
684d8a7b7a3SRobert Watson mac_test_create_mount(struct ucred *cred, struct mount *mp,
68578007886SRobert Watson     struct label *mplabel)
686d8a7b7a3SRobert Watson {
687d8a7b7a3SRobert Watson 
6886827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
68978007886SRobert Watson 	LABEL_CHECK(mplabel, MAGIC_MOUNT);
690269ad130SRobert Watson 	COUNTER_INC(create_mount);
691d8a7b7a3SRobert Watson }
692d8a7b7a3SRobert Watson 
693269ad130SRobert Watson COUNTER_DECL(relabel_vnode);
694d8a7b7a3SRobert Watson static void
695d8a7b7a3SRobert Watson mac_test_relabel_vnode(struct ucred *cred, struct vnode *vp,
69678007886SRobert Watson     struct label *vplabel, struct label *label)
697d8a7b7a3SRobert Watson {
698d8a7b7a3SRobert Watson 
6996827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
70078007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
7016827d029SRobert Watson 	LABEL_CHECK(label, MAGIC_VNODE);
702269ad130SRobert Watson 	COUNTER_INC(relabel_vnode);
703d8a7b7a3SRobert Watson }
704d8a7b7a3SRobert Watson 
705269ad130SRobert Watson COUNTER_DECL(setlabel_vnode_extattr);
706d8a7b7a3SRobert Watson static int
707763bbd2fSRobert Watson mac_test_setlabel_vnode_extattr(struct ucred *cred, struct vnode *vp,
70878007886SRobert Watson     struct label *vplabel, struct label *intlabel)
709d8a7b7a3SRobert Watson {
710d8a7b7a3SRobert Watson 
7116827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
71278007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
7136827d029SRobert Watson 	LABEL_CHECK(intlabel, MAGIC_VNODE);
714269ad130SRobert Watson 	COUNTER_INC(setlabel_vnode_extattr);
715269ad130SRobert Watson 
716d8a7b7a3SRobert Watson 	return (0);
717d8a7b7a3SRobert Watson }
718d8a7b7a3SRobert Watson 
71930575990SRobert Watson COUNTER_DECL(update_devfs);
720d8a7b7a3SRobert Watson static void
72130575990SRobert Watson mac_test_update_devfs(struct mount *mp, struct devfs_dirent *devfs_dirent,
72230575990SRobert Watson     struct label *direntlabel, struct vnode *vp, struct label *vplabel)
723d8a7b7a3SRobert Watson {
724d8a7b7a3SRobert Watson 
7256827d029SRobert Watson 	LABEL_CHECK(direntlabel, MAGIC_DEVFS);
72678007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
72730575990SRobert Watson 	COUNTER_INC(update_devfs);
728d8a7b7a3SRobert Watson }
729d8a7b7a3SRobert Watson 
730d8a7b7a3SRobert Watson /*
731d8a7b7a3SRobert Watson  * Labeling event operations: IPC object.
732d8a7b7a3SRobert Watson  */
733269ad130SRobert Watson COUNTER_DECL(create_mbuf_from_socket);
734d8a7b7a3SRobert Watson static void
735d8a7b7a3SRobert Watson mac_test_create_mbuf_from_socket(struct socket *so, struct label *socketlabel,
736d8a7b7a3SRobert Watson     struct mbuf *m, struct label *mbuflabel)
737d8a7b7a3SRobert Watson {
738d8a7b7a3SRobert Watson 
7396827d029SRobert Watson 	LABEL_CHECK(socketlabel, MAGIC_SOCKET);
7406827d029SRobert Watson 	LABEL_CHECK(mbuflabel, MAGIC_MBUF);
741269ad130SRobert Watson 	COUNTER_INC(create_mbuf_from_socket);
742d8a7b7a3SRobert Watson }
743d8a7b7a3SRobert Watson 
744269ad130SRobert Watson COUNTER_DECL(create_socket);
745d8a7b7a3SRobert Watson static void
746d8a7b7a3SRobert Watson mac_test_create_socket(struct ucred *cred, struct socket *socket,
747d8a7b7a3SRobert Watson    struct label *socketlabel)
748d8a7b7a3SRobert Watson {
749d8a7b7a3SRobert Watson 
7506827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
7516827d029SRobert Watson 	LABEL_CHECK(socketlabel, MAGIC_SOCKET);
752269ad130SRobert Watson 	COUNTER_INC(create_socket);
753d8a7b7a3SRobert Watson }
754d8a7b7a3SRobert Watson 
755269ad130SRobert Watson COUNTER_DECL(create_pipe);
756d8a7b7a3SRobert Watson static void
7574795b82cSRobert Watson mac_test_create_pipe(struct ucred *cred, struct pipepair *pp,
758d8a7b7a3SRobert Watson    struct label *pipelabel)
759d8a7b7a3SRobert Watson {
760d8a7b7a3SRobert Watson 
7616827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
7626827d029SRobert Watson 	LABEL_CHECK(pipelabel, MAGIC_PIPE);
763269ad130SRobert Watson 	COUNTER_INC(create_pipe);
764d8a7b7a3SRobert Watson }
765d8a7b7a3SRobert Watson 
766269ad130SRobert Watson COUNTER_DECL(create_posix_sem);
767d8a7b7a3SRobert Watson static void
768fe09513eSRobert Watson mac_test_create_posix_sem(struct ucred *cred, struct ksem *ks,
769fe09513eSRobert Watson    struct label *kslabel)
77052648411SRobert Watson {
77152648411SRobert Watson 
7726827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
773fe09513eSRobert Watson 	LABEL_CHECK(kslabel, MAGIC_POSIX_SEM);
774269ad130SRobert Watson 	COUNTER_INC(create_posix_sem);
77552648411SRobert Watson }
77652648411SRobert Watson 
777269ad130SRobert Watson COUNTER_DECL(create_socket_from_socket);
77852648411SRobert Watson static void
779d8a7b7a3SRobert Watson mac_test_create_socket_from_socket(struct socket *oldsocket,
780d8a7b7a3SRobert Watson     struct label *oldsocketlabel, struct socket *newsocket,
781d8a7b7a3SRobert Watson     struct label *newsocketlabel)
782d8a7b7a3SRobert Watson {
783d8a7b7a3SRobert Watson 
7846827d029SRobert Watson 	LABEL_CHECK(oldsocketlabel, MAGIC_SOCKET);
7856827d029SRobert Watson 	LABEL_CHECK(newsocketlabel, MAGIC_SOCKET);
786269ad130SRobert Watson 	COUNTER_INC(create_socket_from_socket);
787d8a7b7a3SRobert Watson }
788d8a7b7a3SRobert Watson 
789269ad130SRobert Watson COUNTER_DECL(relabel_socket);
790d8a7b7a3SRobert Watson static void
791d8a7b7a3SRobert Watson mac_test_relabel_socket(struct ucred *cred, struct socket *socket,
792d8a7b7a3SRobert Watson     struct label *socketlabel, struct label *newlabel)
793d8a7b7a3SRobert Watson {
794d8a7b7a3SRobert Watson 
7956827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
7966827d029SRobert Watson 	LABEL_CHECK(newlabel, MAGIC_SOCKET);
797269ad130SRobert Watson 	COUNTER_INC(relabel_socket);
798d8a7b7a3SRobert Watson }
799d8a7b7a3SRobert Watson 
800269ad130SRobert Watson COUNTER_DECL(relabel_pipe);
801d8a7b7a3SRobert Watson static void
8024795b82cSRobert Watson mac_test_relabel_pipe(struct ucred *cred, struct pipepair *pp,
803d8a7b7a3SRobert Watson     struct label *pipelabel, struct label *newlabel)
804d8a7b7a3SRobert Watson {
805d8a7b7a3SRobert Watson 
8066827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
8076827d029SRobert Watson 	LABEL_CHECK(pipelabel, MAGIC_PIPE);
8086827d029SRobert Watson 	LABEL_CHECK(newlabel, MAGIC_PIPE);
809269ad130SRobert Watson 	COUNTER_INC(relabel_pipe);
810d8a7b7a3SRobert Watson }
811d8a7b7a3SRobert Watson 
812269ad130SRobert Watson COUNTER_DECL(set_socket_peer_from_mbuf);
813d8a7b7a3SRobert Watson static void
814d8a7b7a3SRobert Watson mac_test_set_socket_peer_from_mbuf(struct mbuf *mbuf, struct label *mbuflabel,
815d8a7b7a3SRobert Watson     struct socket *socket, struct label *socketpeerlabel)
816d8a7b7a3SRobert Watson {
817d8a7b7a3SRobert Watson 
8186827d029SRobert Watson 	LABEL_CHECK(mbuflabel, MAGIC_MBUF);
8196827d029SRobert Watson 	LABEL_CHECK(socketpeerlabel, MAGIC_SOCKET);
820269ad130SRobert Watson 	COUNTER_INC(set_socket_peer_from_mbuf);
821d8a7b7a3SRobert Watson }
822d8a7b7a3SRobert Watson 
823d8a7b7a3SRobert Watson /*
824d8a7b7a3SRobert Watson  * Labeling event operations: network objects.
825d8a7b7a3SRobert Watson  */
826269ad130SRobert Watson COUNTER_DECL(set_socket_peer_from_socket);
827d8a7b7a3SRobert Watson static void
828d8a7b7a3SRobert Watson mac_test_set_socket_peer_from_socket(struct socket *oldsocket,
829d8a7b7a3SRobert Watson     struct label *oldsocketlabel, struct socket *newsocket,
830d8a7b7a3SRobert Watson     struct label *newsocketpeerlabel)
831d8a7b7a3SRobert Watson {
832d8a7b7a3SRobert Watson 
8336827d029SRobert Watson 	LABEL_CHECK(oldsocketlabel, MAGIC_SOCKET);
8346827d029SRobert Watson 	LABEL_CHECK(newsocketpeerlabel, MAGIC_SOCKET);
835269ad130SRobert Watson 	COUNTER_INC(set_socket_peer_from_socket);
836d8a7b7a3SRobert Watson }
837d8a7b7a3SRobert Watson 
838269ad130SRobert Watson COUNTER_DECL(create_bpfdesc);
839d8a7b7a3SRobert Watson static void
840d8a7b7a3SRobert Watson mac_test_create_bpfdesc(struct ucred *cred, struct bpf_d *bpf_d,
841d8a7b7a3SRobert Watson     struct label *bpflabel)
842d8a7b7a3SRobert Watson {
843d8a7b7a3SRobert Watson 
8446827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
8456827d029SRobert Watson 	LABEL_CHECK(bpflabel, MAGIC_BPF);
846269ad130SRobert Watson 	COUNTER_INC(create_bpfdesc);
847d8a7b7a3SRobert Watson }
848d8a7b7a3SRobert Watson 
849269ad130SRobert Watson COUNTER_DECL(create_datagram_from_ipq);
850d8a7b7a3SRobert Watson static void
851d8a7b7a3SRobert Watson mac_test_create_datagram_from_ipq(struct ipq *ipq, struct label *ipqlabel,
852d8a7b7a3SRobert Watson     struct mbuf *datagram, struct label *datagramlabel)
853d8a7b7a3SRobert Watson {
854d8a7b7a3SRobert Watson 
8556827d029SRobert Watson 	LABEL_CHECK(ipqlabel, MAGIC_IPQ);
8566827d029SRobert Watson 	LABEL_CHECK(datagramlabel, MAGIC_MBUF);
857269ad130SRobert Watson 	COUNTER_INC(create_datagram_from_ipq);
858d8a7b7a3SRobert Watson }
859d8a7b7a3SRobert Watson 
860269ad130SRobert Watson COUNTER_DECL(create_fragment);
861d8a7b7a3SRobert Watson static void
862d8a7b7a3SRobert Watson mac_test_create_fragment(struct mbuf *datagram, struct label *datagramlabel,
863d8a7b7a3SRobert Watson     struct mbuf *fragment, struct label *fragmentlabel)
864d8a7b7a3SRobert Watson {
865d8a7b7a3SRobert Watson 
8666827d029SRobert Watson 	LABEL_CHECK(datagramlabel, MAGIC_MBUF);
8676827d029SRobert Watson 	LABEL_CHECK(fragmentlabel, MAGIC_MBUF);
868269ad130SRobert Watson 	COUNTER_INC(create_fragment);
869d8a7b7a3SRobert Watson }
870d8a7b7a3SRobert Watson 
871269ad130SRobert Watson COUNTER_DECL(create_ifnet);
872d8a7b7a3SRobert Watson static void
873d8a7b7a3SRobert Watson mac_test_create_ifnet(struct ifnet *ifnet, struct label *ifnetlabel)
874d8a7b7a3SRobert Watson {
875d8a7b7a3SRobert Watson 
8766827d029SRobert Watson 	LABEL_CHECK(ifnetlabel, MAGIC_IFNET);
877269ad130SRobert Watson 	COUNTER_INC(create_ifnet);
878d8a7b7a3SRobert Watson }
879d8a7b7a3SRobert Watson 
880269ad130SRobert Watson COUNTER_DECL(create_inpcb_from_socket);
881d8a7b7a3SRobert Watson static void
882a557af22SRobert Watson mac_test_create_inpcb_from_socket(struct socket *so, struct label *solabel,
883a557af22SRobert Watson     struct inpcb *inp, struct label *inplabel)
884a557af22SRobert Watson {
885a557af22SRobert Watson 
8866827d029SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
8876827d029SRobert Watson 	LABEL_CHECK(inplabel, MAGIC_INPCB);
888269ad130SRobert Watson 	COUNTER_INC(create_inpcb_from_socket);
889a557af22SRobert Watson }
890a557af22SRobert Watson 
891269ad130SRobert Watson COUNTER_DECL(create_sysv_msgmsg);
892a557af22SRobert Watson static void
8937e400ed1SRobert Watson mac_test_create_sysv_msgmsg(struct ucred *cred, struct msqid_kernel *msqkptr,
8947e400ed1SRobert Watson     struct label *msqlabel, struct msg *msgptr, struct label *msglabel)
8957e400ed1SRobert Watson {
8967e400ed1SRobert Watson 
897269ad130SRobert Watson 	LABEL_CHECK(msglabel, MAGIC_SYSV_MSG);
898269ad130SRobert Watson 	LABEL_CHECK(msqlabel, MAGIC_SYSV_MSQ);
899269ad130SRobert Watson 	COUNTER_INC(create_sysv_msgmsg);
9007e400ed1SRobert Watson }
9017e400ed1SRobert Watson 
902269ad130SRobert Watson COUNTER_DECL(create_sysv_msgqueue);
9037e400ed1SRobert Watson static void
9047e400ed1SRobert Watson mac_test_create_sysv_msgqueue(struct ucred *cred,
9057e400ed1SRobert Watson     struct msqid_kernel *msqkptr, struct label *msqlabel)
9067e400ed1SRobert Watson {
9077e400ed1SRobert Watson 
908269ad130SRobert Watson 	LABEL_CHECK(msqlabel, MAGIC_SYSV_MSQ);
909269ad130SRobert Watson 	COUNTER_INC(create_sysv_msgqueue);
9107e400ed1SRobert Watson }
9117e400ed1SRobert Watson 
912269ad130SRobert Watson COUNTER_DECL(create_sysv_sem);
9137e400ed1SRobert Watson static void
9143831e7d7SRobert Watson mac_test_create_sysv_sem(struct ucred *cred, struct semid_kernel *semakptr,
9157e400ed1SRobert Watson     struct label *semalabel)
9167e400ed1SRobert Watson {
9177e400ed1SRobert Watson 
918269ad130SRobert Watson 	LABEL_CHECK(semalabel, MAGIC_SYSV_SEM);
919269ad130SRobert Watson 	COUNTER_INC(create_sysv_sem);
9207e400ed1SRobert Watson }
9217e400ed1SRobert Watson 
922269ad130SRobert Watson COUNTER_DECL(create_sysv_shm);
9237e400ed1SRobert Watson static void
9247e400ed1SRobert Watson mac_test_create_sysv_shm(struct ucred *cred, struct shmid_kernel *shmsegptr,
9257e400ed1SRobert Watson     struct label *shmlabel)
9267e400ed1SRobert Watson {
9277e400ed1SRobert Watson 
928269ad130SRobert Watson 	LABEL_CHECK(shmlabel, MAGIC_SYSV_SHM);
929269ad130SRobert Watson 	COUNTER_INC(create_sysv_shm);
9307e400ed1SRobert Watson }
9317e400ed1SRobert Watson 
932269ad130SRobert Watson COUNTER_DECL(create_ipq);
9337e400ed1SRobert Watson static void
934d8a7b7a3SRobert Watson mac_test_create_ipq(struct mbuf *fragment, struct label *fragmentlabel,
935d8a7b7a3SRobert Watson     struct ipq *ipq, struct label *ipqlabel)
936d8a7b7a3SRobert Watson {
937d8a7b7a3SRobert Watson 
9386827d029SRobert Watson 	LABEL_CHECK(fragmentlabel, MAGIC_MBUF);
9396827d029SRobert Watson 	LABEL_CHECK(ipqlabel, MAGIC_IPQ);
940269ad130SRobert Watson 	COUNTER_INC(create_ipq);
941d8a7b7a3SRobert Watson }
942d8a7b7a3SRobert Watson 
943269ad130SRobert Watson COUNTER_DECL(create_mbuf_from_inpcb);
944d8a7b7a3SRobert Watson static void
9452d92ec98SRobert Watson mac_test_create_mbuf_from_inpcb(struct inpcb *inp, struct label *inplabel,
9462d92ec98SRobert Watson     struct mbuf *m, struct label *mlabel)
9472d92ec98SRobert Watson {
9482d92ec98SRobert Watson 
9496827d029SRobert Watson 	LABEL_CHECK(inplabel, MAGIC_INPCB);
9506827d029SRobert Watson 	LABEL_CHECK(mlabel, MAGIC_MBUF);
951269ad130SRobert Watson 	COUNTER_INC(create_mbuf_from_inpcb);
9522d92ec98SRobert Watson }
9532d92ec98SRobert Watson 
954269ad130SRobert Watson COUNTER_DECL(create_mbuf_linklayer);
9552d92ec98SRobert Watson static void
956d8a7b7a3SRobert Watson mac_test_create_mbuf_linklayer(struct ifnet *ifnet, struct label *ifnetlabel,
957d8a7b7a3SRobert Watson     struct mbuf *mbuf, struct label *mbuflabel)
958d8a7b7a3SRobert Watson {
959d8a7b7a3SRobert Watson 
9606827d029SRobert Watson 	LABEL_CHECK(ifnetlabel, MAGIC_IFNET);
9616827d029SRobert Watson 	LABEL_CHECK(mbuflabel, MAGIC_MBUF);
962269ad130SRobert Watson 	COUNTER_INC(create_mbuf_linklayer);
963d8a7b7a3SRobert Watson }
964d8a7b7a3SRobert Watson 
965269ad130SRobert Watson COUNTER_DECL(create_mbuf_from_bpfdesc);
966d8a7b7a3SRobert Watson static void
967d8a7b7a3SRobert Watson mac_test_create_mbuf_from_bpfdesc(struct bpf_d *bpf_d, struct label *bpflabel,
968d8a7b7a3SRobert Watson     struct mbuf *mbuf, struct label *mbuflabel)
969d8a7b7a3SRobert Watson {
970d8a7b7a3SRobert Watson 
9716827d029SRobert Watson 	LABEL_CHECK(bpflabel, MAGIC_BPF);
9726827d029SRobert Watson 	LABEL_CHECK(mbuflabel, MAGIC_MBUF);
973269ad130SRobert Watson 	COUNTER_INC(create_mbuf_from_bpfdesc);
974d8a7b7a3SRobert Watson }
975d8a7b7a3SRobert Watson 
976269ad130SRobert Watson COUNTER_DECL(create_mbuf_from_ifnet);
977d8a7b7a3SRobert Watson static void
978d8a7b7a3SRobert Watson mac_test_create_mbuf_from_ifnet(struct ifnet *ifnet, struct label *ifnetlabel,
979d8a7b7a3SRobert Watson     struct mbuf *m, struct label *mbuflabel)
980d8a7b7a3SRobert Watson {
981d8a7b7a3SRobert Watson 
9826827d029SRobert Watson 	LABEL_CHECK(ifnetlabel, MAGIC_IFNET);
9836827d029SRobert Watson 	LABEL_CHECK(mbuflabel, MAGIC_MBUF);
984269ad130SRobert Watson 	COUNTER_INC(create_mbuf_from_ifnet);
985d8a7b7a3SRobert Watson }
986d8a7b7a3SRobert Watson 
987269ad130SRobert Watson COUNTER_DECL(create_mbuf_multicast_encap);
988d8a7b7a3SRobert Watson static void
989d8a7b7a3SRobert Watson mac_test_create_mbuf_multicast_encap(struct mbuf *oldmbuf,
990d8a7b7a3SRobert Watson     struct label *oldmbuflabel, struct ifnet *ifnet, struct label *ifnetlabel,
991d8a7b7a3SRobert Watson     struct mbuf *newmbuf, struct label *newmbuflabel)
992d8a7b7a3SRobert Watson {
993d8a7b7a3SRobert Watson 
9946827d029SRobert Watson 	LABEL_CHECK(oldmbuflabel, MAGIC_MBUF);
9956827d029SRobert Watson 	LABEL_CHECK(ifnetlabel, MAGIC_IFNET);
9966827d029SRobert Watson 	LABEL_CHECK(newmbuflabel, MAGIC_MBUF);
997269ad130SRobert Watson 	COUNTER_INC(create_mbuf_multicast_encap);
998d8a7b7a3SRobert Watson }
999d8a7b7a3SRobert Watson 
1000269ad130SRobert Watson COUNTER_DECL(create_mbuf_netlayer);
1001d8a7b7a3SRobert Watson static void
1002d8a7b7a3SRobert Watson mac_test_create_mbuf_netlayer(struct mbuf *oldmbuf,
1003d8a7b7a3SRobert Watson     struct label *oldmbuflabel, struct mbuf *newmbuf,
1004d8a7b7a3SRobert Watson     struct label *newmbuflabel)
1005d8a7b7a3SRobert Watson {
1006d8a7b7a3SRobert Watson 
10076827d029SRobert Watson 	LABEL_CHECK(oldmbuflabel, MAGIC_MBUF);
10086827d029SRobert Watson 	LABEL_CHECK(newmbuflabel, MAGIC_MBUF);
1009269ad130SRobert Watson 	COUNTER_INC(create_mbuf_netlayer);
1010d8a7b7a3SRobert Watson }
1011d8a7b7a3SRobert Watson 
1012269ad130SRobert Watson COUNTER_DECL(fragment_match);
1013d8a7b7a3SRobert Watson static int
1014d8a7b7a3SRobert Watson mac_test_fragment_match(struct mbuf *fragment, struct label *fragmentlabel,
1015d8a7b7a3SRobert Watson     struct ipq *ipq, struct label *ipqlabel)
1016d8a7b7a3SRobert Watson {
1017d8a7b7a3SRobert Watson 
10186827d029SRobert Watson 	LABEL_CHECK(fragmentlabel, MAGIC_MBUF);
10196827d029SRobert Watson 	LABEL_CHECK(ipqlabel, MAGIC_IPQ);
1020269ad130SRobert Watson 	COUNTER_INC(fragment_match);
1021250ee706SRobert Watson 
1022d8a7b7a3SRobert Watson 	return (1);
1023d8a7b7a3SRobert Watson }
1024d8a7b7a3SRobert Watson 
1025269ad130SRobert Watson COUNTER_DECL(reflect_mbuf_icmp);
1026d8a7b7a3SRobert Watson static void
1027250ee706SRobert Watson mac_test_reflect_mbuf_icmp(struct mbuf *m, struct label *mlabel)
1028250ee706SRobert Watson {
1029250ee706SRobert Watson 
10306827d029SRobert Watson 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1031269ad130SRobert Watson 	COUNTER_INC(reflect_mbuf_icmp);
1032250ee706SRobert Watson }
1033250ee706SRobert Watson 
1034269ad130SRobert Watson COUNTER_DECL(reflect_mbuf_tcp);
1035250ee706SRobert Watson static void
1036250ee706SRobert Watson mac_test_reflect_mbuf_tcp(struct mbuf *m, struct label *mlabel)
1037250ee706SRobert Watson {
1038250ee706SRobert Watson 
10396827d029SRobert Watson 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1040269ad130SRobert Watson 	COUNTER_INC(reflect_mbuf_tcp);
1041250ee706SRobert Watson }
1042250ee706SRobert Watson 
1043269ad130SRobert Watson COUNTER_DECL(relabel_ifnet);
1044250ee706SRobert Watson static void
1045d8a7b7a3SRobert Watson mac_test_relabel_ifnet(struct ucred *cred, struct ifnet *ifnet,
1046d8a7b7a3SRobert Watson     struct label *ifnetlabel, struct label *newlabel)
1047d8a7b7a3SRobert Watson {
1048d8a7b7a3SRobert Watson 
10496827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
10506827d029SRobert Watson 	LABEL_CHECK(ifnetlabel, MAGIC_IFNET);
10516827d029SRobert Watson 	LABEL_CHECK(newlabel, MAGIC_IFNET);
1052269ad130SRobert Watson 	COUNTER_INC(relabel_ifnet);
1053d8a7b7a3SRobert Watson }
1054d8a7b7a3SRobert Watson 
1055269ad130SRobert Watson COUNTER_DECL(update_ipq);
1056d8a7b7a3SRobert Watson static void
1057d8a7b7a3SRobert Watson mac_test_update_ipq(struct mbuf *fragment, struct label *fragmentlabel,
1058d8a7b7a3SRobert Watson     struct ipq *ipq, struct label *ipqlabel)
1059d8a7b7a3SRobert Watson {
1060d8a7b7a3SRobert Watson 
10616827d029SRobert Watson 	LABEL_CHECK(fragmentlabel, MAGIC_MBUF);
10626827d029SRobert Watson 	LABEL_CHECK(ipqlabel, MAGIC_IPQ);
1063269ad130SRobert Watson 	COUNTER_INC(update_ipq);
1064d8a7b7a3SRobert Watson }
1065d8a7b7a3SRobert Watson 
1066269ad130SRobert Watson COUNTER_DECL(inpcb_sosetlabel);
1067a557af22SRobert Watson static void
1068a557af22SRobert Watson mac_test_inpcb_sosetlabel(struct socket *so, struct label *solabel,
1069a557af22SRobert Watson     struct inpcb *inp, struct label *inplabel)
1070a557af22SRobert Watson {
1071a557af22SRobert Watson 
10726827d029SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
10736827d029SRobert Watson 	LABEL_CHECK(inplabel, MAGIC_INPCB);
1074269ad130SRobert Watson 	COUNTER_INC(inpcb_sosetlabel);
1075a557af22SRobert Watson }
1076a557af22SRobert Watson 
1077d8a7b7a3SRobert Watson /*
1078d8a7b7a3SRobert Watson  * Labeling event operations: processes.
1079d8a7b7a3SRobert Watson  */
1080269ad130SRobert Watson COUNTER_DECL(execve_transition);
1081d8a7b7a3SRobert Watson static void
1082d8a7b7a3SRobert Watson mac_test_execve_transition(struct ucred *old, struct ucred *new,
1083939b97cbSRobert Watson     struct vnode *vp, struct label *filelabel,
108478007886SRobert Watson     struct label *interpvplabel, struct image_params *imgp,
1085ef5def59SRobert Watson     struct label *execlabel)
1086d8a7b7a3SRobert Watson {
1087d8a7b7a3SRobert Watson 
10886827d029SRobert Watson 	LABEL_CHECK(old->cr_label, MAGIC_CRED);
10896827d029SRobert Watson 	LABEL_CHECK(new->cr_label, MAGIC_CRED);
10906827d029SRobert Watson 	LABEL_CHECK(filelabel, MAGIC_VNODE);
109178007886SRobert Watson 	LABEL_CHECK(interpvplabel, MAGIC_VNODE);
10926827d029SRobert Watson 	LABEL_CHECK(execlabel, MAGIC_CRED);
1093269ad130SRobert Watson 	COUNTER_INC(execve_transition);
1094d8a7b7a3SRobert Watson }
1095d8a7b7a3SRobert Watson 
1096269ad130SRobert Watson COUNTER_DECL(execve_will_transition);
1097d8a7b7a3SRobert Watson static int
1098d8a7b7a3SRobert Watson mac_test_execve_will_transition(struct ucred *old, struct vnode *vp,
109978007886SRobert Watson     struct label *filelabel, struct label *interpvplabel,
1100ef5def59SRobert Watson     struct image_params *imgp, struct label *execlabel)
1101d8a7b7a3SRobert Watson {
1102d8a7b7a3SRobert Watson 
11036827d029SRobert Watson 	LABEL_CHECK(old->cr_label, MAGIC_CRED);
11046827d029SRobert Watson 	LABEL_CHECK(filelabel, MAGIC_VNODE);
110578007886SRobert Watson 	LABEL_CHECK(interpvplabel, MAGIC_VNODE);
11066827d029SRobert Watson 	LABEL_CHECK(execlabel, MAGIC_CRED);
1107269ad130SRobert Watson 	COUNTER_INC(execve_will_transition);
1108250ee706SRobert Watson 
1109d8a7b7a3SRobert Watson 	return (0);
1110d8a7b7a3SRobert Watson }
1111d8a7b7a3SRobert Watson 
1112269ad130SRobert Watson COUNTER_DECL(create_proc0);
1113d8a7b7a3SRobert Watson static void
1114d8a7b7a3SRobert Watson mac_test_create_proc0(struct ucred *cred)
1115d8a7b7a3SRobert Watson {
1116d8a7b7a3SRobert Watson 
11176827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1118269ad130SRobert Watson 	COUNTER_INC(create_proc0);
1119d8a7b7a3SRobert Watson }
1120d8a7b7a3SRobert Watson 
1121269ad130SRobert Watson COUNTER_DECL(create_proc1);
1122d8a7b7a3SRobert Watson static void
1123d8a7b7a3SRobert Watson mac_test_create_proc1(struct ucred *cred)
1124d8a7b7a3SRobert Watson {
1125d8a7b7a3SRobert Watson 
11266827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1127269ad130SRobert Watson 	COUNTER_INC(create_proc1);
1128d8a7b7a3SRobert Watson }
1129d8a7b7a3SRobert Watson 
1130269ad130SRobert Watson COUNTER_DECL(relabel_cred);
1131d8a7b7a3SRobert Watson static void
1132d8a7b7a3SRobert Watson mac_test_relabel_cred(struct ucred *cred, struct label *newlabel)
1133d8a7b7a3SRobert Watson {
1134d8a7b7a3SRobert Watson 
11356827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
11366827d029SRobert Watson 	LABEL_CHECK(newlabel, MAGIC_CRED);
1137269ad130SRobert Watson 	COUNTER_INC(relabel_cred);
1138d8a7b7a3SRobert Watson }
1139d8a7b7a3SRobert Watson 
1140269ad130SRobert Watson COUNTER_DECL(thread_userret);
1141ca26e8baSRobert Watson static void
1142ca26e8baSRobert Watson mac_test_thread_userret(struct thread *td)
1143ca26e8baSRobert Watson {
1144ca26e8baSRobert Watson 
1145269ad130SRobert Watson 	COUNTER_INC(thread_userret);
1146ca26e8baSRobert Watson }
1147ca26e8baSRobert Watson 
1148d8a7b7a3SRobert Watson /*
11497e400ed1SRobert Watson  * Label cleanup/flush operations
11507e400ed1SRobert Watson  */
1151269ad130SRobert Watson COUNTER_DECL(cleanup_sysv_msgmsg);
11527e400ed1SRobert Watson static void
11537e400ed1SRobert Watson mac_test_cleanup_sysv_msgmsg(struct label *msglabel)
11547e400ed1SRobert Watson {
11557e400ed1SRobert Watson 
1156269ad130SRobert Watson 	LABEL_CHECK(msglabel, MAGIC_SYSV_MSG);
1157269ad130SRobert Watson 	COUNTER_INC(cleanup_sysv_msgmsg);
11587e400ed1SRobert Watson }
11597e400ed1SRobert Watson 
1160269ad130SRobert Watson COUNTER_DECL(cleanup_sysv_msgqueue);
11617e400ed1SRobert Watson static void
11627e400ed1SRobert Watson mac_test_cleanup_sysv_msgqueue(struct label *msqlabel)
11637e400ed1SRobert Watson {
11647e400ed1SRobert Watson 
1165269ad130SRobert Watson 	LABEL_CHECK(msqlabel, MAGIC_SYSV_MSQ);
1166269ad130SRobert Watson 	COUNTER_INC(cleanup_sysv_msgqueue);
11677e400ed1SRobert Watson }
11687e400ed1SRobert Watson 
1169269ad130SRobert Watson COUNTER_DECL(cleanup_sysv_sem);
11707e400ed1SRobert Watson static void
11713831e7d7SRobert Watson mac_test_cleanup_sysv_sem(struct label *semalabel)
11727e400ed1SRobert Watson {
11737e400ed1SRobert Watson 
1174269ad130SRobert Watson 	LABEL_CHECK(semalabel, MAGIC_SYSV_SEM);
1175269ad130SRobert Watson 	COUNTER_INC(cleanup_sysv_sem);
11767e400ed1SRobert Watson }
11777e400ed1SRobert Watson 
1178269ad130SRobert Watson COUNTER_DECL(cleanup_sysv_shm);
11797e400ed1SRobert Watson static void
11807e400ed1SRobert Watson mac_test_cleanup_sysv_shm(struct label *shmlabel)
11817e400ed1SRobert Watson {
11827e400ed1SRobert Watson 
1183269ad130SRobert Watson 	LABEL_CHECK(shmlabel, MAGIC_SYSV_SHM);
1184269ad130SRobert Watson 	COUNTER_INC(cleanup_sysv_shm);
11857e400ed1SRobert Watson }
11867e400ed1SRobert Watson 
11877e400ed1SRobert Watson /*
1188d8a7b7a3SRobert Watson  * Access control checks.
1189d8a7b7a3SRobert Watson  */
1190269ad130SRobert Watson COUNTER_DECL(check_bpfdesc_receive);
1191d8a7b7a3SRobert Watson static int
1192d8a7b7a3SRobert Watson mac_test_check_bpfdesc_receive(struct bpf_d *bpf_d, struct label *bpflabel,
1193d8a7b7a3SRobert Watson     struct ifnet *ifnet, struct label *ifnetlabel)
1194d8a7b7a3SRobert Watson {
1195d8a7b7a3SRobert Watson 
11966827d029SRobert Watson 	LABEL_CHECK(bpflabel, MAGIC_BPF);
11976827d029SRobert Watson 	LABEL_CHECK(ifnetlabel, MAGIC_IFNET);
1198269ad130SRobert Watson 	COUNTER_INC(check_bpfdesc_receive);
1199250ee706SRobert Watson 
1200d8a7b7a3SRobert Watson 	return (0);
1201d8a7b7a3SRobert Watson }
1202d8a7b7a3SRobert Watson 
1203269ad130SRobert Watson COUNTER_DECL(check_cred_relabel);
1204d8a7b7a3SRobert Watson static int
1205d8a7b7a3SRobert Watson mac_test_check_cred_relabel(struct ucred *cred, struct label *newlabel)
1206d8a7b7a3SRobert Watson {
1207d8a7b7a3SRobert Watson 
12086827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
12096827d029SRobert Watson 	LABEL_CHECK(newlabel, MAGIC_CRED);
1210269ad130SRobert Watson 	COUNTER_INC(check_cred_relabel);
1211250ee706SRobert Watson 
1212d8a7b7a3SRobert Watson 	return (0);
1213d8a7b7a3SRobert Watson }
1214d8a7b7a3SRobert Watson 
1215269ad130SRobert Watson COUNTER_DECL(check_cred_visible);
1216d8a7b7a3SRobert Watson static int
1217d8a7b7a3SRobert Watson mac_test_check_cred_visible(struct ucred *u1, struct ucred *u2)
1218d8a7b7a3SRobert Watson {
1219d8a7b7a3SRobert Watson 
12206827d029SRobert Watson 	LABEL_CHECK(u1->cr_label, MAGIC_CRED);
12216827d029SRobert Watson 	LABEL_CHECK(u2->cr_label, MAGIC_CRED);
1222269ad130SRobert Watson 	COUNTER_INC(check_cred_visible);
1223250ee706SRobert Watson 
1224d8a7b7a3SRobert Watson 	return (0);
1225d8a7b7a3SRobert Watson }
1226d8a7b7a3SRobert Watson 
1227269ad130SRobert Watson COUNTER_DECL(check_ifnet_relabel);
1228d8a7b7a3SRobert Watson static int
1229d8a7b7a3SRobert Watson mac_test_check_ifnet_relabel(struct ucred *cred, struct ifnet *ifnet,
1230d8a7b7a3SRobert Watson     struct label *ifnetlabel, struct label *newlabel)
1231d8a7b7a3SRobert Watson {
1232d8a7b7a3SRobert Watson 
12336827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
12346827d029SRobert Watson 	LABEL_CHECK(ifnetlabel, MAGIC_IFNET);
12356827d029SRobert Watson 	LABEL_CHECK(newlabel, MAGIC_IFNET);
1236269ad130SRobert Watson 	COUNTER_INC(check_ifnet_relabel);
1237269ad130SRobert Watson 
1238d8a7b7a3SRobert Watson 	return (0);
1239d8a7b7a3SRobert Watson }
1240d8a7b7a3SRobert Watson 
1241269ad130SRobert Watson COUNTER_DECL(check_ifnet_transmit);
1242d8a7b7a3SRobert Watson static int
1243d8a7b7a3SRobert Watson mac_test_check_ifnet_transmit(struct ifnet *ifnet, struct label *ifnetlabel,
1244d8a7b7a3SRobert Watson     struct mbuf *m, struct label *mbuflabel)
1245d8a7b7a3SRobert Watson {
1246d8a7b7a3SRobert Watson 
12476827d029SRobert Watson 	LABEL_CHECK(ifnetlabel, MAGIC_IFNET);
12486827d029SRobert Watson 	LABEL_CHECK(mbuflabel, MAGIC_MBUF);
1249269ad130SRobert Watson 	COUNTER_INC(check_ifnet_transmit);
1250250ee706SRobert Watson 
1251d8a7b7a3SRobert Watson 	return (0);
1252d8a7b7a3SRobert Watson }
1253d8a7b7a3SRobert Watson 
1254269ad130SRobert Watson COUNTER_DECL(check_inpcb_deliver);
1255d8a7b7a3SRobert Watson static int
1256a557af22SRobert Watson mac_test_check_inpcb_deliver(struct inpcb *inp, struct label *inplabel,
1257a557af22SRobert Watson     struct mbuf *m, struct label *mlabel)
1258a557af22SRobert Watson {
1259a557af22SRobert Watson 
12606827d029SRobert Watson 	LABEL_CHECK(inplabel, MAGIC_INPCB);
12616827d029SRobert Watson 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1262269ad130SRobert Watson 	COUNTER_INC(check_inpcb_deliver);
1263a557af22SRobert Watson 
1264a557af22SRobert Watson 	return (0);
1265a557af22SRobert Watson }
1266a557af22SRobert Watson 
1267269ad130SRobert Watson COUNTER_DECL(check_sysv_msgmsq);
1268a557af22SRobert Watson static int
12697e400ed1SRobert Watson mac_test_check_sysv_msgmsq(struct ucred *cred, struct msg *msgptr,
12707e400ed1SRobert Watson     struct label *msglabel, struct msqid_kernel *msqkptr,
12717e400ed1SRobert Watson     struct label *msqklabel)
12727e400ed1SRobert Watson {
12737e400ed1SRobert Watson 
1274269ad130SRobert Watson 	LABEL_CHECK(msqklabel, MAGIC_SYSV_MSQ);
1275269ad130SRobert Watson 	LABEL_CHECK(msglabel, MAGIC_SYSV_MSG);
12766827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1277269ad130SRobert Watson 	COUNTER_INC(check_sysv_msgmsq);
12787e400ed1SRobert Watson 
12797e400ed1SRobert Watson   	return (0);
12807e400ed1SRobert Watson }
12817e400ed1SRobert Watson 
1282269ad130SRobert Watson COUNTER_DECL(check_sysv_msgrcv);
12837e400ed1SRobert Watson static int
12847e400ed1SRobert Watson mac_test_check_sysv_msgrcv(struct ucred *cred, struct msg *msgptr,
12857e400ed1SRobert Watson     struct label *msglabel)
12867e400ed1SRobert Watson {
12877e400ed1SRobert Watson 
1288269ad130SRobert Watson 	LABEL_CHECK(msglabel, MAGIC_SYSV_MSG);
12896827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1290269ad130SRobert Watson 	COUNTER_INC(check_sysv_msgrcv);
12917e400ed1SRobert Watson 
12927e400ed1SRobert Watson 	return (0);
12937e400ed1SRobert Watson }
12947e400ed1SRobert Watson 
1295269ad130SRobert Watson COUNTER_DECL(check_sysv_msgrmid);
12967e400ed1SRobert Watson static int
12977e400ed1SRobert Watson mac_test_check_sysv_msgrmid(struct ucred *cred, struct msg *msgptr,
12987e400ed1SRobert Watson     struct label *msglabel)
12997e400ed1SRobert Watson {
13007e400ed1SRobert Watson 
1301269ad130SRobert Watson 	LABEL_CHECK(msglabel, MAGIC_SYSV_MSG);
13026827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1303269ad130SRobert Watson 	COUNTER_INC(check_sysv_msgrmid);
13047e400ed1SRobert Watson 
13057e400ed1SRobert Watson 	return (0);
13067e400ed1SRobert Watson }
13077e400ed1SRobert Watson 
1308269ad130SRobert Watson COUNTER_DECL(check_sysv_msqget);
13097e400ed1SRobert Watson static int
13107e400ed1SRobert Watson mac_test_check_sysv_msqget(struct ucred *cred, struct msqid_kernel *msqkptr,
13117e400ed1SRobert Watson     struct label *msqklabel)
13127e400ed1SRobert Watson {
13137e400ed1SRobert Watson 
1314269ad130SRobert Watson 	LABEL_CHECK(msqklabel, MAGIC_SYSV_MSQ);
13156827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1316269ad130SRobert Watson 	COUNTER_INC(check_sysv_msqget);
13177e400ed1SRobert Watson 
13187e400ed1SRobert Watson 	return (0);
13197e400ed1SRobert Watson }
13207e400ed1SRobert Watson 
1321269ad130SRobert Watson COUNTER_DECL(check_sysv_msqsnd);
13227e400ed1SRobert Watson static int
13237e400ed1SRobert Watson mac_test_check_sysv_msqsnd(struct ucred *cred, struct msqid_kernel *msqkptr,
13247e400ed1SRobert Watson     struct label *msqklabel)
13257e400ed1SRobert Watson {
13267e400ed1SRobert Watson 
1327269ad130SRobert Watson 	LABEL_CHECK(msqklabel, MAGIC_SYSV_MSQ);
13286827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1329269ad130SRobert Watson 	COUNTER_INC(check_sysv_msqsnd);
13307e400ed1SRobert Watson 
13317e400ed1SRobert Watson 	return (0);
13327e400ed1SRobert Watson }
13337e400ed1SRobert Watson 
1334269ad130SRobert Watson COUNTER_DECL(check_sysv_msqrcv);
13357e400ed1SRobert Watson static int
13367e400ed1SRobert Watson mac_test_check_sysv_msqrcv(struct ucred *cred, struct msqid_kernel *msqkptr,
13377e400ed1SRobert Watson     struct label *msqklabel)
13387e400ed1SRobert Watson {
13397e400ed1SRobert Watson 
1340269ad130SRobert Watson 	LABEL_CHECK(msqklabel, MAGIC_SYSV_MSQ);
13416827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1342269ad130SRobert Watson 	COUNTER_INC(check_sysv_msqrcv);
13437e400ed1SRobert Watson 
13447e400ed1SRobert Watson 	return (0);
13457e400ed1SRobert Watson }
13467e400ed1SRobert Watson 
1347269ad130SRobert Watson COUNTER_DECL(check_sysv_msqctl);
13487e400ed1SRobert Watson static int
13497e400ed1SRobert Watson mac_test_check_sysv_msqctl(struct ucred *cred, struct msqid_kernel *msqkptr,
13507e400ed1SRobert Watson     struct label *msqklabel, int cmd)
13517e400ed1SRobert Watson {
13527e400ed1SRobert Watson 
1353269ad130SRobert Watson 	LABEL_CHECK(msqklabel, MAGIC_SYSV_MSQ);
13546827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1355269ad130SRobert Watson 	COUNTER_INC(check_sysv_msqctl);
13567e400ed1SRobert Watson 
13577e400ed1SRobert Watson 	return (0);
13587e400ed1SRobert Watson }
13597e400ed1SRobert Watson 
1360269ad130SRobert Watson COUNTER_DECL(check_sysv_semctl);
13617e400ed1SRobert Watson static int
13627e400ed1SRobert Watson mac_test_check_sysv_semctl(struct ucred *cred, struct semid_kernel *semakptr,
13637e400ed1SRobert Watson     struct label *semaklabel, int cmd)
13647e400ed1SRobert Watson {
13657e400ed1SRobert Watson 
13666827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1367269ad130SRobert Watson 	LABEL_CHECK(semaklabel, MAGIC_SYSV_SEM);
1368269ad130SRobert Watson 	COUNTER_INC(check_sysv_semctl);
13697e400ed1SRobert Watson 
13707e400ed1SRobert Watson   	return (0);
13717e400ed1SRobert Watson }
13727e400ed1SRobert Watson 
1373269ad130SRobert Watson COUNTER_DECL(check_sysv_semget);
13747e400ed1SRobert Watson static int
13757e400ed1SRobert Watson mac_test_check_sysv_semget(struct ucred *cred, struct semid_kernel *semakptr,
13767e400ed1SRobert Watson     struct label *semaklabel)
13777e400ed1SRobert Watson {
13787e400ed1SRobert Watson 
13796827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1380269ad130SRobert Watson 	LABEL_CHECK(semaklabel, MAGIC_SYSV_SEM);
1381269ad130SRobert Watson 	COUNTER_INC(check_sysv_semget);
13827e400ed1SRobert Watson 
13837e400ed1SRobert Watson 	return (0);
13847e400ed1SRobert Watson }
13857e400ed1SRobert Watson 
1386269ad130SRobert Watson COUNTER_DECL(check_sysv_semop);
13877e400ed1SRobert Watson static int
13887e400ed1SRobert Watson mac_test_check_sysv_semop(struct ucred *cred, struct semid_kernel *semakptr,
13897e400ed1SRobert Watson     struct label *semaklabel, size_t accesstype)
13907e400ed1SRobert Watson {
13917e400ed1SRobert Watson 
13926827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1393269ad130SRobert Watson 	LABEL_CHECK(semaklabel, MAGIC_SYSV_SEM);
1394269ad130SRobert Watson 	COUNTER_INC(check_sysv_semop);
13957e400ed1SRobert Watson 
13967e400ed1SRobert Watson 	return (0);
13977e400ed1SRobert Watson }
13987e400ed1SRobert Watson 
1399269ad130SRobert Watson COUNTER_DECL(check_sysv_shmat);
14007e400ed1SRobert Watson static int
14017e400ed1SRobert Watson mac_test_check_sysv_shmat(struct ucred *cred, struct shmid_kernel *shmsegptr,
14027e400ed1SRobert Watson     struct label *shmseglabel, int shmflg)
14037e400ed1SRobert Watson {
14047e400ed1SRobert Watson 
14056827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1406269ad130SRobert Watson 	LABEL_CHECK(shmseglabel, MAGIC_SYSV_SHM);
1407269ad130SRobert Watson 	COUNTER_INC(check_sysv_shmat);
14087e400ed1SRobert Watson 
14097e400ed1SRobert Watson   	return (0);
14107e400ed1SRobert Watson }
14117e400ed1SRobert Watson 
1412269ad130SRobert Watson COUNTER_DECL(check_sysv_shmctl);
14137e400ed1SRobert Watson static int
14147e400ed1SRobert Watson mac_test_check_sysv_shmctl(struct ucred *cred, struct shmid_kernel *shmsegptr,
14157e400ed1SRobert Watson     struct label *shmseglabel, int cmd)
14167e400ed1SRobert Watson {
14177e400ed1SRobert Watson 
14186827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1419269ad130SRobert Watson 	LABEL_CHECK(shmseglabel, MAGIC_SYSV_SHM);
1420269ad130SRobert Watson 	COUNTER_INC(check_sysv_shmctl);
14217e400ed1SRobert Watson 
14227e400ed1SRobert Watson   	return (0);
14237e400ed1SRobert Watson }
14247e400ed1SRobert Watson 
1425269ad130SRobert Watson COUNTER_DECL(check_sysv_shmdt);
14267e400ed1SRobert Watson static int
14277e400ed1SRobert Watson mac_test_check_sysv_shmdt(struct ucred *cred, struct shmid_kernel *shmsegptr,
14287e400ed1SRobert Watson     struct label *shmseglabel)
14297e400ed1SRobert Watson {
14307e400ed1SRobert Watson 
14316827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1432269ad130SRobert Watson 	LABEL_CHECK(shmseglabel, MAGIC_SYSV_SHM);
1433269ad130SRobert Watson 	COUNTER_INC(check_sysv_shmdt);
14347e400ed1SRobert Watson 
14357e400ed1SRobert Watson 	return (0);
14367e400ed1SRobert Watson }
14377e400ed1SRobert Watson 
1438269ad130SRobert Watson COUNTER_DECL(check_sysv_shmget);
14397e400ed1SRobert Watson static int
14407e400ed1SRobert Watson mac_test_check_sysv_shmget(struct ucred *cred, struct shmid_kernel *shmsegptr,
14417e400ed1SRobert Watson     struct label *shmseglabel, int shmflg)
14427e400ed1SRobert Watson {
14437e400ed1SRobert Watson 
14446827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1445269ad130SRobert Watson 	LABEL_CHECK(shmseglabel, MAGIC_SYSV_SHM);
1446269ad130SRobert Watson 	COUNTER_INC(check_sysv_shmget);
14477e400ed1SRobert Watson 
14487e400ed1SRobert Watson 	return (0);
14497e400ed1SRobert Watson }
14507e400ed1SRobert Watson 
1451269ad130SRobert Watson COUNTER_DECL(check_kenv_dump);
14527e400ed1SRobert Watson static int
1453ca26e8baSRobert Watson mac_test_check_kenv_dump(struct ucred *cred)
1454ca26e8baSRobert Watson {
1455ca26e8baSRobert Watson 
14566827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1457269ad130SRobert Watson 	COUNTER_INC(check_kenv_dump);
1458250ee706SRobert Watson 
1459ca26e8baSRobert Watson 	return (0);
1460ca26e8baSRobert Watson }
1461ca26e8baSRobert Watson 
1462269ad130SRobert Watson COUNTER_DECL(check_kenv_get);
1463ca26e8baSRobert Watson static int
1464ca26e8baSRobert Watson mac_test_check_kenv_get(struct ucred *cred, char *name)
1465ca26e8baSRobert Watson {
1466ca26e8baSRobert Watson 
14676827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1468269ad130SRobert Watson 	COUNTER_INC(check_kenv_get);
1469250ee706SRobert Watson 
1470ca26e8baSRobert Watson 	return (0);
1471ca26e8baSRobert Watson }
1472ca26e8baSRobert Watson 
1473269ad130SRobert Watson COUNTER_DECL(check_kenv_set);
1474ca26e8baSRobert Watson static int
1475ca26e8baSRobert Watson mac_test_check_kenv_set(struct ucred *cred, char *name, char *value)
1476ca26e8baSRobert Watson {
1477ca26e8baSRobert Watson 
14786827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1479269ad130SRobert Watson 	COUNTER_INC(check_kenv_set);
1480250ee706SRobert Watson 
1481ca26e8baSRobert Watson 	return (0);
1482ca26e8baSRobert Watson }
1483ca26e8baSRobert Watson 
1484269ad130SRobert Watson COUNTER_DECL(check_kenv_unset);
1485ca26e8baSRobert Watson static int
1486ca26e8baSRobert Watson mac_test_check_kenv_unset(struct ucred *cred, char *name)
1487ca26e8baSRobert Watson {
1488ca26e8baSRobert Watson 
14896827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1490269ad130SRobert Watson 	COUNTER_INC(check_kenv_unset);
1491250ee706SRobert Watson 
1492ca26e8baSRobert Watson 	return (0);
1493ca26e8baSRobert Watson }
1494ca26e8baSRobert Watson 
1495269ad130SRobert Watson COUNTER_DECL(check_kld_load);
1496ca26e8baSRobert Watson static int
1497ca26e8baSRobert Watson mac_test_check_kld_load(struct ucred *cred, struct vnode *vp,
1498ca26e8baSRobert Watson     struct label *label)
1499ca26e8baSRobert Watson {
1500ca26e8baSRobert Watson 
15016827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
15026827d029SRobert Watson 	LABEL_CHECK(label, MAGIC_VNODE);
1503269ad130SRobert Watson 	COUNTER_INC(check_kld_load);
1504250ee706SRobert Watson 
1505ca26e8baSRobert Watson 	return (0);
1506ca26e8baSRobert Watson }
1507ca26e8baSRobert Watson 
1508269ad130SRobert Watson COUNTER_DECL(check_kld_stat);
1509ca26e8baSRobert Watson static int
1510ca26e8baSRobert Watson mac_test_check_kld_stat(struct ucred *cred)
1511ca26e8baSRobert Watson {
1512ca26e8baSRobert Watson 
15136827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1514269ad130SRobert Watson 	COUNTER_INC(check_kld_stat);
1515250ee706SRobert Watson 
1516ca26e8baSRobert Watson 	return (0);
1517ca26e8baSRobert Watson }
1518ca26e8baSRobert Watson 
1519269ad130SRobert Watson COUNTER_DECL(check_mount_stat);
1520ca26e8baSRobert Watson static int
1521d8a7b7a3SRobert Watson mac_test_check_mount_stat(struct ucred *cred, struct mount *mp,
152278007886SRobert Watson     struct label *mplabel)
1523d8a7b7a3SRobert Watson {
1524d8a7b7a3SRobert Watson 
15256827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
152678007886SRobert Watson 	LABEL_CHECK(mplabel, MAGIC_MOUNT);
1527269ad130SRobert Watson 	COUNTER_INC(check_mount_stat);
1528250ee706SRobert Watson 
1529d8a7b7a3SRobert Watson 	return (0);
1530d8a7b7a3SRobert Watson }
1531d8a7b7a3SRobert Watson 
1532269ad130SRobert Watson COUNTER_DECL(check_pipe_ioctl);
1533d8a7b7a3SRobert Watson static int
15344795b82cSRobert Watson mac_test_check_pipe_ioctl(struct ucred *cred, struct pipepair *pp,
1535d8a7b7a3SRobert Watson     struct label *pipelabel, unsigned long cmd, void /* caddr_t */ *data)
1536d8a7b7a3SRobert Watson {
1537d8a7b7a3SRobert Watson 
15386827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
15396827d029SRobert Watson 	LABEL_CHECK(pipelabel, MAGIC_PIPE);
1540269ad130SRobert Watson 	COUNTER_INC(check_pipe_ioctl);
1541250ee706SRobert Watson 
1542d8a7b7a3SRobert Watson 	return (0);
1543d8a7b7a3SRobert Watson }
1544d8a7b7a3SRobert Watson 
1545269ad130SRobert Watson COUNTER_DECL(check_pipe_poll);
1546d8a7b7a3SRobert Watson static int
15474795b82cSRobert Watson mac_test_check_pipe_poll(struct ucred *cred, struct pipepair *pp,
1548c024c3eeSRobert Watson     struct label *pipelabel)
1549c024c3eeSRobert Watson {
1550c024c3eeSRobert Watson 
15516827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
15526827d029SRobert Watson 	LABEL_CHECK(pipelabel, MAGIC_PIPE);
1553269ad130SRobert Watson 	COUNTER_INC(check_pipe_poll);
1554250ee706SRobert Watson 
1555c024c3eeSRobert Watson 	return (0);
1556c024c3eeSRobert Watson }
1557c024c3eeSRobert Watson 
1558269ad130SRobert Watson COUNTER_DECL(check_pipe_read);
1559c024c3eeSRobert Watson static int
15604795b82cSRobert Watson mac_test_check_pipe_read(struct ucred *cred, struct pipepair *pp,
1561c024c3eeSRobert Watson     struct label *pipelabel)
1562d8a7b7a3SRobert Watson {
1563d8a7b7a3SRobert Watson 
15646827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
15656827d029SRobert Watson 	LABEL_CHECK(pipelabel, MAGIC_PIPE);
1566269ad130SRobert Watson 	COUNTER_INC(check_pipe_read);
1567250ee706SRobert Watson 
1568d8a7b7a3SRobert Watson 	return (0);
1569d8a7b7a3SRobert Watson }
1570d8a7b7a3SRobert Watson 
1571269ad130SRobert Watson COUNTER_DECL(check_pipe_relabel);
1572d8a7b7a3SRobert Watson static int
15734795b82cSRobert Watson mac_test_check_pipe_relabel(struct ucred *cred, struct pipepair *pp,
1574d8a7b7a3SRobert Watson     struct label *pipelabel, struct label *newlabel)
1575d8a7b7a3SRobert Watson {
1576d8a7b7a3SRobert Watson 
15776827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
15786827d029SRobert Watson 	LABEL_CHECK(pipelabel, MAGIC_PIPE);
15796827d029SRobert Watson 	LABEL_CHECK(newlabel, MAGIC_PIPE);
1580269ad130SRobert Watson 	COUNTER_INC(check_pipe_relabel);
1581250ee706SRobert Watson 
1582d8a7b7a3SRobert Watson 	return (0);
1583d8a7b7a3SRobert Watson }
1584d8a7b7a3SRobert Watson 
1585269ad130SRobert Watson COUNTER_DECL(check_pipe_stat);
1586d8a7b7a3SRobert Watson static int
15874795b82cSRobert Watson mac_test_check_pipe_stat(struct ucred *cred, struct pipepair *pp,
1588c024c3eeSRobert Watson     struct label *pipelabel)
1589c024c3eeSRobert Watson {
1590c024c3eeSRobert Watson 
15916827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
15926827d029SRobert Watson 	LABEL_CHECK(pipelabel, MAGIC_PIPE);
1593269ad130SRobert Watson 	COUNTER_INC(check_pipe_stat);
1594250ee706SRobert Watson 
1595c024c3eeSRobert Watson 	return (0);
1596c024c3eeSRobert Watson }
1597c024c3eeSRobert Watson 
1598269ad130SRobert Watson COUNTER_DECL(check_pipe_write);
1599c024c3eeSRobert Watson static int
16004795b82cSRobert Watson mac_test_check_pipe_write(struct ucred *cred, struct pipepair *pp,
1601c024c3eeSRobert Watson     struct label *pipelabel)
1602c024c3eeSRobert Watson {
1603c024c3eeSRobert Watson 
16046827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
16056827d029SRobert Watson 	LABEL_CHECK(pipelabel, MAGIC_PIPE);
1606269ad130SRobert Watson 	COUNTER_INC(check_pipe_write);
1607250ee706SRobert Watson 
1608c024c3eeSRobert Watson 	return (0);
1609c024c3eeSRobert Watson }
1610c024c3eeSRobert Watson 
1611269ad130SRobert Watson COUNTER_DECL(check_posix_sem);
1612c024c3eeSRobert Watson static int
1613fe09513eSRobert Watson mac_test_check_posix_sem(struct ucred *cred, struct ksem *ks,
1614fe09513eSRobert Watson     struct label *kslabel)
161552648411SRobert Watson {
161652648411SRobert Watson 
16176827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1618fe09513eSRobert Watson 	LABEL_CHECK(kslabel, MAGIC_POSIX_SEM);
1619269ad130SRobert Watson 	COUNTER_INC(check_posix_sem);
162052648411SRobert Watson 
162152648411SRobert Watson 	return (0);
162252648411SRobert Watson }
162352648411SRobert Watson 
1624269ad130SRobert Watson COUNTER_DECL(check_proc_debug);
162552648411SRobert Watson static int
162678007886SRobert Watson mac_test_check_proc_debug(struct ucred *cred, struct proc *p)
1627d8a7b7a3SRobert Watson {
1628d8a7b7a3SRobert Watson 
16296827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
163078007886SRobert Watson 	LABEL_CHECK(p->p_ucred->cr_label, MAGIC_CRED);
1631269ad130SRobert Watson 	COUNTER_INC(check_proc_debug);
1632250ee706SRobert Watson 
1633d8a7b7a3SRobert Watson 	return (0);
1634d8a7b7a3SRobert Watson }
1635d8a7b7a3SRobert Watson 
1636269ad130SRobert Watson COUNTER_DECL(check_proc_sched);
1637d8a7b7a3SRobert Watson static int
163878007886SRobert Watson mac_test_check_proc_sched(struct ucred *cred, struct proc *p)
1639d8a7b7a3SRobert Watson {
1640d8a7b7a3SRobert Watson 
16416827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
164278007886SRobert Watson 	LABEL_CHECK(p->p_ucred->cr_label, MAGIC_CRED);
1643269ad130SRobert Watson 	COUNTER_INC(check_proc_sched);
1644250ee706SRobert Watson 
1645d8a7b7a3SRobert Watson 	return (0);
1646d8a7b7a3SRobert Watson }
1647d8a7b7a3SRobert Watson 
1648269ad130SRobert Watson COUNTER_DECL(check_proc_signal);
1649d8a7b7a3SRobert Watson static int
165078007886SRobert Watson mac_test_check_proc_signal(struct ucred *cred, struct proc *p, int signum)
1651d8a7b7a3SRobert Watson {
1652d8a7b7a3SRobert Watson 
16536827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
165478007886SRobert Watson 	LABEL_CHECK(p->p_ucred->cr_label, MAGIC_CRED);
1655269ad130SRobert Watson 	COUNTER_INC(check_proc_signal);
1656250ee706SRobert Watson 
1657d8a7b7a3SRobert Watson 	return (0);
1658d8a7b7a3SRobert Watson }
1659d8a7b7a3SRobert Watson 
1660269ad130SRobert Watson COUNTER_DECL(check_proc_setaudit);
1661d8a7b7a3SRobert Watson static int
166218717f69SRobert Watson mac_test_check_proc_setaudit(struct ucred *cred, struct auditinfo *ai)
166318717f69SRobert Watson {
166418717f69SRobert Watson 
16656827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1666269ad130SRobert Watson 	COUNTER_INC(check_proc_setaudit);
166718717f69SRobert Watson 
166818717f69SRobert Watson 	return (0);
166918717f69SRobert Watson }
167018717f69SRobert Watson 
1671f1e8bf6dSRobert Watson COUNTER_DECL(check_proc_setaudit_addr);
1672f1e8bf6dSRobert Watson static int
1673f1e8bf6dSRobert Watson mac_test_check_proc_setaudit_addr(struct ucred *cred,
1674f1e8bf6dSRobert Watson     struct auditinfo_addr *aia)
1675f1e8bf6dSRobert Watson {
1676f1e8bf6dSRobert Watson 
1677f1e8bf6dSRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1678f1e8bf6dSRobert Watson 	COUNTER_INC(check_proc_setaudit_addr);
1679f1e8bf6dSRobert Watson 
1680f1e8bf6dSRobert Watson 	return (0);
1681f1e8bf6dSRobert Watson }
1682f1e8bf6dSRobert Watson 
1683269ad130SRobert Watson COUNTER_DECL(check_proc_setauid);
168418717f69SRobert Watson static int
168518717f69SRobert Watson mac_test_check_proc_setauid(struct ucred *cred, uid_t auid)
168618717f69SRobert Watson {
168718717f69SRobert Watson 
16886827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1689269ad130SRobert Watson 	COUNTER_INC(check_proc_setauid);
169018717f69SRobert Watson 
169118717f69SRobert Watson 	return (0);
169218717f69SRobert Watson }
169318717f69SRobert Watson 
1694269ad130SRobert Watson COUNTER_DECL(check_proc_setuid);
169518717f69SRobert Watson static int
1696030a28b3SRobert Watson mac_test_check_proc_setuid(struct ucred *cred, uid_t uid)
1697030a28b3SRobert Watson {
1698030a28b3SRobert Watson 
16996827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1700269ad130SRobert Watson 	COUNTER_INC(check_proc_setuid);
1701030a28b3SRobert Watson 
1702030a28b3SRobert Watson 	return (0);
1703030a28b3SRobert Watson }
1704030a28b3SRobert Watson 
1705269ad130SRobert Watson COUNTER_DECL(check_proc_euid);
1706030a28b3SRobert Watson static int
1707030a28b3SRobert Watson mac_test_check_proc_seteuid(struct ucred *cred, uid_t euid)
1708030a28b3SRobert Watson {
1709030a28b3SRobert Watson 
17106827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1711269ad130SRobert Watson 	COUNTER_INC(check_proc_euid);
1712030a28b3SRobert Watson 
1713030a28b3SRobert Watson 	return (0);
1714030a28b3SRobert Watson }
1715030a28b3SRobert Watson 
1716269ad130SRobert Watson COUNTER_DECL(check_proc_setgid);
1717030a28b3SRobert Watson static int
1718030a28b3SRobert Watson mac_test_check_proc_setgid(struct ucred *cred, gid_t gid)
1719030a28b3SRobert Watson {
1720030a28b3SRobert Watson 
17216827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1722269ad130SRobert Watson 	COUNTER_INC(check_proc_setgid);
1723030a28b3SRobert Watson 
1724030a28b3SRobert Watson 	return (0);
1725030a28b3SRobert Watson }
1726030a28b3SRobert Watson 
1727269ad130SRobert Watson COUNTER_DECL(check_proc_setegid);
1728030a28b3SRobert Watson static int
1729030a28b3SRobert Watson mac_test_check_proc_setegid(struct ucred *cred, gid_t egid)
1730030a28b3SRobert Watson {
1731030a28b3SRobert Watson 
17326827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1733269ad130SRobert Watson 	COUNTER_INC(check_proc_setegid);
1734030a28b3SRobert Watson 
1735030a28b3SRobert Watson 	return (0);
1736030a28b3SRobert Watson }
1737030a28b3SRobert Watson 
1738269ad130SRobert Watson COUNTER_DECL(check_proc_setgroups);
1739030a28b3SRobert Watson static int
1740030a28b3SRobert Watson mac_test_check_proc_setgroups(struct ucred *cred, int ngroups,
1741030a28b3SRobert Watson 	gid_t *gidset)
1742030a28b3SRobert Watson {
1743030a28b3SRobert Watson 
17446827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1745269ad130SRobert Watson 	COUNTER_INC(check_proc_setgroups);
1746030a28b3SRobert Watson 
1747030a28b3SRobert Watson 	return (0);
1748030a28b3SRobert Watson }
1749030a28b3SRobert Watson 
1750269ad130SRobert Watson COUNTER_DECL(check_proc_setreuid);
1751030a28b3SRobert Watson static int
1752030a28b3SRobert Watson mac_test_check_proc_setreuid(struct ucred *cred, uid_t ruid, uid_t euid)
1753030a28b3SRobert Watson {
1754030a28b3SRobert Watson 
17556827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1756269ad130SRobert Watson 	COUNTER_INC(check_proc_setreuid);
1757030a28b3SRobert Watson 
1758030a28b3SRobert Watson 	return (0);
1759030a28b3SRobert Watson }
1760030a28b3SRobert Watson 
1761269ad130SRobert Watson COUNTER_DECL(check_proc_setregid);
1762030a28b3SRobert Watson static int
1763030a28b3SRobert Watson mac_test_check_proc_setregid(struct ucred *cred, gid_t rgid, gid_t egid)
1764030a28b3SRobert Watson {
1765030a28b3SRobert Watson 
17666827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1767269ad130SRobert Watson 	COUNTER_INC(check_proc_setregid);
1768030a28b3SRobert Watson 
1769030a28b3SRobert Watson 	return (0);
1770030a28b3SRobert Watson }
1771030a28b3SRobert Watson 
1772269ad130SRobert Watson COUNTER_DECL(check_proc_setresuid);
1773030a28b3SRobert Watson static int
1774030a28b3SRobert Watson mac_test_check_proc_setresuid(struct ucred *cred, uid_t ruid, uid_t euid,
1775030a28b3SRobert Watson 	uid_t suid)
1776030a28b3SRobert Watson {
1777030a28b3SRobert Watson 
17786827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1779269ad130SRobert Watson 	COUNTER_INC(check_proc_setresuid);
1780030a28b3SRobert Watson 
1781030a28b3SRobert Watson 	return (0);
1782030a28b3SRobert Watson }
1783030a28b3SRobert Watson 
1784269ad130SRobert Watson COUNTER_DECL(check_proc_setresgid);
1785030a28b3SRobert Watson static int
1786030a28b3SRobert Watson mac_test_check_proc_setresgid(struct ucred *cred, gid_t rgid, gid_t egid,
1787030a28b3SRobert Watson 	gid_t sgid)
1788030a28b3SRobert Watson {
1789030a28b3SRobert Watson 
17906827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1791269ad130SRobert Watson 	COUNTER_INC(check_proc_setresgid);
1792030a28b3SRobert Watson 
1793030a28b3SRobert Watson 	return (0);
1794030a28b3SRobert Watson }
1795030a28b3SRobert Watson 
1796269ad130SRobert Watson COUNTER_DECL(check_proc_wait);
1797030a28b3SRobert Watson static int
179878007886SRobert Watson mac_test_check_proc_wait(struct ucred *cred, struct proc *p)
1799babe9a2bSRobert Watson {
1800babe9a2bSRobert Watson 
18016827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
180278007886SRobert Watson 	LABEL_CHECK(p->p_ucred->cr_label, MAGIC_CRED);
1803269ad130SRobert Watson 	COUNTER_INC(check_proc_wait);
1804babe9a2bSRobert Watson 
1805babe9a2bSRobert Watson 	return (0);
1806babe9a2bSRobert Watson }
1807babe9a2bSRobert Watson 
1808269ad130SRobert Watson COUNTER_DECL(check_socket_accept);
1809babe9a2bSRobert Watson static int
181078007886SRobert Watson mac_test_check_socket_accept(struct ucred *cred, struct socket *so,
181178007886SRobert Watson     struct label *solabel)
18127f53207bSRobert Watson {
18137f53207bSRobert Watson 
18146827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
181578007886SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1816269ad130SRobert Watson 	COUNTER_INC(check_socket_accept);
18177f53207bSRobert Watson 
18187f53207bSRobert Watson 	return (0);
18197f53207bSRobert Watson }
18207f53207bSRobert Watson 
1821269ad130SRobert Watson COUNTER_DECL(check_socket_bind);
18227f53207bSRobert Watson static int
182378007886SRobert Watson mac_test_check_socket_bind(struct ucred *cred, struct socket *so,
182478007886SRobert Watson     struct label *solabel, struct sockaddr *sa)
1825d8a7b7a3SRobert Watson {
1826d8a7b7a3SRobert Watson 
18276827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
182878007886SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1829269ad130SRobert Watson 	COUNTER_INC(check_socket_bind);
1830250ee706SRobert Watson 
1831d8a7b7a3SRobert Watson 	return (0);
1832d8a7b7a3SRobert Watson }
1833d8a7b7a3SRobert Watson 
1834269ad130SRobert Watson COUNTER_DECL(check_socket_connect);
1835d8a7b7a3SRobert Watson static int
183678007886SRobert Watson mac_test_check_socket_connect(struct ucred *cred, struct socket *so,
183778007886SRobert Watson     struct label *solabel, struct sockaddr *sa)
1838d8a7b7a3SRobert Watson {
1839d8a7b7a3SRobert Watson 
18406827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
184178007886SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1842269ad130SRobert Watson 	COUNTER_INC(check_socket_connect);
1843250ee706SRobert Watson 
1844d8a7b7a3SRobert Watson 	return (0);
1845d8a7b7a3SRobert Watson }
1846d8a7b7a3SRobert Watson 
1847269ad130SRobert Watson COUNTER_DECL(check_socket_deliver);
1848d8a7b7a3SRobert Watson static int
184978007886SRobert Watson mac_test_check_socket_deliver(struct socket *so, struct label *solabel,
185078007886SRobert Watson     struct mbuf *m, struct label *mlabel)
1851d8a7b7a3SRobert Watson {
1852d8a7b7a3SRobert Watson 
185378007886SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
185478007886SRobert Watson 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1855269ad130SRobert Watson 	COUNTER_INC(check_socket_deliver);
1856250ee706SRobert Watson 
1857d8a7b7a3SRobert Watson 	return (0);
1858d8a7b7a3SRobert Watson }
1859d8a7b7a3SRobert Watson 
1860269ad130SRobert Watson COUNTER_DECL(check_socket_listen);
1861d8a7b7a3SRobert Watson static int
186278007886SRobert Watson mac_test_check_socket_listen(struct ucred *cred, struct socket *so,
186378007886SRobert Watson     struct label *solabel)
1864d8a7b7a3SRobert Watson {
1865d8a7b7a3SRobert Watson 
18666827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
186778007886SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1868269ad130SRobert Watson 	COUNTER_INC(check_socket_listen);
1869250ee706SRobert Watson 
1870d8a7b7a3SRobert Watson 	return (0);
1871d8a7b7a3SRobert Watson }
1872d8a7b7a3SRobert Watson 
1873269ad130SRobert Watson COUNTER_DECL(check_socket_poll);
1874d8a7b7a3SRobert Watson static int
187578007886SRobert Watson mac_test_check_socket_poll(struct ucred *cred, struct socket *so,
187678007886SRobert Watson     struct label *solabel)
18777f53207bSRobert Watson {
18787f53207bSRobert Watson 
18796827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
188078007886SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1881269ad130SRobert Watson 	COUNTER_INC(check_socket_poll);
18827f53207bSRobert Watson 
18837f53207bSRobert Watson 	return (0);
18847f53207bSRobert Watson }
18857f53207bSRobert Watson 
1886269ad130SRobert Watson COUNTER_DECL(check_socket_receive);
18877f53207bSRobert Watson static int
188878007886SRobert Watson mac_test_check_socket_receive(struct ucred *cred, struct socket *so,
188978007886SRobert Watson     struct label *solabel)
1890d8a7b7a3SRobert Watson {
1891d8a7b7a3SRobert Watson 
18926827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
189378007886SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1894269ad130SRobert Watson 	COUNTER_INC(check_socket_receive);
1895250ee706SRobert Watson 
1896d8a7b7a3SRobert Watson 	return (0);
1897d8a7b7a3SRobert Watson }
1898d8a7b7a3SRobert Watson 
1899269ad130SRobert Watson COUNTER_DECL(check_socket_relabel);
1900d8a7b7a3SRobert Watson static int
190178007886SRobert Watson mac_test_check_socket_relabel(struct ucred *cred, struct socket *so,
190278007886SRobert Watson     struct label *solabel, struct label *newlabel)
1903d8a7b7a3SRobert Watson {
1904d8a7b7a3SRobert Watson 
19056827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
190678007886SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
19076827d029SRobert Watson 	LABEL_CHECK(newlabel, MAGIC_SOCKET);
1908269ad130SRobert Watson 	COUNTER_INC(check_socket_relabel);
1909250ee706SRobert Watson 
1910d8a7b7a3SRobert Watson 	return (0);
1911d8a7b7a3SRobert Watson }
1912d8a7b7a3SRobert Watson 
1913269ad130SRobert Watson COUNTER_DECL(check_socket_send);
1914d8a7b7a3SRobert Watson static int
191578007886SRobert Watson mac_test_check_socket_send(struct ucred *cred, struct socket *so,
191678007886SRobert Watson     struct label *solabel)
19177f53207bSRobert Watson {
19187f53207bSRobert Watson 
19196827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
192078007886SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1921269ad130SRobert Watson 	COUNTER_INC(check_socket_send);
19227f53207bSRobert Watson 
19237f53207bSRobert Watson 	return (0);
19247f53207bSRobert Watson }
19257f53207bSRobert Watson 
1926269ad130SRobert Watson COUNTER_DECL(check_socket_stat);
19277f53207bSRobert Watson static int
192878007886SRobert Watson mac_test_check_socket_stat(struct ucred *cred, struct socket *so,
192978007886SRobert Watson     struct label *solabel)
19307f53207bSRobert Watson {
19317f53207bSRobert Watson 
19326827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
193378007886SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1934269ad130SRobert Watson 	COUNTER_INC(check_socket_stat);
19357f53207bSRobert Watson 
19367f53207bSRobert Watson 	return (0);
19377f53207bSRobert Watson }
19387f53207bSRobert Watson 
1939269ad130SRobert Watson COUNTER_DECL(check_socket_visible);
19407f53207bSRobert Watson static int
194178007886SRobert Watson mac_test_check_socket_visible(struct ucred *cred, struct socket *so,
194278007886SRobert Watson     struct label *solabel)
19437f53207bSRobert Watson {
19447f53207bSRobert Watson 
19456827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
194678007886SRobert Watson 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1947269ad130SRobert Watson 	COUNTER_INC(check_socket_visible);
19487f53207bSRobert Watson 
19497f53207bSRobert Watson 	return (0);
19507f53207bSRobert Watson }
19517f53207bSRobert Watson 
1952269ad130SRobert Watson COUNTER_DECL(check_system_acct);
1953ca26e8baSRobert Watson static int
1954ca26e8baSRobert Watson mac_test_check_system_acct(struct ucred *cred, struct vnode *vp,
195578007886SRobert Watson     struct label *vplabel)
1956ca26e8baSRobert Watson {
1957ca26e8baSRobert Watson 
19586827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
195978007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
1960269ad130SRobert Watson 	COUNTER_INC(check_system_acct);
196118717f69SRobert Watson 
196218717f69SRobert Watson 	return (0);
196318717f69SRobert Watson }
196418717f69SRobert Watson 
1965269ad130SRobert Watson COUNTER_DECL(check_system_audit);
196618717f69SRobert Watson static int
196718717f69SRobert Watson mac_test_check_system_audit(struct ucred *cred, void *record, int length)
196818717f69SRobert Watson {
196918717f69SRobert Watson 
19706827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1971269ad130SRobert Watson 	COUNTER_INC(check_system_audit);
197218717f69SRobert Watson 
197318717f69SRobert Watson 	return (0);
197418717f69SRobert Watson }
197518717f69SRobert Watson 
1976269ad130SRobert Watson COUNTER_DECL(check_system_auditctl);
197718717f69SRobert Watson static int
197818717f69SRobert Watson mac_test_check_system_auditctl(struct ucred *cred, struct vnode *vp,
197978007886SRobert Watson     struct label *vplabel)
198018717f69SRobert Watson {
198118717f69SRobert Watson 
19826827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
198378007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
1984269ad130SRobert Watson 	COUNTER_INC(check_system_auditctl);
198518717f69SRobert Watson 
198618717f69SRobert Watson 	return (0);
198718717f69SRobert Watson }
198818717f69SRobert Watson 
1989269ad130SRobert Watson COUNTER_DECL(check_system_auditon);
199018717f69SRobert Watson static int
199118717f69SRobert Watson mac_test_check_system_auditon(struct ucred *cred, int cmd)
199218717f69SRobert Watson {
199318717f69SRobert Watson 
19946827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1995269ad130SRobert Watson 	COUNTER_INC(check_system_auditon);
1996250ee706SRobert Watson 
1997ca26e8baSRobert Watson 	return (0);
1998ca26e8baSRobert Watson }
1999ca26e8baSRobert Watson 
2000269ad130SRobert Watson COUNTER_DECL(check_system_reboot);
2001ca26e8baSRobert Watson static int
2002ca26e8baSRobert Watson mac_test_check_system_reboot(struct ucred *cred, int how)
2003ca26e8baSRobert Watson {
2004ca26e8baSRobert Watson 
20056827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2006269ad130SRobert Watson 	COUNTER_INC(check_system_reboot);
2007250ee706SRobert Watson 
2008ca26e8baSRobert Watson 	return (0);
2009ca26e8baSRobert Watson }
2010ca26e8baSRobert Watson 
2011269ad130SRobert Watson COUNTER_DECL(check_system_swapoff);
2012ca26e8baSRobert Watson static int
201318717f69SRobert Watson mac_test_check_system_swapoff(struct ucred *cred, struct vnode *vp,
201478007886SRobert Watson     struct label *vplabel)
2015ca26e8baSRobert Watson {
2016ca26e8baSRobert Watson 
20176827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
201878007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2019269ad130SRobert Watson 	COUNTER_INC(check_system_swapoff);
2020250ee706SRobert Watson 
2021ca26e8baSRobert Watson 	return (0);
2022ca26e8baSRobert Watson }
2023ca26e8baSRobert Watson 
2024269ad130SRobert Watson COUNTER_DECL(check_system_swapon);
2025ca26e8baSRobert Watson static int
202618717f69SRobert Watson mac_test_check_system_swapon(struct ucred *cred, struct vnode *vp,
202778007886SRobert Watson     struct label *vplabel)
2028ca26e8baSRobert Watson {
2029ca26e8baSRobert Watson 
20306827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
203178007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2032269ad130SRobert Watson 	COUNTER_INC(check_system_swapon);
2033250ee706SRobert Watson 
2034ca26e8baSRobert Watson 	return (0);
2035ca26e8baSRobert Watson }
2036ca26e8baSRobert Watson 
2037269ad130SRobert Watson COUNTER_DECL(check_system_sysctl);
2038ca26e8baSRobert Watson static int
203963dba32bSPawel Jakub Dawidek mac_test_check_system_sysctl(struct ucred *cred, struct sysctl_oid *oidp,
204063dba32bSPawel Jakub Dawidek     void *arg1, int arg2, struct sysctl_req *req)
2041ca26e8baSRobert Watson {
2042ca26e8baSRobert Watson 
20436827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2044269ad130SRobert Watson 	COUNTER_INC(check_system_sysctl);
2045250ee706SRobert Watson 
2046ca26e8baSRobert Watson 	return (0);
2047ca26e8baSRobert Watson }
2048ca26e8baSRobert Watson 
2049269ad130SRobert Watson COUNTER_DECL(check_vnode_access);
2050ca26e8baSRobert Watson static int
2051d8a7b7a3SRobert Watson mac_test_check_vnode_access(struct ucred *cred, struct vnode *vp,
205278007886SRobert Watson     struct label *vplabel, int acc_mode)
2053d8a7b7a3SRobert Watson {
2054d8a7b7a3SRobert Watson 
20556827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
205678007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2057269ad130SRobert Watson 	COUNTER_INC(check_vnode_access);
2058250ee706SRobert Watson 
2059d8a7b7a3SRobert Watson 	return (0);
2060d8a7b7a3SRobert Watson }
2061d8a7b7a3SRobert Watson 
2062269ad130SRobert Watson COUNTER_DECL(check_vnode_chdir);
2063d8a7b7a3SRobert Watson static int
2064d8a7b7a3SRobert Watson mac_test_check_vnode_chdir(struct ucred *cred, struct vnode *dvp,
206578007886SRobert Watson     struct label *dvplabel)
2066d8a7b7a3SRobert Watson {
2067d8a7b7a3SRobert Watson 
20686827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
206978007886SRobert Watson 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2070269ad130SRobert Watson 	COUNTER_INC(check_vnode_chdir);
2071250ee706SRobert Watson 
2072d8a7b7a3SRobert Watson 	return (0);
2073d8a7b7a3SRobert Watson }
2074d8a7b7a3SRobert Watson 
2075269ad130SRobert Watson COUNTER_DECL(check_vnode_chroot);
2076d8a7b7a3SRobert Watson static int
2077d8a7b7a3SRobert Watson mac_test_check_vnode_chroot(struct ucred *cred, struct vnode *dvp,
207878007886SRobert Watson     struct label *dvplabel)
2079d8a7b7a3SRobert Watson {
2080d8a7b7a3SRobert Watson 
20816827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
208278007886SRobert Watson 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2083269ad130SRobert Watson 	COUNTER_INC(check_vnode_chroot);
2084250ee706SRobert Watson 
2085d8a7b7a3SRobert Watson 	return (0);
2086d8a7b7a3SRobert Watson }
2087d8a7b7a3SRobert Watson 
2088269ad130SRobert Watson COUNTER_DECL(check_vnode_create);
2089d8a7b7a3SRobert Watson static int
2090d8a7b7a3SRobert Watson mac_test_check_vnode_create(struct ucred *cred, struct vnode *dvp,
209178007886SRobert Watson     struct label *dvplabel, struct componentname *cnp, struct vattr *vap)
2092d8a7b7a3SRobert Watson {
2093d8a7b7a3SRobert Watson 
20946827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
209578007886SRobert Watson 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2096269ad130SRobert Watson 	COUNTER_INC(check_vnode_create);
2097250ee706SRobert Watson 
2098d8a7b7a3SRobert Watson 	return (0);
2099d8a7b7a3SRobert Watson }
2100d8a7b7a3SRobert Watson 
2101269ad130SRobert Watson COUNTER_DECL(check_vnode_deleteacl);
2102d8a7b7a3SRobert Watson static int
2103d8a7b7a3SRobert Watson mac_test_check_vnode_deleteacl(struct ucred *cred, struct vnode *vp,
210478007886SRobert Watson     struct label *vplabel, acl_type_t type)
2105d8a7b7a3SRobert Watson {
2106d8a7b7a3SRobert Watson 
21076827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
210878007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2109269ad130SRobert Watson 	COUNTER_INC(check_vnode_deleteacl);
2110250ee706SRobert Watson 
2111250ee706SRobert Watson 	return (0);
2112250ee706SRobert Watson }
2113250ee706SRobert Watson 
2114269ad130SRobert Watson COUNTER_DECL(check_vnode_deleteextattr);
2115250ee706SRobert Watson static int
2116250ee706SRobert Watson mac_test_check_vnode_deleteextattr(struct ucred *cred, struct vnode *vp,
211778007886SRobert Watson     struct label *vplabel, int attrnamespace, const char *name)
2118250ee706SRobert Watson {
2119250ee706SRobert Watson 
21206827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
212178007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2122269ad130SRobert Watson 	COUNTER_INC(check_vnode_deleteextattr);
2123250ee706SRobert Watson 
2124d8a7b7a3SRobert Watson 	return (0);
2125d8a7b7a3SRobert Watson }
2126d8a7b7a3SRobert Watson 
2127269ad130SRobert Watson COUNTER_DECL(check_vnode_exec);
2128d8a7b7a3SRobert Watson static int
2129d8a7b7a3SRobert Watson mac_test_check_vnode_exec(struct ucred *cred, struct vnode *vp,
213078007886SRobert Watson     struct label *vplabel, struct image_params *imgp,
2131ef5def59SRobert Watson     struct label *execlabel)
2132d8a7b7a3SRobert Watson {
2133d8a7b7a3SRobert Watson 
21346827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
213578007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
21366827d029SRobert Watson 	LABEL_CHECK(execlabel, MAGIC_CRED);
2137269ad130SRobert Watson 	COUNTER_INC(check_vnode_exec);
2138250ee706SRobert Watson 
2139d8a7b7a3SRobert Watson 	return (0);
2140d8a7b7a3SRobert Watson }
2141d8a7b7a3SRobert Watson 
2142269ad130SRobert Watson COUNTER_DECL(check_vnode_getacl);
2143d8a7b7a3SRobert Watson static int
2144d8a7b7a3SRobert Watson mac_test_check_vnode_getacl(struct ucred *cred, struct vnode *vp,
214578007886SRobert Watson     struct label *vplabel, acl_type_t type)
2146d8a7b7a3SRobert Watson {
2147d8a7b7a3SRobert Watson 
21486827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
214978007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2150269ad130SRobert Watson 	COUNTER_INC(check_vnode_getacl);
2151250ee706SRobert Watson 
2152d8a7b7a3SRobert Watson 	return (0);
2153d8a7b7a3SRobert Watson }
2154d8a7b7a3SRobert Watson 
2155269ad130SRobert Watson COUNTER_DECL(check_vnode_getextattr);
2156d8a7b7a3SRobert Watson static int
2157d8a7b7a3SRobert Watson mac_test_check_vnode_getextattr(struct ucred *cred, struct vnode *vp,
215878007886SRobert Watson     struct label *vplabel, int attrnamespace, const char *name,
215978007886SRobert Watson     struct uio *uio)
2160d8a7b7a3SRobert Watson {
2161d8a7b7a3SRobert Watson 
21626827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
216378007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2164269ad130SRobert Watson 	COUNTER_INC(check_vnode_getextattr);
2165250ee706SRobert Watson 
2166d8a7b7a3SRobert Watson 	return (0);
2167d8a7b7a3SRobert Watson }
2168d8a7b7a3SRobert Watson 
2169269ad130SRobert Watson COUNTER_DECL(check_vnode_link);
2170d8a7b7a3SRobert Watson static int
2171c27b50f5SRobert Watson mac_test_check_vnode_link(struct ucred *cred, struct vnode *dvp,
217278007886SRobert Watson     struct label *dvplabel, struct vnode *vp, struct label *vplabel,
2173c27b50f5SRobert Watson     struct componentname *cnp)
2174c27b50f5SRobert Watson {
2175c27b50f5SRobert Watson 
21766827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
217778007886SRobert Watson 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
217878007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2179269ad130SRobert Watson 	COUNTER_INC(check_vnode_link);
2180250ee706SRobert Watson 
2181250ee706SRobert Watson 	return (0);
2182250ee706SRobert Watson }
2183250ee706SRobert Watson 
2184269ad130SRobert Watson COUNTER_DECL(check_vnode_listextattr);
2185250ee706SRobert Watson static int
2186250ee706SRobert Watson mac_test_check_vnode_listextattr(struct ucred *cred, struct vnode *vp,
218778007886SRobert Watson     struct label *vplabel, int attrnamespace)
2188250ee706SRobert Watson {
2189250ee706SRobert Watson 
21906827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
219178007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2192269ad130SRobert Watson 	COUNTER_INC(check_vnode_listextattr);
2193250ee706SRobert Watson 
2194c27b50f5SRobert Watson 	return (0);
2195c27b50f5SRobert Watson }
2196c27b50f5SRobert Watson 
2197269ad130SRobert Watson COUNTER_DECL(check_vnode_lookup);
2198c27b50f5SRobert Watson static int
2199d8a7b7a3SRobert Watson mac_test_check_vnode_lookup(struct ucred *cred, struct vnode *dvp,
220078007886SRobert Watson     struct label *dvplabel, struct componentname *cnp)
2201d8a7b7a3SRobert Watson {
2202d8a7b7a3SRobert Watson 
22036827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
220478007886SRobert Watson 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2205269ad130SRobert Watson 	COUNTER_INC(check_vnode_lookup);
2206250ee706SRobert Watson 
2207d8a7b7a3SRobert Watson 	return (0);
2208d8a7b7a3SRobert Watson }
2209d8a7b7a3SRobert Watson 
2210269ad130SRobert Watson COUNTER_DECL(check_vnode_mmap);
2211d8a7b7a3SRobert Watson static int
2212e183f80eSRobert Watson mac_test_check_vnode_mmap(struct ucred *cred, struct vnode *vp,
221378007886SRobert Watson     struct label *vplabel, int prot, int flags)
2214e183f80eSRobert Watson {
2215e183f80eSRobert Watson 
22166827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
221778007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2218269ad130SRobert Watson 	COUNTER_INC(check_vnode_mmap);
2219250ee706SRobert Watson 
2220e183f80eSRobert Watson 	return (0);
2221e183f80eSRobert Watson }
2222e183f80eSRobert Watson 
2223269ad130SRobert Watson COUNTER_DECL(check_vnode_open);
2224e183f80eSRobert Watson static int
2225d8a7b7a3SRobert Watson mac_test_check_vnode_open(struct ucred *cred, struct vnode *vp,
222678007886SRobert Watson     struct label *vplabel, int acc_mode)
2227d8a7b7a3SRobert Watson {
2228d8a7b7a3SRobert Watson 
22296827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
223078007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2231269ad130SRobert Watson 	COUNTER_INC(check_vnode_open);
2232250ee706SRobert Watson 
2233d8a7b7a3SRobert Watson 	return (0);
2234d8a7b7a3SRobert Watson }
2235d8a7b7a3SRobert Watson 
2236269ad130SRobert Watson COUNTER_DECL(check_vnode_poll);
2237d8a7b7a3SRobert Watson static int
2238177142e4SRobert Watson mac_test_check_vnode_poll(struct ucred *active_cred, struct ucred *file_cred,
223978007886SRobert Watson     struct vnode *vp, struct label *vplabel)
22407f724f8bSRobert Watson {
22417f724f8bSRobert Watson 
22426827d029SRobert Watson 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
22436827d029SRobert Watson 	if (file_cred != NULL)
22446827d029SRobert Watson 		LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
224578007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2246269ad130SRobert Watson 	COUNTER_INC(check_vnode_poll);
2247250ee706SRobert Watson 
22487f724f8bSRobert Watson 	return (0);
22497f724f8bSRobert Watson }
22507f724f8bSRobert Watson 
2251269ad130SRobert Watson COUNTER_DECL(check_vnode_read);
22527f724f8bSRobert Watson static int
2253177142e4SRobert Watson mac_test_check_vnode_read(struct ucred *active_cred, struct ucred *file_cred,
225478007886SRobert Watson     struct vnode *vp, struct label *vplabel)
22557f724f8bSRobert Watson {
22567f724f8bSRobert Watson 
22576827d029SRobert Watson 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
22586827d029SRobert Watson 	if (file_cred != NULL)
22596827d029SRobert Watson 		LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
226078007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2261269ad130SRobert Watson 	COUNTER_INC(check_vnode_read);
2262250ee706SRobert Watson 
22637f724f8bSRobert Watson 	return (0);
22647f724f8bSRobert Watson }
22657f724f8bSRobert Watson 
2266269ad130SRobert Watson COUNTER_DECL(check_vnode_readdir);
22677f724f8bSRobert Watson static int
2268d8a7b7a3SRobert Watson mac_test_check_vnode_readdir(struct ucred *cred, struct vnode *dvp,
226978007886SRobert Watson     struct label *dvplabel)
2270d8a7b7a3SRobert Watson {
2271d8a7b7a3SRobert Watson 
22726827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
227378007886SRobert Watson 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2274269ad130SRobert Watson 	COUNTER_INC(check_vnode_readdir);
2275250ee706SRobert Watson 
2276d8a7b7a3SRobert Watson 	return (0);
2277d8a7b7a3SRobert Watson }
2278d8a7b7a3SRobert Watson 
2279269ad130SRobert Watson COUNTER_DECL(check_vnode_readlink);
2280d8a7b7a3SRobert Watson static int
2281d8a7b7a3SRobert Watson mac_test_check_vnode_readlink(struct ucred *cred, struct vnode *vp,
228278007886SRobert Watson     struct label *vplabel)
2283d8a7b7a3SRobert Watson {
2284d8a7b7a3SRobert Watson 
22856827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
228678007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2287269ad130SRobert Watson 	COUNTER_INC(check_vnode_readlink);
2288250ee706SRobert Watson 
2289d8a7b7a3SRobert Watson 	return (0);
2290d8a7b7a3SRobert Watson }
2291d8a7b7a3SRobert Watson 
2292269ad130SRobert Watson COUNTER_DECL(check_vnode_relabel);
2293d8a7b7a3SRobert Watson static int
2294d8a7b7a3SRobert Watson mac_test_check_vnode_relabel(struct ucred *cred, struct vnode *vp,
229578007886SRobert Watson     struct label *vplabel, struct label *newlabel)
2296d8a7b7a3SRobert Watson {
2297d8a7b7a3SRobert Watson 
22986827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
229978007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
23006827d029SRobert Watson 	LABEL_CHECK(newlabel, MAGIC_VNODE);
2301269ad130SRobert Watson 	COUNTER_INC(check_vnode_relabel);
2302250ee706SRobert Watson 
2303d8a7b7a3SRobert Watson 	return (0);
2304d8a7b7a3SRobert Watson }
2305d8a7b7a3SRobert Watson 
2306269ad130SRobert Watson COUNTER_DECL(check_vnode_rename_from);
2307d8a7b7a3SRobert Watson static int
2308d8a7b7a3SRobert Watson mac_test_check_vnode_rename_from(struct ucred *cred, struct vnode *dvp,
230978007886SRobert Watson     struct label *dvplabel, struct vnode *vp, struct label *vplabel,
2310d8a7b7a3SRobert Watson     struct componentname *cnp)
2311d8a7b7a3SRobert Watson {
2312d8a7b7a3SRobert Watson 
23136827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
231478007886SRobert Watson 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
231578007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2316269ad130SRobert Watson 	COUNTER_INC(check_vnode_rename_from);
2317250ee706SRobert Watson 
2318d8a7b7a3SRobert Watson 	return (0);
2319d8a7b7a3SRobert Watson }
2320d8a7b7a3SRobert Watson 
2321269ad130SRobert Watson COUNTER_DECL(check_vnode_rename_to);
2322d8a7b7a3SRobert Watson static int
2323d8a7b7a3SRobert Watson mac_test_check_vnode_rename_to(struct ucred *cred, struct vnode *dvp,
232478007886SRobert Watson     struct label *dvplabel, struct vnode *vp, struct label *vplabel,
232578007886SRobert Watson     int samedir, struct componentname *cnp)
2326d8a7b7a3SRobert Watson {
2327d8a7b7a3SRobert Watson 
23286827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
232978007886SRobert Watson 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
233078007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2331269ad130SRobert Watson 	COUNTER_INC(check_vnode_rename_to);
2332250ee706SRobert Watson 
2333d8a7b7a3SRobert Watson 	return (0);
2334d8a7b7a3SRobert Watson }
2335d8a7b7a3SRobert Watson 
2336269ad130SRobert Watson COUNTER_DECL(check_vnode_revoke);
2337d8a7b7a3SRobert Watson static int
2338d8a7b7a3SRobert Watson mac_test_check_vnode_revoke(struct ucred *cred, struct vnode *vp,
233978007886SRobert Watson     struct label *vplabel)
2340d8a7b7a3SRobert Watson {
2341d8a7b7a3SRobert Watson 
23426827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
234378007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2344269ad130SRobert Watson 	COUNTER_INC(check_vnode_revoke);
2345250ee706SRobert Watson 
2346d8a7b7a3SRobert Watson 	return (0);
2347d8a7b7a3SRobert Watson }
2348d8a7b7a3SRobert Watson 
2349269ad130SRobert Watson COUNTER_DECL(check_vnode_setacl);
2350d8a7b7a3SRobert Watson static int
2351d8a7b7a3SRobert Watson mac_test_check_vnode_setacl(struct ucred *cred, struct vnode *vp,
235278007886SRobert Watson     struct label *vplabel, acl_type_t type, struct acl *acl)
2353d8a7b7a3SRobert Watson {
2354d8a7b7a3SRobert Watson 
23556827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
235678007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2357269ad130SRobert Watson 	COUNTER_INC(check_vnode_setacl);
2358250ee706SRobert Watson 
2359d8a7b7a3SRobert Watson 	return (0);
2360d8a7b7a3SRobert Watson }
2361d8a7b7a3SRobert Watson 
2362269ad130SRobert Watson COUNTER_DECL(check_vnode_setextattr);
2363d8a7b7a3SRobert Watson static int
2364d8a7b7a3SRobert Watson mac_test_check_vnode_setextattr(struct ucred *cred, struct vnode *vp,
236578007886SRobert Watson     struct label *vplabel, int attrnamespace, const char *name,
236678007886SRobert Watson     struct uio *uio)
2367d8a7b7a3SRobert Watson {
2368d8a7b7a3SRobert Watson 
23696827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
237078007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2371269ad130SRobert Watson 	COUNTER_INC(check_vnode_setextattr);
2372250ee706SRobert Watson 
2373d8a7b7a3SRobert Watson 	return (0);
2374d8a7b7a3SRobert Watson }
2375d8a7b7a3SRobert Watson 
2376269ad130SRobert Watson COUNTER_DECL(check_vnode_setflags);
2377d8a7b7a3SRobert Watson static int
2378d8a7b7a3SRobert Watson mac_test_check_vnode_setflags(struct ucred *cred, struct vnode *vp,
237978007886SRobert Watson     struct label *vplabel, u_long flags)
2380d8a7b7a3SRobert Watson {
2381d8a7b7a3SRobert Watson 
23826827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
238378007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2384269ad130SRobert Watson 	COUNTER_INC(check_vnode_setflags);
2385250ee706SRobert Watson 
2386d8a7b7a3SRobert Watson 	return (0);
2387d8a7b7a3SRobert Watson }
2388d8a7b7a3SRobert Watson 
2389269ad130SRobert Watson COUNTER_DECL(check_vnode_setmode);
2390d8a7b7a3SRobert Watson static int
2391d8a7b7a3SRobert Watson mac_test_check_vnode_setmode(struct ucred *cred, struct vnode *vp,
239278007886SRobert Watson     struct label *vplabel, mode_t mode)
2393d8a7b7a3SRobert Watson {
2394d8a7b7a3SRobert Watson 
23956827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
239678007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2397269ad130SRobert Watson 	COUNTER_INC(check_vnode_setmode);
2398250ee706SRobert Watson 
2399d8a7b7a3SRobert Watson 	return (0);
2400d8a7b7a3SRobert Watson }
2401d8a7b7a3SRobert Watson 
2402269ad130SRobert Watson COUNTER_DECL(check_vnode_setowner);
2403d8a7b7a3SRobert Watson static int
2404d8a7b7a3SRobert Watson mac_test_check_vnode_setowner(struct ucred *cred, struct vnode *vp,
240578007886SRobert Watson     struct label *vplabel, uid_t uid, gid_t gid)
2406d8a7b7a3SRobert Watson {
2407d8a7b7a3SRobert Watson 
24086827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
240978007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2410269ad130SRobert Watson 	COUNTER_INC(check_vnode_setowner);
2411250ee706SRobert Watson 
2412d8a7b7a3SRobert Watson 	return (0);
2413d8a7b7a3SRobert Watson }
2414d8a7b7a3SRobert Watson 
2415269ad130SRobert Watson COUNTER_DECL(check_vnode_setutimes);
2416d8a7b7a3SRobert Watson static int
2417d8a7b7a3SRobert Watson mac_test_check_vnode_setutimes(struct ucred *cred, struct vnode *vp,
241878007886SRobert Watson     struct label *vplabel, struct timespec atime, struct timespec mtime)
2419d8a7b7a3SRobert Watson {
2420d8a7b7a3SRobert Watson 
24216827d029SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
242278007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2423269ad130SRobert Watson 	COUNTER_INC(check_vnode_setutimes);
2424250ee706SRobert Watson 
2425d8a7b7a3SRobert Watson 	return (0);
2426d8a7b7a3SRobert Watson }
2427d8a7b7a3SRobert Watson 
2428269ad130SRobert Watson COUNTER_DECL(check_vnode_stat);
2429d8a7b7a3SRobert Watson static int
2430177142e4SRobert Watson mac_test_check_vnode_stat(struct ucred *active_cred, struct ucred *file_cred,
243178007886SRobert Watson     struct vnode *vp, struct label *vplabel)
2432d8a7b7a3SRobert Watson {
2433d8a7b7a3SRobert Watson 
24346827d029SRobert Watson 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
24356827d029SRobert Watson 	if (file_cred != NULL)
24366827d029SRobert Watson 		LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
243778007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2438269ad130SRobert Watson 	COUNTER_INC(check_vnode_stat);
2439250ee706SRobert Watson 
2440d8a7b7a3SRobert Watson 	return (0);
2441d8a7b7a3SRobert Watson }
2442d8a7b7a3SRobert Watson 
244345e0f3d6SRobert Watson COUNTER_DECL(check_vnode_unlink);
244445e0f3d6SRobert Watson static int
244545e0f3d6SRobert Watson mac_test_check_vnode_unlink(struct ucred *cred, struct vnode *dvp,
244645e0f3d6SRobert Watson     struct label *dvplabel, struct vnode *vp, struct label *vplabel,
244745e0f3d6SRobert Watson     struct componentname *cnp)
244845e0f3d6SRobert Watson {
244945e0f3d6SRobert Watson 
245045e0f3d6SRobert Watson 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
245145e0f3d6SRobert Watson 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
245245e0f3d6SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
245345e0f3d6SRobert Watson 	COUNTER_INC(check_vnode_unlink);
245445e0f3d6SRobert Watson 
245545e0f3d6SRobert Watson 	return (0);
245645e0f3d6SRobert Watson }
245745e0f3d6SRobert Watson 
2458269ad130SRobert Watson COUNTER_DECL(check_vnode_write);
24597f724f8bSRobert Watson static int
2460177142e4SRobert Watson mac_test_check_vnode_write(struct ucred *active_cred,
246178007886SRobert Watson     struct ucred *file_cred, struct vnode *vp, struct label *vplabel)
24627f724f8bSRobert Watson {
24637f724f8bSRobert Watson 
24646827d029SRobert Watson 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
24656827d029SRobert Watson 	if (file_cred != NULL)
24666827d029SRobert Watson 		LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
246778007886SRobert Watson 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2468269ad130SRobert Watson 	COUNTER_INC(check_vnode_write);
2469250ee706SRobert Watson 
24707f724f8bSRobert Watson 	return (0);
24717f724f8bSRobert Watson }
24727f724f8bSRobert Watson 
24735c8dd342SRobert Watson static struct mac_policy_ops mac_test_ops =
2474d8a7b7a3SRobert Watson {
24755c8dd342SRobert Watson 	.mpo_init_bpfdesc_label = mac_test_init_bpfdesc_label,
24765c8dd342SRobert Watson 	.mpo_init_cred_label = mac_test_init_cred_label,
247730575990SRobert Watson 	.mpo_init_devfs_label = mac_test_init_devfs_label,
24785c8dd342SRobert Watson 	.mpo_init_ifnet_label = mac_test_init_ifnet_label,
24797e400ed1SRobert Watson 	.mpo_init_sysv_msgmsg_label = mac_test_init_sysv_msgmsg_label,
24807e400ed1SRobert Watson 	.mpo_init_sysv_msgqueue_label = mac_test_init_sysv_msgqueue_label,
24813831e7d7SRobert Watson 	.mpo_init_sysv_sem_label = mac_test_init_sysv_sem_label,
24827e400ed1SRobert Watson 	.mpo_init_sysv_shm_label = mac_test_init_sysv_shm_label,
2483a557af22SRobert Watson 	.mpo_init_inpcb_label = mac_test_init_inpcb_label,
24845c8dd342SRobert Watson 	.mpo_init_ipq_label = mac_test_init_ipq_label,
24855c8dd342SRobert Watson 	.mpo_init_mbuf_label = mac_test_init_mbuf_label,
24865c8dd342SRobert Watson 	.mpo_init_mount_label = mac_test_init_mount_label,
24875c8dd342SRobert Watson 	.mpo_init_pipe_label = mac_test_init_pipe_label,
248852648411SRobert Watson 	.mpo_init_posix_sem_label = mac_test_init_posix_sem_label,
2489ca26e8baSRobert Watson 	.mpo_init_proc_label = mac_test_init_proc_label,
24905c8dd342SRobert Watson 	.mpo_init_socket_label = mac_test_init_socket_label,
24915c8dd342SRobert Watson 	.mpo_init_socket_peer_label = mac_test_init_socket_peer_label,
24925c8dd342SRobert Watson 	.mpo_init_vnode_label = mac_test_init_vnode_label,
24935c8dd342SRobert Watson 	.mpo_destroy_bpfdesc_label = mac_test_destroy_bpfdesc_label,
24945c8dd342SRobert Watson 	.mpo_destroy_cred_label = mac_test_destroy_cred_label,
249530575990SRobert Watson 	.mpo_destroy_devfs_label = mac_test_destroy_devfs_label,
24965c8dd342SRobert Watson 	.mpo_destroy_ifnet_label = mac_test_destroy_ifnet_label,
24977e400ed1SRobert Watson 	.mpo_destroy_sysv_msgmsg_label = mac_test_destroy_sysv_msgmsg_label,
24987e400ed1SRobert Watson 	.mpo_destroy_sysv_msgqueue_label =
24997e400ed1SRobert Watson 	    mac_test_destroy_sysv_msgqueue_label,
25003831e7d7SRobert Watson 	.mpo_destroy_sysv_sem_label = mac_test_destroy_sysv_sem_label,
25017e400ed1SRobert Watson 	.mpo_destroy_sysv_shm_label = mac_test_destroy_sysv_shm_label,
2502a557af22SRobert Watson 	.mpo_destroy_inpcb_label = mac_test_destroy_inpcb_label,
25035c8dd342SRobert Watson 	.mpo_destroy_ipq_label = mac_test_destroy_ipq_label,
25045c8dd342SRobert Watson 	.mpo_destroy_mbuf_label = mac_test_destroy_mbuf_label,
25055c8dd342SRobert Watson 	.mpo_destroy_mount_label = mac_test_destroy_mount_label,
25065c8dd342SRobert Watson 	.mpo_destroy_pipe_label = mac_test_destroy_pipe_label,
250752648411SRobert Watson 	.mpo_destroy_posix_sem_label = mac_test_destroy_posix_sem_label,
2508ca26e8baSRobert Watson 	.mpo_destroy_proc_label = mac_test_destroy_proc_label,
25095c8dd342SRobert Watson 	.mpo_destroy_socket_label = mac_test_destroy_socket_label,
25105c8dd342SRobert Watson 	.mpo_destroy_socket_peer_label = mac_test_destroy_socket_peer_label,
25115c8dd342SRobert Watson 	.mpo_destroy_vnode_label = mac_test_destroy_vnode_label,
251256d9e932SRobert Watson 	.mpo_copy_cred_label = mac_test_copy_cred_label,
25132220907bSRobert Watson 	.mpo_copy_ifnet_label = mac_test_copy_ifnet_label,
25140196273bSRobert Watson 	.mpo_copy_mbuf_label = mac_test_copy_mbuf_label,
25150196273bSRobert Watson 	.mpo_copy_pipe_label = mac_test_copy_pipe_label,
2516b0323ea3SRobert Watson 	.mpo_copy_socket_label = mac_test_copy_socket_label,
25170196273bSRobert Watson 	.mpo_copy_vnode_label = mac_test_copy_vnode_label,
25185c8dd342SRobert Watson 	.mpo_externalize_cred_label = mac_test_externalize_label,
25195c8dd342SRobert Watson 	.mpo_externalize_ifnet_label = mac_test_externalize_label,
25205c8dd342SRobert Watson 	.mpo_externalize_pipe_label = mac_test_externalize_label,
25215c8dd342SRobert Watson 	.mpo_externalize_socket_label = mac_test_externalize_label,
25225c8dd342SRobert Watson 	.mpo_externalize_socket_peer_label = mac_test_externalize_label,
25235c8dd342SRobert Watson 	.mpo_externalize_vnode_label = mac_test_externalize_label,
25245c8dd342SRobert Watson 	.mpo_internalize_cred_label = mac_test_internalize_label,
25255c8dd342SRobert Watson 	.mpo_internalize_ifnet_label = mac_test_internalize_label,
25265c8dd342SRobert Watson 	.mpo_internalize_pipe_label = mac_test_internalize_label,
25275c8dd342SRobert Watson 	.mpo_internalize_socket_label = mac_test_internalize_label,
25285c8dd342SRobert Watson 	.mpo_internalize_vnode_label = mac_test_internalize_label,
25295c8dd342SRobert Watson 	.mpo_associate_vnode_devfs = mac_test_associate_vnode_devfs,
25305c8dd342SRobert Watson 	.mpo_associate_vnode_extattr = mac_test_associate_vnode_extattr,
25315c8dd342SRobert Watson 	.mpo_associate_vnode_singlelabel = mac_test_associate_vnode_singlelabel,
25325c8dd342SRobert Watson 	.mpo_create_devfs_device = mac_test_create_devfs_device,
25335c8dd342SRobert Watson 	.mpo_create_devfs_directory = mac_test_create_devfs_directory,
25345c8dd342SRobert Watson 	.mpo_create_devfs_symlink = mac_test_create_devfs_symlink,
25355c8dd342SRobert Watson 	.mpo_create_vnode_extattr = mac_test_create_vnode_extattr,
25365c8dd342SRobert Watson 	.mpo_create_mount = mac_test_create_mount,
25375c8dd342SRobert Watson 	.mpo_relabel_vnode = mac_test_relabel_vnode,
25385c8dd342SRobert Watson 	.mpo_setlabel_vnode_extattr = mac_test_setlabel_vnode_extattr,
253930575990SRobert Watson 	.mpo_update_devfs = mac_test_update_devfs,
25405c8dd342SRobert Watson 	.mpo_create_mbuf_from_socket = mac_test_create_mbuf_from_socket,
25415c8dd342SRobert Watson 	.mpo_create_pipe = mac_test_create_pipe,
254252648411SRobert Watson 	.mpo_create_posix_sem = mac_test_create_posix_sem,
25435c8dd342SRobert Watson 	.mpo_create_socket = mac_test_create_socket,
25445c8dd342SRobert Watson 	.mpo_create_socket_from_socket = mac_test_create_socket_from_socket,
25455c8dd342SRobert Watson 	.mpo_relabel_pipe = mac_test_relabel_pipe,
25465c8dd342SRobert Watson 	.mpo_relabel_socket = mac_test_relabel_socket,
25475c8dd342SRobert Watson 	.mpo_set_socket_peer_from_mbuf = mac_test_set_socket_peer_from_mbuf,
25485c8dd342SRobert Watson 	.mpo_set_socket_peer_from_socket = mac_test_set_socket_peer_from_socket,
25495c8dd342SRobert Watson 	.mpo_create_bpfdesc = mac_test_create_bpfdesc,
25505c8dd342SRobert Watson 	.mpo_create_ifnet = mac_test_create_ifnet,
2551a557af22SRobert Watson 	.mpo_create_inpcb_from_socket = mac_test_create_inpcb_from_socket,
25527e400ed1SRobert Watson 	.mpo_create_sysv_msgmsg = mac_test_create_sysv_msgmsg,
25537e400ed1SRobert Watson 	.mpo_create_sysv_msgqueue = mac_test_create_sysv_msgqueue,
25543831e7d7SRobert Watson 	.mpo_create_sysv_sem = mac_test_create_sysv_sem,
25557e400ed1SRobert Watson 	.mpo_create_sysv_shm = mac_test_create_sysv_shm,
25565c8dd342SRobert Watson 	.mpo_create_datagram_from_ipq = mac_test_create_datagram_from_ipq,
25575c8dd342SRobert Watson 	.mpo_create_fragment = mac_test_create_fragment,
25585c8dd342SRobert Watson 	.mpo_create_ipq = mac_test_create_ipq,
25592d92ec98SRobert Watson 	.mpo_create_mbuf_from_inpcb = mac_test_create_mbuf_from_inpcb,
25605c8dd342SRobert Watson 	.mpo_create_mbuf_linklayer = mac_test_create_mbuf_linklayer,
25615c8dd342SRobert Watson 	.mpo_create_mbuf_from_bpfdesc = mac_test_create_mbuf_from_bpfdesc,
25625c8dd342SRobert Watson 	.mpo_create_mbuf_from_ifnet = mac_test_create_mbuf_from_ifnet,
25635c8dd342SRobert Watson 	.mpo_create_mbuf_multicast_encap = mac_test_create_mbuf_multicast_encap,
25645c8dd342SRobert Watson 	.mpo_create_mbuf_netlayer = mac_test_create_mbuf_netlayer,
25655c8dd342SRobert Watson 	.mpo_fragment_match = mac_test_fragment_match,
2566250ee706SRobert Watson 	.mpo_reflect_mbuf_icmp = mac_test_reflect_mbuf_icmp,
25672b6e8310SRobert Watson 	.mpo_reflect_mbuf_tcp = mac_test_reflect_mbuf_tcp,
25685c8dd342SRobert Watson 	.mpo_relabel_ifnet = mac_test_relabel_ifnet,
25695c8dd342SRobert Watson 	.mpo_update_ipq = mac_test_update_ipq,
2570a557af22SRobert Watson 	.mpo_inpcb_sosetlabel = mac_test_inpcb_sosetlabel,
25715c8dd342SRobert Watson 	.mpo_execve_transition = mac_test_execve_transition,
25725c8dd342SRobert Watson 	.mpo_execve_will_transition = mac_test_execve_will_transition,
25735c8dd342SRobert Watson 	.mpo_create_proc0 = mac_test_create_proc0,
25745c8dd342SRobert Watson 	.mpo_create_proc1 = mac_test_create_proc1,
25755c8dd342SRobert Watson 	.mpo_relabel_cred = mac_test_relabel_cred,
2576ca26e8baSRobert Watson 	.mpo_thread_userret = mac_test_thread_userret,
25777e400ed1SRobert Watson 	.mpo_cleanup_sysv_msgmsg = mac_test_cleanup_sysv_msgmsg,
25787e400ed1SRobert Watson 	.mpo_cleanup_sysv_msgqueue = mac_test_cleanup_sysv_msgqueue,
25793831e7d7SRobert Watson 	.mpo_cleanup_sysv_sem = mac_test_cleanup_sysv_sem,
25807e400ed1SRobert Watson 	.mpo_cleanup_sysv_shm = mac_test_cleanup_sysv_shm,
25815c8dd342SRobert Watson 	.mpo_check_bpfdesc_receive = mac_test_check_bpfdesc_receive,
25825c8dd342SRobert Watson 	.mpo_check_cred_relabel = mac_test_check_cred_relabel,
25835c8dd342SRobert Watson 	.mpo_check_cred_visible = mac_test_check_cred_visible,
25845c8dd342SRobert Watson 	.mpo_check_ifnet_relabel = mac_test_check_ifnet_relabel,
25855c8dd342SRobert Watson 	.mpo_check_ifnet_transmit = mac_test_check_ifnet_transmit,
2586a557af22SRobert Watson 	.mpo_check_inpcb_deliver = mac_test_check_inpcb_deliver,
25877e400ed1SRobert Watson 	.mpo_check_sysv_msgmsq = mac_test_check_sysv_msgmsq,
25887e400ed1SRobert Watson 	.mpo_check_sysv_msgrcv = mac_test_check_sysv_msgrcv,
25897e400ed1SRobert Watson 	.mpo_check_sysv_msgrmid = mac_test_check_sysv_msgrmid,
25907e400ed1SRobert Watson 	.mpo_check_sysv_msqget = mac_test_check_sysv_msqget,
25917e400ed1SRobert Watson 	.mpo_check_sysv_msqsnd = mac_test_check_sysv_msqsnd,
25927e400ed1SRobert Watson 	.mpo_check_sysv_msqrcv = mac_test_check_sysv_msqrcv,
25937e400ed1SRobert Watson 	.mpo_check_sysv_msqctl = mac_test_check_sysv_msqctl,
25947e400ed1SRobert Watson 	.mpo_check_sysv_semctl = mac_test_check_sysv_semctl,
25957e400ed1SRobert Watson 	.mpo_check_sysv_semget = mac_test_check_sysv_semget,
25967e400ed1SRobert Watson 	.mpo_check_sysv_semop = mac_test_check_sysv_semop,
25977e400ed1SRobert Watson 	.mpo_check_sysv_shmat = mac_test_check_sysv_shmat,
25987e400ed1SRobert Watson 	.mpo_check_sysv_shmctl = mac_test_check_sysv_shmctl,
25997e400ed1SRobert Watson 	.mpo_check_sysv_shmdt = mac_test_check_sysv_shmdt,
26007e400ed1SRobert Watson 	.mpo_check_sysv_shmget = mac_test_check_sysv_shmget,
2601ca26e8baSRobert Watson 	.mpo_check_kenv_dump = mac_test_check_kenv_dump,
2602ca26e8baSRobert Watson 	.mpo_check_kenv_get = mac_test_check_kenv_get,
2603ca26e8baSRobert Watson 	.mpo_check_kenv_set = mac_test_check_kenv_set,
2604ca26e8baSRobert Watson 	.mpo_check_kenv_unset = mac_test_check_kenv_unset,
2605ca26e8baSRobert Watson 	.mpo_check_kld_load = mac_test_check_kld_load,
2606ca26e8baSRobert Watson 	.mpo_check_kld_stat = mac_test_check_kld_stat,
26075c8dd342SRobert Watson 	.mpo_check_mount_stat = mac_test_check_mount_stat,
26085c8dd342SRobert Watson 	.mpo_check_pipe_ioctl = mac_test_check_pipe_ioctl,
26095c8dd342SRobert Watson 	.mpo_check_pipe_poll = mac_test_check_pipe_poll,
26105c8dd342SRobert Watson 	.mpo_check_pipe_read = mac_test_check_pipe_read,
26115c8dd342SRobert Watson 	.mpo_check_pipe_relabel = mac_test_check_pipe_relabel,
26125c8dd342SRobert Watson 	.mpo_check_pipe_stat = mac_test_check_pipe_stat,
26135c8dd342SRobert Watson 	.mpo_check_pipe_write = mac_test_check_pipe_write,
261452648411SRobert Watson 	.mpo_check_posix_sem_destroy = mac_test_check_posix_sem,
261552648411SRobert Watson 	.mpo_check_posix_sem_getvalue = mac_test_check_posix_sem,
261652648411SRobert Watson 	.mpo_check_posix_sem_open = mac_test_check_posix_sem,
261752648411SRobert Watson 	.mpo_check_posix_sem_post = mac_test_check_posix_sem,
261852648411SRobert Watson 	.mpo_check_posix_sem_unlink = mac_test_check_posix_sem,
261952648411SRobert Watson 	.mpo_check_posix_sem_wait = mac_test_check_posix_sem,
26205c8dd342SRobert Watson 	.mpo_check_proc_debug = mac_test_check_proc_debug,
26215c8dd342SRobert Watson 	.mpo_check_proc_sched = mac_test_check_proc_sched,
262218717f69SRobert Watson 	.mpo_check_proc_setaudit = mac_test_check_proc_setaudit,
2623f1e8bf6dSRobert Watson 	.mpo_check_proc_setaudit_addr = mac_test_check_proc_setaudit_addr,
262418717f69SRobert Watson 	.mpo_check_proc_setauid = mac_test_check_proc_setauid,
2625030a28b3SRobert Watson 	.mpo_check_proc_setuid = mac_test_check_proc_setuid,
2626030a28b3SRobert Watson 	.mpo_check_proc_seteuid = mac_test_check_proc_seteuid,
2627030a28b3SRobert Watson 	.mpo_check_proc_setgid = mac_test_check_proc_setgid,
2628030a28b3SRobert Watson 	.mpo_check_proc_setegid = mac_test_check_proc_setegid,
2629030a28b3SRobert Watson 	.mpo_check_proc_setgroups = mac_test_check_proc_setgroups,
2630030a28b3SRobert Watson 	.mpo_check_proc_setreuid = mac_test_check_proc_setreuid,
2631030a28b3SRobert Watson 	.mpo_check_proc_setregid = mac_test_check_proc_setregid,
2632030a28b3SRobert Watson 	.mpo_check_proc_setresuid = mac_test_check_proc_setresuid,
2633030a28b3SRobert Watson 	.mpo_check_proc_setresgid = mac_test_check_proc_setresgid,
26345c8dd342SRobert Watson 	.mpo_check_proc_signal = mac_test_check_proc_signal,
2635babe9a2bSRobert Watson 	.mpo_check_proc_wait = mac_test_check_proc_wait,
26367f53207bSRobert Watson 	.mpo_check_socket_accept = mac_test_check_socket_accept,
26375c8dd342SRobert Watson 	.mpo_check_socket_bind = mac_test_check_socket_bind,
26385c8dd342SRobert Watson 	.mpo_check_socket_connect = mac_test_check_socket_connect,
26395c8dd342SRobert Watson 	.mpo_check_socket_deliver = mac_test_check_socket_deliver,
26405c8dd342SRobert Watson 	.mpo_check_socket_listen = mac_test_check_socket_listen,
26417f53207bSRobert Watson 	.mpo_check_socket_poll = mac_test_check_socket_poll,
26427f53207bSRobert Watson 	.mpo_check_socket_receive = mac_test_check_socket_receive,
26435c8dd342SRobert Watson 	.mpo_check_socket_relabel = mac_test_check_socket_relabel,
26447f53207bSRobert Watson 	.mpo_check_socket_send = mac_test_check_socket_send,
26457f53207bSRobert Watson 	.mpo_check_socket_stat = mac_test_check_socket_stat,
26465c8dd342SRobert Watson 	.mpo_check_socket_visible = mac_test_check_socket_visible,
2647ca26e8baSRobert Watson 	.mpo_check_system_acct = mac_test_check_system_acct,
264818717f69SRobert Watson 	.mpo_check_system_audit = mac_test_check_system_audit,
264918717f69SRobert Watson 	.mpo_check_system_auditctl = mac_test_check_system_auditctl,
265018717f69SRobert Watson 	.mpo_check_system_auditon = mac_test_check_system_auditon,
2651ca26e8baSRobert Watson 	.mpo_check_system_reboot = mac_test_check_system_reboot,
2652ca26e8baSRobert Watson 	.mpo_check_system_swapoff = mac_test_check_system_swapoff,
265318717f69SRobert Watson 	.mpo_check_system_swapon = mac_test_check_system_swapon,
2654ca26e8baSRobert Watson 	.mpo_check_system_sysctl = mac_test_check_system_sysctl,
26555c8dd342SRobert Watson 	.mpo_check_vnode_access = mac_test_check_vnode_access,
26565c8dd342SRobert Watson 	.mpo_check_vnode_chdir = mac_test_check_vnode_chdir,
26575c8dd342SRobert Watson 	.mpo_check_vnode_chroot = mac_test_check_vnode_chroot,
26585c8dd342SRobert Watson 	.mpo_check_vnode_create = mac_test_check_vnode_create,
26595c8dd342SRobert Watson 	.mpo_check_vnode_deleteacl = mac_test_check_vnode_deleteacl,
2660250ee706SRobert Watson 	.mpo_check_vnode_deleteextattr = mac_test_check_vnode_deleteextattr,
26615c8dd342SRobert Watson 	.mpo_check_vnode_exec = mac_test_check_vnode_exec,
26625c8dd342SRobert Watson 	.mpo_check_vnode_getacl = mac_test_check_vnode_getacl,
26635c8dd342SRobert Watson 	.mpo_check_vnode_getextattr = mac_test_check_vnode_getextattr,
26645c8dd342SRobert Watson 	.mpo_check_vnode_link = mac_test_check_vnode_link,
2665250ee706SRobert Watson 	.mpo_check_vnode_listextattr = mac_test_check_vnode_listextattr,
26665c8dd342SRobert Watson 	.mpo_check_vnode_lookup = mac_test_check_vnode_lookup,
26675c8dd342SRobert Watson 	.mpo_check_vnode_mmap = mac_test_check_vnode_mmap,
26685c8dd342SRobert Watson 	.mpo_check_vnode_open = mac_test_check_vnode_open,
26695c8dd342SRobert Watson 	.mpo_check_vnode_poll = mac_test_check_vnode_poll,
26705c8dd342SRobert Watson 	.mpo_check_vnode_read = mac_test_check_vnode_read,
26715c8dd342SRobert Watson 	.mpo_check_vnode_readdir = mac_test_check_vnode_readdir,
26725c8dd342SRobert Watson 	.mpo_check_vnode_readlink = mac_test_check_vnode_readlink,
26735c8dd342SRobert Watson 	.mpo_check_vnode_relabel = mac_test_check_vnode_relabel,
26745c8dd342SRobert Watson 	.mpo_check_vnode_rename_from = mac_test_check_vnode_rename_from,
26755c8dd342SRobert Watson 	.mpo_check_vnode_rename_to = mac_test_check_vnode_rename_to,
26765c8dd342SRobert Watson 	.mpo_check_vnode_revoke = mac_test_check_vnode_revoke,
26775c8dd342SRobert Watson 	.mpo_check_vnode_setacl = mac_test_check_vnode_setacl,
26785c8dd342SRobert Watson 	.mpo_check_vnode_setextattr = mac_test_check_vnode_setextattr,
26795c8dd342SRobert Watson 	.mpo_check_vnode_setflags = mac_test_check_vnode_setflags,
26805c8dd342SRobert Watson 	.mpo_check_vnode_setmode = mac_test_check_vnode_setmode,
26815c8dd342SRobert Watson 	.mpo_check_vnode_setowner = mac_test_check_vnode_setowner,
26825c8dd342SRobert Watson 	.mpo_check_vnode_setutimes = mac_test_check_vnode_setutimes,
26835c8dd342SRobert Watson 	.mpo_check_vnode_stat = mac_test_check_vnode_stat,
268445e0f3d6SRobert Watson 	.mpo_check_vnode_unlink = mac_test_check_vnode_unlink,
26855c8dd342SRobert Watson 	.mpo_check_vnode_write = mac_test_check_vnode_write,
2686d8a7b7a3SRobert Watson };
2687d8a7b7a3SRobert Watson 
268878183ac2SRobert Watson MAC_POLICY_SET(&mac_test_ops, mac_test, "TrustedBSD MAC/Test",
26899a1b0237SRobert Watson     MPC_LOADTIME_FLAG_UNLOADOK | MPC_LOADTIME_FLAG_LABELMBUFS, &test_slot);
2690