1a9643ea8Slogwang /*-
2a9643ea8Slogwang  * Copyright (c) 1999-2002, 2007-2011 Robert N. M. Watson
3a9643ea8Slogwang  * Copyright (c) 2001-2005 McAfee, Inc.
4a9643ea8Slogwang  * Copyright (c) 2006 SPARTA, Inc.
5a9643ea8Slogwang  * Copyright (c) 2008 Apple Inc.
6a9643ea8Slogwang  * All rights reserved.
7a9643ea8Slogwang  *
8a9643ea8Slogwang  * This software was developed by Robert Watson for the TrustedBSD Project.
9a9643ea8Slogwang  *
10a9643ea8Slogwang  * This software was developed for the FreeBSD Project in part by McAfee
11a9643ea8Slogwang  * Research, the Security Research Division of McAfee, Inc. under
12a9643ea8Slogwang  * DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the DARPA
13a9643ea8Slogwang  * CHATS research program.
14a9643ea8Slogwang  *
15a9643ea8Slogwang  * This software was enhanced by SPARTA ISSO under SPAWAR contract
16a9643ea8Slogwang  * N66001-04-C-6019 ("SEFOS").
17a9643ea8Slogwang  *
18a9643ea8Slogwang  * This software was developed at the University of Cambridge Computer
19a9643ea8Slogwang  * Laboratory with support from a grant from Google, Inc.
20a9643ea8Slogwang  *
21a9643ea8Slogwang  * Redistribution and use in source and binary forms, with or without
22a9643ea8Slogwang  * modification, are permitted provided that the following conditions
23a9643ea8Slogwang  * are met:
24a9643ea8Slogwang  * 1. Redistributions of source code must retain the above copyright
25a9643ea8Slogwang  *    notice, this list of conditions and the following disclaimer.
26a9643ea8Slogwang  * 2. Redistributions in binary form must reproduce the above copyright
27a9643ea8Slogwang  *    notice, this list of conditions and the following disclaimer in the
28a9643ea8Slogwang  *    documentation and/or other materials provided with the distribution.
29a9643ea8Slogwang  *
30a9643ea8Slogwang  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
31a9643ea8Slogwang  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
32a9643ea8Slogwang  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
33a9643ea8Slogwang  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
34a9643ea8Slogwang  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
35a9643ea8Slogwang  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
36a9643ea8Slogwang  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
37a9643ea8Slogwang  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
38a9643ea8Slogwang  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
39a9643ea8Slogwang  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
40a9643ea8Slogwang  * SUCH DAMAGE.
41a9643ea8Slogwang  *
42a9643ea8Slogwang  * $FreeBSD$
43a9643ea8Slogwang  */
44a9643ea8Slogwang 
45a9643ea8Slogwang /*
46a9643ea8Slogwang  * Developed by the TrustedBSD Project.
47a9643ea8Slogwang  *
48a9643ea8Slogwang  * MAC Test policy - tests MAC Framework labeling by assigning object class
49a9643ea8Slogwang  * magic numbers to each label and validates that each time an object label
50a9643ea8Slogwang  * is passed into the policy, it has a consistent object type, catching
51a9643ea8Slogwang  * incorrectly passed labels, labels passed after free, etc.
52a9643ea8Slogwang  */
53a9643ea8Slogwang 
54a9643ea8Slogwang #include <sys/param.h>
55a9643ea8Slogwang #include <sys/acl.h>
56a9643ea8Slogwang #include <sys/kdb.h>
57a9643ea8Slogwang #include <sys/kernel.h>
58a9643ea8Slogwang #include <sys/ksem.h>
59a9643ea8Slogwang #include <sys/malloc.h>
60a9643ea8Slogwang #include <sys/module.h>
61a9643ea8Slogwang #include <sys/mount.h>
62a9643ea8Slogwang #include <sys/msg.h>
63a9643ea8Slogwang #include <sys/proc.h>
64a9643ea8Slogwang #include <sys/vnode.h>
65a9643ea8Slogwang #include <sys/sem.h>
66a9643ea8Slogwang #include <sys/shm.h>
67a9643ea8Slogwang #include <sys/socket.h>
68a9643ea8Slogwang #include <sys/socketvar.h>
69a9643ea8Slogwang #include <sys/sx.h>
70a9643ea8Slogwang #include <sys/sysctl.h>
71a9643ea8Slogwang 
72a9643ea8Slogwang #include <fs/devfs/devfs.h>
73a9643ea8Slogwang 
74a9643ea8Slogwang #include <net/bpfdesc.h>
75a9643ea8Slogwang #include <net/if.h>
76a9643ea8Slogwang #include <net/if_types.h>
77a9643ea8Slogwang #include <net/if_var.h>
78a9643ea8Slogwang 
79a9643ea8Slogwang #include <security/mac/mac_policy.h>
80a9643ea8Slogwang 
81a9643ea8Slogwang SYSCTL_DECL(_security_mac);
82a9643ea8Slogwang 
83*22ce4affSfengbojiang static SYSCTL_NODE(_security_mac, OID_AUTO, test,
84*22ce4affSfengbojiang     CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
85a9643ea8Slogwang     "TrustedBSD mac_test policy controls");
86a9643ea8Slogwang 
87a9643ea8Slogwang #define	MAGIC_BPF	0xfe1ad1b6
88a9643ea8Slogwang #define	MAGIC_DEVFS	0x9ee79c32
89a9643ea8Slogwang #define	MAGIC_IFNET	0xc218b120
90a9643ea8Slogwang #define	MAGIC_INPCB	0x4440f7bb
91a9643ea8Slogwang #define	MAGIC_IP6Q	0x0870e1b7
92a9643ea8Slogwang #define	MAGIC_IPQ	0x206188ef
93a9643ea8Slogwang #define	MAGIC_MBUF	0xbbefa5bb
94a9643ea8Slogwang #define	MAGIC_MOUNT	0xc7c46e47
95a9643ea8Slogwang #define	MAGIC_SOCKET	0x9199c6cd
96a9643ea8Slogwang #define	MAGIC_SYNCACHE	0x7fb838a8
97a9643ea8Slogwang #define	MAGIC_SYSV_MSG	0x8bbba61e
98a9643ea8Slogwang #define	MAGIC_SYSV_MSQ	0xea672391
99a9643ea8Slogwang #define	MAGIC_SYSV_SEM	0x896e8a0b
100a9643ea8Slogwang #define	MAGIC_SYSV_SHM	0x76119ab0
101a9643ea8Slogwang #define	MAGIC_PIPE	0xdc6c9919
102a9643ea8Slogwang #define	MAGIC_POSIX_SEM	0x78ae980c
103a9643ea8Slogwang #define	MAGIC_POSIX_SHM	0x4e853fc9
104a9643ea8Slogwang #define	MAGIC_PROC	0x3b4be98f
105a9643ea8Slogwang #define	MAGIC_CRED	0x9a5a4987
106a9643ea8Slogwang #define	MAGIC_VNODE	0x1a67a45c
107a9643ea8Slogwang #define	MAGIC_FREE	0x849ba1fd
108a9643ea8Slogwang 
109a9643ea8Slogwang #define	SLOT(x)	mac_label_get((x), test_slot)
110a9643ea8Slogwang #define	SLOT_SET(x, v)	mac_label_set((x), test_slot, (v))
111a9643ea8Slogwang 
112a9643ea8Slogwang static int	test_slot;
113a9643ea8Slogwang SYSCTL_INT(_security_mac_test, OID_AUTO, slot, CTLFLAG_RD,
114a9643ea8Slogwang     &test_slot, 0, "Slot allocated by framework");
115a9643ea8Slogwang 
116*22ce4affSfengbojiang static SYSCTL_NODE(_security_mac_test, OID_AUTO, counter,
117*22ce4affSfengbojiang     CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
118a9643ea8Slogwang     "TrustedBSD mac_test counters controls");
119a9643ea8Slogwang 
120a9643ea8Slogwang #define	COUNTER_DECL(variable)						\
121a9643ea8Slogwang 	static int counter_##variable;					\
122a9643ea8Slogwang 	SYSCTL_INT(_security_mac_test_counter, OID_AUTO, variable,	\
123a9643ea8Slogwang 	CTLFLAG_RD, &counter_##variable, 0, #variable)
124a9643ea8Slogwang 
125a9643ea8Slogwang #define	COUNTER_INC(variable)	atomic_add_int(&counter_##variable, 1)
126a9643ea8Slogwang 
127a9643ea8Slogwang #ifdef KDB
128a9643ea8Slogwang #define	DEBUGGER(func, string)	kdb_enter(KDB_WHY_MAC, (string))
129a9643ea8Slogwang #else
130a9643ea8Slogwang #define	DEBUGGER(func, string)	printf("mac_test: %s: %s\n", (func), (string))
131a9643ea8Slogwang #endif
132a9643ea8Slogwang 
133a9643ea8Slogwang #define	LABEL_CHECK(label, magic) do {					\
134a9643ea8Slogwang 	if (label != NULL) {						\
135a9643ea8Slogwang 		KASSERT(SLOT(label) == magic ||	SLOT(label) == 0,	\
136a9643ea8Slogwang 		    ("%s: bad %s label", __func__, #magic));		\
137a9643ea8Slogwang 	}								\
138a9643ea8Slogwang } while (0)
139a9643ea8Slogwang 
140a9643ea8Slogwang #define	LABEL_DESTROY(label, magic) do {				\
141a9643ea8Slogwang 	if (SLOT(label) == magic || SLOT(label) == 0) {			\
142a9643ea8Slogwang 		SLOT_SET(label, MAGIC_FREE);				\
143a9643ea8Slogwang 	} else if (SLOT(label) == MAGIC_FREE) {				\
144a9643ea8Slogwang 		DEBUGGER("%s: dup destroy", __func__);			\
145a9643ea8Slogwang 	} else {							\
146a9643ea8Slogwang 		DEBUGGER("%s: corrupted label", __func__);		\
147a9643ea8Slogwang 	}								\
148a9643ea8Slogwang } while (0)
149a9643ea8Slogwang 
150a9643ea8Slogwang #define	LABEL_INIT(label, magic) do {					\
151a9643ea8Slogwang 	SLOT_SET(label, magic);						\
152a9643ea8Slogwang } while (0)
153a9643ea8Slogwang 
154a9643ea8Slogwang #define	LABEL_NOTFREE(label) do {					\
155a9643ea8Slogwang 	KASSERT(SLOT(label) != MAGIC_FREE,				\
156a9643ea8Slogwang 	    ("%s: destroyed label", __func__));				\
157a9643ea8Slogwang } while (0)
158a9643ea8Slogwang 
159a9643ea8Slogwang /*
160a9643ea8Slogwang  * Object-specific entry point implementations are sorted alphabetically by
161a9643ea8Slogwang  * object type name and then by operation.
162a9643ea8Slogwang  */
163a9643ea8Slogwang COUNTER_DECL(bpfdesc_check_receive);
164a9643ea8Slogwang static int
test_bpfdesc_check_receive(struct bpf_d * d,struct label * dlabel,struct ifnet * ifp,struct label * ifplabel)165a9643ea8Slogwang test_bpfdesc_check_receive(struct bpf_d *d, struct label *dlabel,
166a9643ea8Slogwang     struct ifnet *ifp, struct label *ifplabel)
167a9643ea8Slogwang {
168a9643ea8Slogwang 
169a9643ea8Slogwang 	LABEL_CHECK(dlabel, MAGIC_BPF);
170a9643ea8Slogwang 	LABEL_CHECK(ifplabel, MAGIC_IFNET);
171a9643ea8Slogwang 	COUNTER_INC(bpfdesc_check_receive);
172a9643ea8Slogwang 
173a9643ea8Slogwang 	return (0);
174a9643ea8Slogwang }
175a9643ea8Slogwang 
176a9643ea8Slogwang COUNTER_DECL(bpfdesc_create);
177a9643ea8Slogwang static void
test_bpfdesc_create(struct ucred * cred,struct bpf_d * d,struct label * dlabel)178a9643ea8Slogwang test_bpfdesc_create(struct ucred *cred, struct bpf_d *d,
179a9643ea8Slogwang     struct label *dlabel)
180a9643ea8Slogwang {
181a9643ea8Slogwang 
182a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
183a9643ea8Slogwang 	LABEL_CHECK(dlabel, MAGIC_BPF);
184a9643ea8Slogwang 	COUNTER_INC(bpfdesc_create);
185a9643ea8Slogwang }
186a9643ea8Slogwang 
187a9643ea8Slogwang COUNTER_DECL(bpfdesc_create_mbuf);
188a9643ea8Slogwang static void
test_bpfdesc_create_mbuf(struct bpf_d * d,struct label * dlabel,struct mbuf * m,struct label * mlabel)189a9643ea8Slogwang test_bpfdesc_create_mbuf(struct bpf_d *d, struct label *dlabel,
190a9643ea8Slogwang     struct mbuf *m, struct label *mlabel)
191a9643ea8Slogwang {
192a9643ea8Slogwang 
193a9643ea8Slogwang 	LABEL_CHECK(dlabel, MAGIC_BPF);
194a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
195a9643ea8Slogwang 	COUNTER_INC(bpfdesc_create_mbuf);
196a9643ea8Slogwang }
197a9643ea8Slogwang 
198a9643ea8Slogwang COUNTER_DECL(bpfdesc_destroy_label);
199a9643ea8Slogwang static void
test_bpfdesc_destroy_label(struct label * label)200a9643ea8Slogwang test_bpfdesc_destroy_label(struct label *label)
201a9643ea8Slogwang {
202a9643ea8Slogwang 
203a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_BPF);
204a9643ea8Slogwang 	COUNTER_INC(bpfdesc_destroy_label);
205a9643ea8Slogwang }
206a9643ea8Slogwang 
207a9643ea8Slogwang COUNTER_DECL(bpfdesc_init_label);
208a9643ea8Slogwang static void
test_bpfdesc_init_label(struct label * label)209a9643ea8Slogwang test_bpfdesc_init_label(struct label *label)
210a9643ea8Slogwang {
211a9643ea8Slogwang 
212a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_BPF);
213a9643ea8Slogwang 	COUNTER_INC(bpfdesc_init_label);
214a9643ea8Slogwang }
215a9643ea8Slogwang 
216a9643ea8Slogwang COUNTER_DECL(cred_check_relabel);
217a9643ea8Slogwang static int
test_cred_check_relabel(struct ucred * cred,struct label * newlabel)218a9643ea8Slogwang test_cred_check_relabel(struct ucred *cred, struct label *newlabel)
219a9643ea8Slogwang {
220a9643ea8Slogwang 
221a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
222a9643ea8Slogwang 	LABEL_CHECK(newlabel, MAGIC_CRED);
223a9643ea8Slogwang 	COUNTER_INC(cred_check_relabel);
224a9643ea8Slogwang 
225a9643ea8Slogwang 	return (0);
226a9643ea8Slogwang }
227a9643ea8Slogwang 
228a9643ea8Slogwang COUNTER_DECL(cred_check_setaudit);
229a9643ea8Slogwang static int
test_cred_check_setaudit(struct ucred * cred,struct auditinfo * ai)230a9643ea8Slogwang test_cred_check_setaudit(struct ucred *cred, struct auditinfo *ai)
231a9643ea8Slogwang {
232a9643ea8Slogwang 
233a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
234a9643ea8Slogwang 	COUNTER_INC(cred_check_setaudit);
235a9643ea8Slogwang 
236a9643ea8Slogwang 	return (0);
237a9643ea8Slogwang }
238a9643ea8Slogwang 
239a9643ea8Slogwang COUNTER_DECL(cred_check_setaudit_addr);
240a9643ea8Slogwang static int
test_cred_check_setaudit_addr(struct ucred * cred,struct auditinfo_addr * aia)241a9643ea8Slogwang test_cred_check_setaudit_addr(struct ucred *cred,
242a9643ea8Slogwang     struct auditinfo_addr *aia)
243a9643ea8Slogwang {
244a9643ea8Slogwang 
245a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
246a9643ea8Slogwang 	COUNTER_INC(cred_check_setaudit_addr);
247a9643ea8Slogwang 
248a9643ea8Slogwang 	return (0);
249a9643ea8Slogwang }
250a9643ea8Slogwang 
251a9643ea8Slogwang COUNTER_DECL(cred_check_setauid);
252a9643ea8Slogwang static int
test_cred_check_setauid(struct ucred * cred,uid_t auid)253a9643ea8Slogwang test_cred_check_setauid(struct ucred *cred, uid_t auid)
254a9643ea8Slogwang {
255a9643ea8Slogwang 
256a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
257a9643ea8Slogwang 	COUNTER_INC(cred_check_setauid);
258a9643ea8Slogwang 
259a9643ea8Slogwang 	return (0);
260a9643ea8Slogwang }
261a9643ea8Slogwang 
262a9643ea8Slogwang COUNTER_DECL(cred_check_setegid);
263a9643ea8Slogwang static int
test_cred_check_setegid(struct ucred * cred,gid_t egid)264a9643ea8Slogwang test_cred_check_setegid(struct ucred *cred, gid_t egid)
265a9643ea8Slogwang {
266a9643ea8Slogwang 
267a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
268a9643ea8Slogwang 	COUNTER_INC(cred_check_setegid);
269a9643ea8Slogwang 
270a9643ea8Slogwang 	return (0);
271a9643ea8Slogwang }
272a9643ea8Slogwang 
273a9643ea8Slogwang COUNTER_DECL(proc_check_euid);
274a9643ea8Slogwang static int
test_cred_check_seteuid(struct ucred * cred,uid_t euid)275a9643ea8Slogwang test_cred_check_seteuid(struct ucred *cred, uid_t euid)
276a9643ea8Slogwang {
277a9643ea8Slogwang 
278a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
279a9643ea8Slogwang 	COUNTER_INC(proc_check_euid);
280a9643ea8Slogwang 
281a9643ea8Slogwang 	return (0);
282a9643ea8Slogwang }
283a9643ea8Slogwang 
284a9643ea8Slogwang COUNTER_DECL(cred_check_setregid);
285a9643ea8Slogwang static int
test_cred_check_setregid(struct ucred * cred,gid_t rgid,gid_t egid)286a9643ea8Slogwang test_cred_check_setregid(struct ucred *cred, gid_t rgid, gid_t egid)
287a9643ea8Slogwang {
288a9643ea8Slogwang 
289a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
290a9643ea8Slogwang 	COUNTER_INC(cred_check_setregid);
291a9643ea8Slogwang 
292a9643ea8Slogwang 	return (0);
293a9643ea8Slogwang }
294a9643ea8Slogwang 
295a9643ea8Slogwang COUNTER_DECL(cred_check_setreuid);
296a9643ea8Slogwang static int
test_cred_check_setreuid(struct ucred * cred,uid_t ruid,uid_t euid)297a9643ea8Slogwang test_cred_check_setreuid(struct ucred *cred, uid_t ruid, uid_t euid)
298a9643ea8Slogwang {
299a9643ea8Slogwang 
300a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
301a9643ea8Slogwang 	COUNTER_INC(cred_check_setreuid);
302a9643ea8Slogwang 
303a9643ea8Slogwang 	return (0);
304a9643ea8Slogwang }
305a9643ea8Slogwang 
306a9643ea8Slogwang COUNTER_DECL(cred_check_setgid);
307a9643ea8Slogwang static int
test_cred_check_setgid(struct ucred * cred,gid_t gid)308a9643ea8Slogwang test_cred_check_setgid(struct ucred *cred, gid_t gid)
309a9643ea8Slogwang {
310a9643ea8Slogwang 
311a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
312a9643ea8Slogwang 	COUNTER_INC(cred_check_setgid);
313a9643ea8Slogwang 
314a9643ea8Slogwang 	return (0);
315a9643ea8Slogwang }
316a9643ea8Slogwang 
317a9643ea8Slogwang COUNTER_DECL(cred_check_setgroups);
318a9643ea8Slogwang static int
test_cred_check_setgroups(struct ucred * cred,int ngroups,gid_t * gidset)319a9643ea8Slogwang test_cred_check_setgroups(struct ucred *cred, int ngroups,
320a9643ea8Slogwang 	gid_t *gidset)
321a9643ea8Slogwang {
322a9643ea8Slogwang 
323a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
324a9643ea8Slogwang 	COUNTER_INC(cred_check_setgroups);
325a9643ea8Slogwang 
326a9643ea8Slogwang 	return (0);
327a9643ea8Slogwang }
328a9643ea8Slogwang 
329a9643ea8Slogwang COUNTER_DECL(cred_check_setresgid);
330a9643ea8Slogwang static int
test_cred_check_setresgid(struct ucred * cred,gid_t rgid,gid_t egid,gid_t sgid)331a9643ea8Slogwang test_cred_check_setresgid(struct ucred *cred, gid_t rgid, gid_t egid,
332a9643ea8Slogwang 	gid_t sgid)
333a9643ea8Slogwang {
334a9643ea8Slogwang 
335a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
336a9643ea8Slogwang 	COUNTER_INC(cred_check_setresgid);
337a9643ea8Slogwang 
338a9643ea8Slogwang 	return (0);
339a9643ea8Slogwang }
340a9643ea8Slogwang 
341a9643ea8Slogwang COUNTER_DECL(cred_check_setresuid);
342a9643ea8Slogwang static int
test_cred_check_setresuid(struct ucred * cred,uid_t ruid,uid_t euid,uid_t suid)343a9643ea8Slogwang test_cred_check_setresuid(struct ucred *cred, uid_t ruid, uid_t euid,
344a9643ea8Slogwang 	uid_t suid)
345a9643ea8Slogwang {
346a9643ea8Slogwang 
347a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
348a9643ea8Slogwang 	COUNTER_INC(cred_check_setresuid);
349a9643ea8Slogwang 
350a9643ea8Slogwang 	return (0);
351a9643ea8Slogwang }
352a9643ea8Slogwang 
353a9643ea8Slogwang COUNTER_DECL(cred_check_setuid);
354a9643ea8Slogwang static int
test_cred_check_setuid(struct ucred * cred,uid_t uid)355a9643ea8Slogwang test_cred_check_setuid(struct ucred *cred, uid_t uid)
356a9643ea8Slogwang {
357a9643ea8Slogwang 
358a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
359a9643ea8Slogwang 	COUNTER_INC(cred_check_setuid);
360a9643ea8Slogwang 
361a9643ea8Slogwang 	return (0);
362a9643ea8Slogwang }
363a9643ea8Slogwang 
364a9643ea8Slogwang COUNTER_DECL(cred_check_visible);
365a9643ea8Slogwang static int
test_cred_check_visible(struct ucred * u1,struct ucred * u2)366a9643ea8Slogwang test_cred_check_visible(struct ucred *u1, struct ucred *u2)
367a9643ea8Slogwang {
368a9643ea8Slogwang 
369a9643ea8Slogwang 	LABEL_CHECK(u1->cr_label, MAGIC_CRED);
370a9643ea8Slogwang 	LABEL_CHECK(u2->cr_label, MAGIC_CRED);
371a9643ea8Slogwang 	COUNTER_INC(cred_check_visible);
372a9643ea8Slogwang 
373a9643ea8Slogwang 	return (0);
374a9643ea8Slogwang }
375a9643ea8Slogwang 
376a9643ea8Slogwang COUNTER_DECL(cred_copy_label);
377a9643ea8Slogwang static void
test_cred_copy_label(struct label * src,struct label * dest)378a9643ea8Slogwang test_cred_copy_label(struct label *src, struct label *dest)
379a9643ea8Slogwang {
380a9643ea8Slogwang 
381a9643ea8Slogwang 	LABEL_CHECK(src, MAGIC_CRED);
382a9643ea8Slogwang 	LABEL_CHECK(dest, MAGIC_CRED);
383a9643ea8Slogwang 	COUNTER_INC(cred_copy_label);
384a9643ea8Slogwang }
385a9643ea8Slogwang 
386a9643ea8Slogwang COUNTER_DECL(cred_create_init);
387a9643ea8Slogwang static void
test_cred_create_init(struct ucred * cred)388a9643ea8Slogwang test_cred_create_init(struct ucred *cred)
389a9643ea8Slogwang {
390a9643ea8Slogwang 
391a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
392a9643ea8Slogwang 	COUNTER_INC(cred_create_init);
393a9643ea8Slogwang }
394a9643ea8Slogwang 
395a9643ea8Slogwang COUNTER_DECL(cred_create_swapper);
396a9643ea8Slogwang static void
test_cred_create_swapper(struct ucred * cred)397a9643ea8Slogwang test_cred_create_swapper(struct ucred *cred)
398a9643ea8Slogwang {
399a9643ea8Slogwang 
400a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
401a9643ea8Slogwang 	COUNTER_INC(cred_create_swapper);
402a9643ea8Slogwang }
403a9643ea8Slogwang 
404a9643ea8Slogwang COUNTER_DECL(cred_destroy_label);
405a9643ea8Slogwang static void
test_cred_destroy_label(struct label * label)406a9643ea8Slogwang test_cred_destroy_label(struct label *label)
407a9643ea8Slogwang {
408a9643ea8Slogwang 
409a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_CRED);
410a9643ea8Slogwang 	COUNTER_INC(cred_destroy_label);
411a9643ea8Slogwang }
412a9643ea8Slogwang 
413a9643ea8Slogwang COUNTER_DECL(cred_externalize_label);
414a9643ea8Slogwang static int
test_cred_externalize_label(struct label * label,char * element_name,struct sbuf * sb,int * claimed)415a9643ea8Slogwang test_cred_externalize_label(struct label *label, char *element_name,
416a9643ea8Slogwang     struct sbuf *sb, int *claimed)
417a9643ea8Slogwang {
418a9643ea8Slogwang 
419a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_CRED);
420a9643ea8Slogwang 	COUNTER_INC(cred_externalize_label);
421a9643ea8Slogwang 
422a9643ea8Slogwang 	return (0);
423a9643ea8Slogwang }
424a9643ea8Slogwang 
425a9643ea8Slogwang COUNTER_DECL(cred_init_label);
426a9643ea8Slogwang static void
test_cred_init_label(struct label * label)427a9643ea8Slogwang test_cred_init_label(struct label *label)
428a9643ea8Slogwang {
429a9643ea8Slogwang 
430a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_CRED);
431a9643ea8Slogwang 	COUNTER_INC(cred_init_label);
432a9643ea8Slogwang }
433a9643ea8Slogwang 
434a9643ea8Slogwang COUNTER_DECL(cred_internalize_label);
435a9643ea8Slogwang static int
test_cred_internalize_label(struct label * label,char * element_name,char * element_data,int * claimed)436a9643ea8Slogwang test_cred_internalize_label(struct label *label, char *element_name,
437a9643ea8Slogwang     char *element_data, int *claimed)
438a9643ea8Slogwang {
439a9643ea8Slogwang 
440a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_CRED);
441a9643ea8Slogwang 	COUNTER_INC(cred_internalize_label);
442a9643ea8Slogwang 
443a9643ea8Slogwang 	return (0);
444a9643ea8Slogwang }
445a9643ea8Slogwang 
446a9643ea8Slogwang COUNTER_DECL(cred_relabel);
447a9643ea8Slogwang static void
test_cred_relabel(struct ucred * cred,struct label * newlabel)448a9643ea8Slogwang test_cred_relabel(struct ucred *cred, struct label *newlabel)
449a9643ea8Slogwang {
450a9643ea8Slogwang 
451a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
452a9643ea8Slogwang 	LABEL_CHECK(newlabel, MAGIC_CRED);
453a9643ea8Slogwang 	COUNTER_INC(cred_relabel);
454a9643ea8Slogwang }
455a9643ea8Slogwang 
456a9643ea8Slogwang COUNTER_DECL(devfs_create_device);
457a9643ea8Slogwang static void
test_devfs_create_device(struct ucred * cred,struct mount * mp,struct cdev * dev,struct devfs_dirent * de,struct label * delabel)458a9643ea8Slogwang test_devfs_create_device(struct ucred *cred, struct mount *mp,
459a9643ea8Slogwang     struct cdev *dev, struct devfs_dirent *de, struct label *delabel)
460a9643ea8Slogwang {
461a9643ea8Slogwang 
462a9643ea8Slogwang 	if (cred != NULL)
463a9643ea8Slogwang 		LABEL_CHECK(cred->cr_label, MAGIC_CRED);
464a9643ea8Slogwang 	LABEL_CHECK(delabel, MAGIC_DEVFS);
465a9643ea8Slogwang 	COUNTER_INC(devfs_create_device);
466a9643ea8Slogwang }
467a9643ea8Slogwang 
468a9643ea8Slogwang COUNTER_DECL(devfs_create_directory);
469a9643ea8Slogwang static void
test_devfs_create_directory(struct mount * mp,char * dirname,int dirnamelen,struct devfs_dirent * de,struct label * delabel)470a9643ea8Slogwang test_devfs_create_directory(struct mount *mp, char *dirname,
471a9643ea8Slogwang     int dirnamelen, struct devfs_dirent *de, struct label *delabel)
472a9643ea8Slogwang {
473a9643ea8Slogwang 
474a9643ea8Slogwang 	LABEL_CHECK(delabel, MAGIC_DEVFS);
475a9643ea8Slogwang 	COUNTER_INC(devfs_create_directory);
476a9643ea8Slogwang }
477a9643ea8Slogwang 
478a9643ea8Slogwang COUNTER_DECL(devfs_create_symlink);
479a9643ea8Slogwang static void
test_devfs_create_symlink(struct ucred * cred,struct mount * mp,struct devfs_dirent * dd,struct label * ddlabel,struct devfs_dirent * de,struct label * delabel)480a9643ea8Slogwang test_devfs_create_symlink(struct ucred *cred, struct mount *mp,
481a9643ea8Slogwang     struct devfs_dirent *dd, struct label *ddlabel, struct devfs_dirent *de,
482a9643ea8Slogwang     struct label *delabel)
483a9643ea8Slogwang {
484a9643ea8Slogwang 
485a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
486a9643ea8Slogwang 	LABEL_CHECK(ddlabel, MAGIC_DEVFS);
487a9643ea8Slogwang 	LABEL_CHECK(delabel, MAGIC_DEVFS);
488a9643ea8Slogwang 	COUNTER_INC(devfs_create_symlink);
489a9643ea8Slogwang }
490a9643ea8Slogwang 
491a9643ea8Slogwang COUNTER_DECL(devfs_destroy_label);
492a9643ea8Slogwang static void
test_devfs_destroy_label(struct label * label)493a9643ea8Slogwang test_devfs_destroy_label(struct label *label)
494a9643ea8Slogwang {
495a9643ea8Slogwang 
496a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_DEVFS);
497a9643ea8Slogwang 	COUNTER_INC(devfs_destroy_label);
498a9643ea8Slogwang }
499a9643ea8Slogwang 
500a9643ea8Slogwang COUNTER_DECL(devfs_init_label);
501a9643ea8Slogwang static void
test_devfs_init_label(struct label * label)502a9643ea8Slogwang test_devfs_init_label(struct label *label)
503a9643ea8Slogwang {
504a9643ea8Slogwang 
505a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_DEVFS);
506a9643ea8Slogwang 	COUNTER_INC(devfs_init_label);
507a9643ea8Slogwang }
508a9643ea8Slogwang 
509a9643ea8Slogwang COUNTER_DECL(devfs_update);
510a9643ea8Slogwang static void
test_devfs_update(struct mount * mp,struct devfs_dirent * devfs_dirent,struct label * direntlabel,struct vnode * vp,struct label * vplabel)511a9643ea8Slogwang test_devfs_update(struct mount *mp, struct devfs_dirent *devfs_dirent,
512a9643ea8Slogwang     struct label *direntlabel, struct vnode *vp, struct label *vplabel)
513a9643ea8Slogwang {
514a9643ea8Slogwang 
515a9643ea8Slogwang 	LABEL_CHECK(direntlabel, MAGIC_DEVFS);
516a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
517a9643ea8Slogwang 	COUNTER_INC(devfs_update);
518a9643ea8Slogwang }
519a9643ea8Slogwang 
520a9643ea8Slogwang COUNTER_DECL(devfs_vnode_associate);
521a9643ea8Slogwang static void
test_devfs_vnode_associate(struct mount * mp,struct label * mplabel,struct devfs_dirent * de,struct label * delabel,struct vnode * vp,struct label * vplabel)522a9643ea8Slogwang test_devfs_vnode_associate(struct mount *mp, struct label *mplabel,
523a9643ea8Slogwang     struct devfs_dirent *de, struct label *delabel, struct vnode *vp,
524a9643ea8Slogwang     struct label *vplabel)
525a9643ea8Slogwang {
526a9643ea8Slogwang 
527a9643ea8Slogwang 	LABEL_CHECK(mplabel, MAGIC_MOUNT);
528a9643ea8Slogwang 	LABEL_CHECK(delabel, MAGIC_DEVFS);
529a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
530a9643ea8Slogwang 	COUNTER_INC(devfs_vnode_associate);
531a9643ea8Slogwang }
532a9643ea8Slogwang 
533a9643ea8Slogwang COUNTER_DECL(ifnet_check_relabel);
534a9643ea8Slogwang static int
test_ifnet_check_relabel(struct ucred * cred,struct ifnet * ifp,struct label * ifplabel,struct label * newlabel)535a9643ea8Slogwang test_ifnet_check_relabel(struct ucred *cred, struct ifnet *ifp,
536a9643ea8Slogwang     struct label *ifplabel, struct label *newlabel)
537a9643ea8Slogwang {
538a9643ea8Slogwang 
539a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
540a9643ea8Slogwang 	LABEL_CHECK(ifplabel, MAGIC_IFNET);
541a9643ea8Slogwang 	LABEL_CHECK(newlabel, MAGIC_IFNET);
542a9643ea8Slogwang 	COUNTER_INC(ifnet_check_relabel);
543a9643ea8Slogwang 
544a9643ea8Slogwang 	return (0);
545a9643ea8Slogwang }
546a9643ea8Slogwang 
547a9643ea8Slogwang COUNTER_DECL(ifnet_check_transmit);
548a9643ea8Slogwang static int
test_ifnet_check_transmit(struct ifnet * ifp,struct label * ifplabel,struct mbuf * m,struct label * mlabel)549a9643ea8Slogwang test_ifnet_check_transmit(struct ifnet *ifp, struct label *ifplabel,
550a9643ea8Slogwang     struct mbuf *m, struct label *mlabel)
551a9643ea8Slogwang {
552a9643ea8Slogwang 
553a9643ea8Slogwang 	LABEL_CHECK(ifplabel, MAGIC_IFNET);
554a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
555a9643ea8Slogwang 	COUNTER_INC(ifnet_check_transmit);
556a9643ea8Slogwang 
557a9643ea8Slogwang 	return (0);
558a9643ea8Slogwang }
559a9643ea8Slogwang 
560a9643ea8Slogwang COUNTER_DECL(ifnet_copy_label);
561a9643ea8Slogwang static void
test_ifnet_copy_label(struct label * src,struct label * dest)562a9643ea8Slogwang test_ifnet_copy_label(struct label *src, struct label *dest)
563a9643ea8Slogwang {
564a9643ea8Slogwang 
565a9643ea8Slogwang 	LABEL_CHECK(src, MAGIC_IFNET);
566a9643ea8Slogwang 	LABEL_CHECK(dest, MAGIC_IFNET);
567a9643ea8Slogwang 	COUNTER_INC(ifnet_copy_label);
568a9643ea8Slogwang }
569a9643ea8Slogwang 
570a9643ea8Slogwang COUNTER_DECL(ifnet_create);
571a9643ea8Slogwang static void
test_ifnet_create(struct ifnet * ifp,struct label * ifplabel)572a9643ea8Slogwang test_ifnet_create(struct ifnet *ifp, struct label *ifplabel)
573a9643ea8Slogwang {
574a9643ea8Slogwang 
575a9643ea8Slogwang 	LABEL_CHECK(ifplabel, MAGIC_IFNET);
576a9643ea8Slogwang 	COUNTER_INC(ifnet_create);
577a9643ea8Slogwang }
578a9643ea8Slogwang 
579a9643ea8Slogwang COUNTER_DECL(ifnet_create_mbuf);
580a9643ea8Slogwang static void
test_ifnet_create_mbuf(struct ifnet * ifp,struct label * ifplabel,struct mbuf * m,struct label * mlabel)581a9643ea8Slogwang test_ifnet_create_mbuf(struct ifnet *ifp, struct label *ifplabel,
582a9643ea8Slogwang     struct mbuf *m, struct label *mlabel)
583a9643ea8Slogwang {
584a9643ea8Slogwang 
585a9643ea8Slogwang 	LABEL_CHECK(ifplabel, MAGIC_IFNET);
586a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
587a9643ea8Slogwang 	COUNTER_INC(ifnet_create_mbuf);
588a9643ea8Slogwang }
589a9643ea8Slogwang 
590a9643ea8Slogwang COUNTER_DECL(ifnet_destroy_label);
591a9643ea8Slogwang static void
test_ifnet_destroy_label(struct label * label)592a9643ea8Slogwang test_ifnet_destroy_label(struct label *label)
593a9643ea8Slogwang {
594a9643ea8Slogwang 
595a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_IFNET);
596a9643ea8Slogwang 	COUNTER_INC(ifnet_destroy_label);
597a9643ea8Slogwang }
598a9643ea8Slogwang 
599a9643ea8Slogwang COUNTER_DECL(ifnet_externalize_label);
600a9643ea8Slogwang static int
test_ifnet_externalize_label(struct label * label,char * element_name,struct sbuf * sb,int * claimed)601a9643ea8Slogwang test_ifnet_externalize_label(struct label *label, char *element_name,
602a9643ea8Slogwang     struct sbuf *sb, int *claimed)
603a9643ea8Slogwang {
604a9643ea8Slogwang 
605a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_IFNET);
606a9643ea8Slogwang 	COUNTER_INC(ifnet_externalize_label);
607a9643ea8Slogwang 
608a9643ea8Slogwang 	return (0);
609a9643ea8Slogwang }
610a9643ea8Slogwang 
611a9643ea8Slogwang COUNTER_DECL(ifnet_init_label);
612a9643ea8Slogwang static void
test_ifnet_init_label(struct label * label)613a9643ea8Slogwang test_ifnet_init_label(struct label *label)
614a9643ea8Slogwang {
615a9643ea8Slogwang 
616a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_IFNET);
617a9643ea8Slogwang 	COUNTER_INC(ifnet_init_label);
618a9643ea8Slogwang }
619a9643ea8Slogwang 
620a9643ea8Slogwang COUNTER_DECL(ifnet_internalize_label);
621a9643ea8Slogwang static int
test_ifnet_internalize_label(struct label * label,char * element_name,char * element_data,int * claimed)622a9643ea8Slogwang test_ifnet_internalize_label(struct label *label, char *element_name,
623a9643ea8Slogwang     char *element_data, int *claimed)
624a9643ea8Slogwang {
625a9643ea8Slogwang 
626a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_IFNET);
627a9643ea8Slogwang 	COUNTER_INC(ifnet_internalize_label);
628a9643ea8Slogwang 
629a9643ea8Slogwang 	return (0);
630a9643ea8Slogwang }
631a9643ea8Slogwang 
632a9643ea8Slogwang COUNTER_DECL(ifnet_relabel);
633a9643ea8Slogwang static void
test_ifnet_relabel(struct ucred * cred,struct ifnet * ifp,struct label * ifplabel,struct label * newlabel)634a9643ea8Slogwang test_ifnet_relabel(struct ucred *cred, struct ifnet *ifp,
635a9643ea8Slogwang     struct label *ifplabel, struct label *newlabel)
636a9643ea8Slogwang {
637a9643ea8Slogwang 
638a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
639a9643ea8Slogwang 	LABEL_CHECK(ifplabel, MAGIC_IFNET);
640a9643ea8Slogwang 	LABEL_CHECK(newlabel, MAGIC_IFNET);
641a9643ea8Slogwang 	COUNTER_INC(ifnet_relabel);
642a9643ea8Slogwang }
643a9643ea8Slogwang 
644a9643ea8Slogwang COUNTER_DECL(inpcb_check_deliver);
645a9643ea8Slogwang static int
test_inpcb_check_deliver(struct inpcb * inp,struct label * inplabel,struct mbuf * m,struct label * mlabel)646a9643ea8Slogwang test_inpcb_check_deliver(struct inpcb *inp, struct label *inplabel,
647a9643ea8Slogwang     struct mbuf *m, struct label *mlabel)
648a9643ea8Slogwang {
649a9643ea8Slogwang 
650a9643ea8Slogwang 	LABEL_CHECK(inplabel, MAGIC_INPCB);
651a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
652a9643ea8Slogwang 	COUNTER_INC(inpcb_check_deliver);
653a9643ea8Slogwang 
654a9643ea8Slogwang 	return (0);
655a9643ea8Slogwang }
656a9643ea8Slogwang 
657a9643ea8Slogwang COUNTER_DECL(inpcb_check_visible);
658a9643ea8Slogwang static int
test_inpcb_check_visible(struct ucred * cred,struct inpcb * inp,struct label * inplabel)659a9643ea8Slogwang test_inpcb_check_visible(struct ucred *cred, struct inpcb *inp,
660a9643ea8Slogwang     struct label *inplabel)
661a9643ea8Slogwang {
662a9643ea8Slogwang 
663a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
664a9643ea8Slogwang 	LABEL_CHECK(inplabel, MAGIC_INPCB);
665a9643ea8Slogwang 	COUNTER_INC(inpcb_check_visible);
666a9643ea8Slogwang 
667a9643ea8Slogwang 	return (0);
668a9643ea8Slogwang }
669a9643ea8Slogwang 
670a9643ea8Slogwang COUNTER_DECL(inpcb_create);
671a9643ea8Slogwang static void
test_inpcb_create(struct socket * so,struct label * solabel,struct inpcb * inp,struct label * inplabel)672a9643ea8Slogwang test_inpcb_create(struct socket *so, struct label *solabel,
673a9643ea8Slogwang     struct inpcb *inp, struct label *inplabel)
674a9643ea8Slogwang {
675a9643ea8Slogwang 
676a9643ea8Slogwang 	SOCK_LOCK(so);
677a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
678a9643ea8Slogwang 	SOCK_UNLOCK(so);
679a9643ea8Slogwang 	LABEL_CHECK(inplabel, MAGIC_INPCB);
680a9643ea8Slogwang 	COUNTER_INC(inpcb_create);
681a9643ea8Slogwang }
682a9643ea8Slogwang 
683a9643ea8Slogwang COUNTER_DECL(inpcb_create_mbuf);
684a9643ea8Slogwang static void
test_inpcb_create_mbuf(struct inpcb * inp,struct label * inplabel,struct mbuf * m,struct label * mlabel)685a9643ea8Slogwang test_inpcb_create_mbuf(struct inpcb *inp, struct label *inplabel,
686a9643ea8Slogwang     struct mbuf *m, struct label *mlabel)
687a9643ea8Slogwang {
688a9643ea8Slogwang 
689a9643ea8Slogwang 	LABEL_CHECK(inplabel, MAGIC_INPCB);
690a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
691a9643ea8Slogwang 	COUNTER_INC(inpcb_create_mbuf);
692a9643ea8Slogwang }
693a9643ea8Slogwang 
694a9643ea8Slogwang COUNTER_DECL(inpcb_destroy_label);
695a9643ea8Slogwang static void
test_inpcb_destroy_label(struct label * label)696a9643ea8Slogwang test_inpcb_destroy_label(struct label *label)
697a9643ea8Slogwang {
698a9643ea8Slogwang 
699a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_INPCB);
700a9643ea8Slogwang 	COUNTER_INC(inpcb_destroy_label);
701a9643ea8Slogwang }
702a9643ea8Slogwang 
703a9643ea8Slogwang COUNTER_DECL(inpcb_init_label);
704a9643ea8Slogwang static int
test_inpcb_init_label(struct label * label,int flag)705a9643ea8Slogwang test_inpcb_init_label(struct label *label, int flag)
706a9643ea8Slogwang {
707a9643ea8Slogwang 
708a9643ea8Slogwang 	if (flag & M_WAITOK)
709a9643ea8Slogwang 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
710a9643ea8Slogwang 		    "test_inpcb_init_label() at %s:%d", __FILE__,
711a9643ea8Slogwang 		    __LINE__);
712a9643ea8Slogwang 
713a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_INPCB);
714a9643ea8Slogwang 	COUNTER_INC(inpcb_init_label);
715a9643ea8Slogwang 	return (0);
716a9643ea8Slogwang }
717a9643ea8Slogwang 
718a9643ea8Slogwang COUNTER_DECL(inpcb_sosetlabel);
719a9643ea8Slogwang static void
test_inpcb_sosetlabel(struct socket * so,struct label * solabel,struct inpcb * inp,struct label * inplabel)720a9643ea8Slogwang test_inpcb_sosetlabel(struct socket *so, struct label *solabel,
721a9643ea8Slogwang     struct inpcb *inp, struct label *inplabel)
722a9643ea8Slogwang {
723a9643ea8Slogwang 
724a9643ea8Slogwang 	SOCK_LOCK_ASSERT(so);
725a9643ea8Slogwang 
726a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
727a9643ea8Slogwang 	LABEL_CHECK(inplabel, MAGIC_INPCB);
728a9643ea8Slogwang 	COUNTER_INC(inpcb_sosetlabel);
729a9643ea8Slogwang }
730a9643ea8Slogwang 
731a9643ea8Slogwang COUNTER_DECL(ip6q_create);
732a9643ea8Slogwang static void
test_ip6q_create(struct mbuf * fragment,struct label * fragmentlabel,struct ip6q * q6,struct label * q6label)733a9643ea8Slogwang test_ip6q_create(struct mbuf *fragment, struct label *fragmentlabel,
734a9643ea8Slogwang     struct ip6q *q6, struct label *q6label)
735a9643ea8Slogwang {
736a9643ea8Slogwang 
737a9643ea8Slogwang 	LABEL_CHECK(fragmentlabel, MAGIC_MBUF);
738a9643ea8Slogwang 	LABEL_CHECK(q6label, MAGIC_IP6Q);
739a9643ea8Slogwang 	COUNTER_INC(ip6q_create);
740a9643ea8Slogwang }
741a9643ea8Slogwang 
742a9643ea8Slogwang COUNTER_DECL(ip6q_destroy_label);
743a9643ea8Slogwang static void
test_ip6q_destroy_label(struct label * label)744a9643ea8Slogwang test_ip6q_destroy_label(struct label *label)
745a9643ea8Slogwang {
746a9643ea8Slogwang 
747a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_IP6Q);
748a9643ea8Slogwang 	COUNTER_INC(ip6q_destroy_label);
749a9643ea8Slogwang }
750a9643ea8Slogwang 
751a9643ea8Slogwang COUNTER_DECL(ip6q_init_label);
752a9643ea8Slogwang static int
test_ip6q_init_label(struct label * label,int flag)753a9643ea8Slogwang test_ip6q_init_label(struct label *label, int flag)
754a9643ea8Slogwang {
755a9643ea8Slogwang 
756a9643ea8Slogwang 	if (flag & M_WAITOK)
757a9643ea8Slogwang 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
758a9643ea8Slogwang 		    "test_ip6q_init_label() at %s:%d", __FILE__,
759a9643ea8Slogwang 		    __LINE__);
760a9643ea8Slogwang 
761a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_IP6Q);
762a9643ea8Slogwang 	COUNTER_INC(ip6q_init_label);
763a9643ea8Slogwang 	return (0);
764a9643ea8Slogwang }
765a9643ea8Slogwang 
766a9643ea8Slogwang COUNTER_DECL(ip6q_match);
767a9643ea8Slogwang static int
test_ip6q_match(struct mbuf * fragment,struct label * fragmentlabel,struct ip6q * q6,struct label * q6label)768a9643ea8Slogwang test_ip6q_match(struct mbuf *fragment, struct label *fragmentlabel,
769a9643ea8Slogwang     struct ip6q *q6, struct label *q6label)
770a9643ea8Slogwang {
771a9643ea8Slogwang 
772a9643ea8Slogwang 	LABEL_CHECK(fragmentlabel, MAGIC_MBUF);
773a9643ea8Slogwang 	LABEL_CHECK(q6label, MAGIC_IP6Q);
774a9643ea8Slogwang 	COUNTER_INC(ip6q_match);
775a9643ea8Slogwang 
776a9643ea8Slogwang 	return (1);
777a9643ea8Slogwang }
778a9643ea8Slogwang 
779a9643ea8Slogwang COUNTER_DECL(ip6q_reassemble);
780a9643ea8Slogwang static void
test_ip6q_reassemble(struct ip6q * q6,struct label * q6label,struct mbuf * m,struct label * mlabel)781a9643ea8Slogwang test_ip6q_reassemble(struct ip6q *q6, struct label *q6label, struct mbuf *m,
782a9643ea8Slogwang    struct label *mlabel)
783a9643ea8Slogwang {
784a9643ea8Slogwang 
785a9643ea8Slogwang 	LABEL_CHECK(q6label, MAGIC_IP6Q);
786a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
787a9643ea8Slogwang 	COUNTER_INC(ip6q_reassemble);
788a9643ea8Slogwang }
789a9643ea8Slogwang 
790a9643ea8Slogwang COUNTER_DECL(ip6q_update);
791a9643ea8Slogwang static void
test_ip6q_update(struct mbuf * m,struct label * mlabel,struct ip6q * q6,struct label * q6label)792a9643ea8Slogwang test_ip6q_update(struct mbuf *m, struct label *mlabel, struct ip6q *q6,
793a9643ea8Slogwang     struct label *q6label)
794a9643ea8Slogwang {
795a9643ea8Slogwang 
796a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
797a9643ea8Slogwang 	LABEL_CHECK(q6label, MAGIC_IP6Q);
798a9643ea8Slogwang 	COUNTER_INC(ip6q_update);
799a9643ea8Slogwang }
800a9643ea8Slogwang 
801a9643ea8Slogwang COUNTER_DECL(ipq_create);
802a9643ea8Slogwang static void
test_ipq_create(struct mbuf * fragment,struct label * fragmentlabel,struct ipq * q,struct label * qlabel)803a9643ea8Slogwang test_ipq_create(struct mbuf *fragment, struct label *fragmentlabel,
804a9643ea8Slogwang     struct ipq *q, struct label *qlabel)
805a9643ea8Slogwang {
806a9643ea8Slogwang 
807a9643ea8Slogwang 	LABEL_CHECK(fragmentlabel, MAGIC_MBUF);
808a9643ea8Slogwang 	LABEL_CHECK(qlabel, MAGIC_IPQ);
809a9643ea8Slogwang 	COUNTER_INC(ipq_create);
810a9643ea8Slogwang }
811a9643ea8Slogwang 
812a9643ea8Slogwang COUNTER_DECL(ipq_destroy_label);
813a9643ea8Slogwang static void
test_ipq_destroy_label(struct label * label)814a9643ea8Slogwang test_ipq_destroy_label(struct label *label)
815a9643ea8Slogwang {
816a9643ea8Slogwang 
817a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_IPQ);
818a9643ea8Slogwang 	COUNTER_INC(ipq_destroy_label);
819a9643ea8Slogwang }
820a9643ea8Slogwang 
821a9643ea8Slogwang COUNTER_DECL(ipq_init_label);
822a9643ea8Slogwang static int
test_ipq_init_label(struct label * label,int flag)823a9643ea8Slogwang test_ipq_init_label(struct label *label, int flag)
824a9643ea8Slogwang {
825a9643ea8Slogwang 
826a9643ea8Slogwang 	if (flag & M_WAITOK)
827a9643ea8Slogwang 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
828a9643ea8Slogwang 		    "test_ipq_init_label() at %s:%d", __FILE__,
829a9643ea8Slogwang 		    __LINE__);
830a9643ea8Slogwang 
831a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_IPQ);
832a9643ea8Slogwang 	COUNTER_INC(ipq_init_label);
833a9643ea8Slogwang 	return (0);
834a9643ea8Slogwang }
835a9643ea8Slogwang 
836a9643ea8Slogwang COUNTER_DECL(ipq_match);
837a9643ea8Slogwang static int
test_ipq_match(struct mbuf * fragment,struct label * fragmentlabel,struct ipq * q,struct label * qlabel)838a9643ea8Slogwang test_ipq_match(struct mbuf *fragment, struct label *fragmentlabel,
839a9643ea8Slogwang     struct ipq *q, struct label *qlabel)
840a9643ea8Slogwang {
841a9643ea8Slogwang 
842a9643ea8Slogwang 	LABEL_CHECK(fragmentlabel, MAGIC_MBUF);
843a9643ea8Slogwang 	LABEL_CHECK(qlabel, MAGIC_IPQ);
844a9643ea8Slogwang 	COUNTER_INC(ipq_match);
845a9643ea8Slogwang 
846a9643ea8Slogwang 	return (1);
847a9643ea8Slogwang }
848a9643ea8Slogwang 
849a9643ea8Slogwang COUNTER_DECL(ipq_reassemble);
850a9643ea8Slogwang static void
test_ipq_reassemble(struct ipq * q,struct label * qlabel,struct mbuf * m,struct label * mlabel)851a9643ea8Slogwang test_ipq_reassemble(struct ipq *q, struct label *qlabel, struct mbuf *m,
852a9643ea8Slogwang    struct label *mlabel)
853a9643ea8Slogwang {
854a9643ea8Slogwang 
855a9643ea8Slogwang 	LABEL_CHECK(qlabel, MAGIC_IPQ);
856a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
857a9643ea8Slogwang 	COUNTER_INC(ipq_reassemble);
858a9643ea8Slogwang }
859a9643ea8Slogwang 
860a9643ea8Slogwang COUNTER_DECL(ipq_update);
861a9643ea8Slogwang static void
test_ipq_update(struct mbuf * m,struct label * mlabel,struct ipq * q,struct label * qlabel)862a9643ea8Slogwang test_ipq_update(struct mbuf *m, struct label *mlabel, struct ipq *q,
863a9643ea8Slogwang     struct label *qlabel)
864a9643ea8Slogwang {
865a9643ea8Slogwang 
866a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
867a9643ea8Slogwang 	LABEL_CHECK(qlabel, MAGIC_IPQ);
868a9643ea8Slogwang 	COUNTER_INC(ipq_update);
869a9643ea8Slogwang }
870a9643ea8Slogwang 
871a9643ea8Slogwang COUNTER_DECL(kenv_check_dump);
872a9643ea8Slogwang static int
test_kenv_check_dump(struct ucred * cred)873a9643ea8Slogwang test_kenv_check_dump(struct ucred *cred)
874a9643ea8Slogwang {
875a9643ea8Slogwang 
876a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
877a9643ea8Slogwang 	COUNTER_INC(kenv_check_dump);
878a9643ea8Slogwang 
879a9643ea8Slogwang 	return (0);
880a9643ea8Slogwang }
881a9643ea8Slogwang 
882a9643ea8Slogwang COUNTER_DECL(kenv_check_get);
883a9643ea8Slogwang static int
test_kenv_check_get(struct ucred * cred,char * name)884a9643ea8Slogwang test_kenv_check_get(struct ucred *cred, char *name)
885a9643ea8Slogwang {
886a9643ea8Slogwang 
887a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
888a9643ea8Slogwang 	COUNTER_INC(kenv_check_get);
889a9643ea8Slogwang 
890a9643ea8Slogwang 	return (0);
891a9643ea8Slogwang }
892a9643ea8Slogwang 
893a9643ea8Slogwang COUNTER_DECL(kenv_check_set);
894a9643ea8Slogwang static int
test_kenv_check_set(struct ucred * cred,char * name,char * value)895a9643ea8Slogwang test_kenv_check_set(struct ucred *cred, char *name, char *value)
896a9643ea8Slogwang {
897a9643ea8Slogwang 
898a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
899a9643ea8Slogwang 	COUNTER_INC(kenv_check_set);
900a9643ea8Slogwang 
901a9643ea8Slogwang 	return (0);
902a9643ea8Slogwang }
903a9643ea8Slogwang 
904a9643ea8Slogwang COUNTER_DECL(kenv_check_unset);
905a9643ea8Slogwang static int
test_kenv_check_unset(struct ucred * cred,char * name)906a9643ea8Slogwang test_kenv_check_unset(struct ucred *cred, char *name)
907a9643ea8Slogwang {
908a9643ea8Slogwang 
909a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
910a9643ea8Slogwang 	COUNTER_INC(kenv_check_unset);
911a9643ea8Slogwang 
912a9643ea8Slogwang 	return (0);
913a9643ea8Slogwang }
914a9643ea8Slogwang 
915a9643ea8Slogwang COUNTER_DECL(kld_check_load);
916a9643ea8Slogwang static int
test_kld_check_load(struct ucred * cred,struct vnode * vp,struct label * label)917a9643ea8Slogwang test_kld_check_load(struct ucred *cred, struct vnode *vp,
918a9643ea8Slogwang     struct label *label)
919a9643ea8Slogwang {
920a9643ea8Slogwang 
921a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
922a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_VNODE);
923a9643ea8Slogwang 	COUNTER_INC(kld_check_load);
924a9643ea8Slogwang 
925a9643ea8Slogwang 	return (0);
926a9643ea8Slogwang }
927a9643ea8Slogwang 
928a9643ea8Slogwang COUNTER_DECL(kld_check_stat);
929a9643ea8Slogwang static int
test_kld_check_stat(struct ucred * cred)930a9643ea8Slogwang test_kld_check_stat(struct ucred *cred)
931a9643ea8Slogwang {
932a9643ea8Slogwang 
933a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
934a9643ea8Slogwang 	COUNTER_INC(kld_check_stat);
935a9643ea8Slogwang 
936a9643ea8Slogwang 	return (0);
937a9643ea8Slogwang }
938a9643ea8Slogwang 
939a9643ea8Slogwang COUNTER_DECL(mbuf_copy_label);
940a9643ea8Slogwang static void
test_mbuf_copy_label(struct label * src,struct label * dest)941a9643ea8Slogwang test_mbuf_copy_label(struct label *src, struct label *dest)
942a9643ea8Slogwang {
943a9643ea8Slogwang 
944a9643ea8Slogwang 	LABEL_CHECK(src, MAGIC_MBUF);
945a9643ea8Slogwang 	LABEL_CHECK(dest, MAGIC_MBUF);
946a9643ea8Slogwang 	COUNTER_INC(mbuf_copy_label);
947a9643ea8Slogwang }
948a9643ea8Slogwang 
949a9643ea8Slogwang COUNTER_DECL(mbuf_destroy_label);
950a9643ea8Slogwang static void
test_mbuf_destroy_label(struct label * label)951a9643ea8Slogwang test_mbuf_destroy_label(struct label *label)
952a9643ea8Slogwang {
953a9643ea8Slogwang 
954a9643ea8Slogwang 	/*
955a9643ea8Slogwang 	 * If we're loaded dynamically, there may be mbufs in flight that
956a9643ea8Slogwang 	 * didn't have label storage allocated for them.  Handle this
957a9643ea8Slogwang 	 * gracefully.
958a9643ea8Slogwang 	 */
959a9643ea8Slogwang 	if (label == NULL)
960a9643ea8Slogwang 		return;
961a9643ea8Slogwang 
962a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_MBUF);
963a9643ea8Slogwang 	COUNTER_INC(mbuf_destroy_label);
964a9643ea8Slogwang }
965a9643ea8Slogwang 
966a9643ea8Slogwang COUNTER_DECL(mbuf_init_label);
967a9643ea8Slogwang static int
test_mbuf_init_label(struct label * label,int flag)968a9643ea8Slogwang test_mbuf_init_label(struct label *label, int flag)
969a9643ea8Slogwang {
970a9643ea8Slogwang 
971a9643ea8Slogwang 	if (flag & M_WAITOK)
972a9643ea8Slogwang 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
973a9643ea8Slogwang 		    "test_mbuf_init_label() at %s:%d", __FILE__,
974a9643ea8Slogwang 		    __LINE__);
975a9643ea8Slogwang 
976a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_MBUF);
977a9643ea8Slogwang 	COUNTER_INC(mbuf_init_label);
978a9643ea8Slogwang 	return (0);
979a9643ea8Slogwang }
980a9643ea8Slogwang 
981a9643ea8Slogwang COUNTER_DECL(mount_check_stat);
982a9643ea8Slogwang static int
test_mount_check_stat(struct ucred * cred,struct mount * mp,struct label * mplabel)983a9643ea8Slogwang test_mount_check_stat(struct ucred *cred, struct mount *mp,
984a9643ea8Slogwang     struct label *mplabel)
985a9643ea8Slogwang {
986a9643ea8Slogwang 
987a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
988a9643ea8Slogwang 	LABEL_CHECK(mplabel, MAGIC_MOUNT);
989a9643ea8Slogwang 	COUNTER_INC(mount_check_stat);
990a9643ea8Slogwang 
991a9643ea8Slogwang 	return (0);
992a9643ea8Slogwang }
993a9643ea8Slogwang 
994a9643ea8Slogwang COUNTER_DECL(mount_create);
995a9643ea8Slogwang static void
test_mount_create(struct ucred * cred,struct mount * mp,struct label * mplabel)996a9643ea8Slogwang test_mount_create(struct ucred *cred, struct mount *mp,
997a9643ea8Slogwang     struct label *mplabel)
998a9643ea8Slogwang {
999a9643ea8Slogwang 
1000a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1001a9643ea8Slogwang 	LABEL_CHECK(mplabel, MAGIC_MOUNT);
1002a9643ea8Slogwang 	COUNTER_INC(mount_create);
1003a9643ea8Slogwang }
1004a9643ea8Slogwang 
1005a9643ea8Slogwang COUNTER_DECL(mount_destroy_label);
1006a9643ea8Slogwang static void
test_mount_destroy_label(struct label * label)1007a9643ea8Slogwang test_mount_destroy_label(struct label *label)
1008a9643ea8Slogwang {
1009a9643ea8Slogwang 
1010a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_MOUNT);
1011a9643ea8Slogwang 	COUNTER_INC(mount_destroy_label);
1012a9643ea8Slogwang }
1013a9643ea8Slogwang 
1014a9643ea8Slogwang COUNTER_DECL(mount_init_label);
1015a9643ea8Slogwang static void
test_mount_init_label(struct label * label)1016a9643ea8Slogwang test_mount_init_label(struct label *label)
1017a9643ea8Slogwang {
1018a9643ea8Slogwang 
1019a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_MOUNT);
1020a9643ea8Slogwang 	COUNTER_INC(mount_init_label);
1021a9643ea8Slogwang }
1022a9643ea8Slogwang 
1023a9643ea8Slogwang COUNTER_DECL(netinet_arp_send);
1024a9643ea8Slogwang static void
test_netinet_arp_send(struct ifnet * ifp,struct label * ifplabel,struct mbuf * m,struct label * mlabel)1025a9643ea8Slogwang test_netinet_arp_send(struct ifnet *ifp, struct label *ifplabel,
1026a9643ea8Slogwang     struct mbuf *m, struct label *mlabel)
1027a9643ea8Slogwang {
1028a9643ea8Slogwang 
1029a9643ea8Slogwang 	LABEL_CHECK(ifplabel, MAGIC_IFNET);
1030a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1031a9643ea8Slogwang 	COUNTER_INC(netinet_arp_send);
1032a9643ea8Slogwang }
1033a9643ea8Slogwang 
1034a9643ea8Slogwang COUNTER_DECL(netinet_fragment);
1035a9643ea8Slogwang static void
test_netinet_fragment(struct mbuf * m,struct label * mlabel,struct mbuf * frag,struct label * fraglabel)1036a9643ea8Slogwang test_netinet_fragment(struct mbuf *m, struct label *mlabel,
1037a9643ea8Slogwang     struct mbuf *frag, struct label *fraglabel)
1038a9643ea8Slogwang {
1039a9643ea8Slogwang 
1040a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1041a9643ea8Slogwang 	LABEL_CHECK(fraglabel, MAGIC_MBUF);
1042a9643ea8Slogwang 	COUNTER_INC(netinet_fragment);
1043a9643ea8Slogwang }
1044a9643ea8Slogwang 
1045a9643ea8Slogwang COUNTER_DECL(netinet_icmp_reply);
1046a9643ea8Slogwang static void
test_netinet_icmp_reply(struct mbuf * mrecv,struct label * mrecvlabel,struct mbuf * msend,struct label * msendlabel)1047a9643ea8Slogwang test_netinet_icmp_reply(struct mbuf *mrecv, struct label *mrecvlabel,
1048a9643ea8Slogwang     struct mbuf *msend, struct label *msendlabel)
1049a9643ea8Slogwang {
1050a9643ea8Slogwang 
1051a9643ea8Slogwang 	LABEL_CHECK(mrecvlabel, MAGIC_MBUF);
1052a9643ea8Slogwang 	LABEL_CHECK(msendlabel, MAGIC_MBUF);
1053a9643ea8Slogwang 	COUNTER_INC(netinet_icmp_reply);
1054a9643ea8Slogwang }
1055a9643ea8Slogwang 
1056a9643ea8Slogwang COUNTER_DECL(netinet_icmp_replyinplace);
1057a9643ea8Slogwang static void
test_netinet_icmp_replyinplace(struct mbuf * m,struct label * mlabel)1058a9643ea8Slogwang test_netinet_icmp_replyinplace(struct mbuf *m, struct label *mlabel)
1059a9643ea8Slogwang {
1060a9643ea8Slogwang 
1061a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1062a9643ea8Slogwang 	COUNTER_INC(netinet_icmp_replyinplace);
1063a9643ea8Slogwang }
1064a9643ea8Slogwang 
1065a9643ea8Slogwang COUNTER_DECL(netinet_igmp_send);
1066a9643ea8Slogwang static void
test_netinet_igmp_send(struct ifnet * ifp,struct label * ifplabel,struct mbuf * m,struct label * mlabel)1067a9643ea8Slogwang test_netinet_igmp_send(struct ifnet *ifp, struct label *ifplabel,
1068a9643ea8Slogwang     struct mbuf *m, struct label *mlabel)
1069a9643ea8Slogwang {
1070a9643ea8Slogwang 
1071a9643ea8Slogwang 	LABEL_CHECK(ifplabel, MAGIC_IFNET);
1072a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1073a9643ea8Slogwang 	COUNTER_INC(netinet_igmp_send);
1074a9643ea8Slogwang }
1075a9643ea8Slogwang 
1076a9643ea8Slogwang COUNTER_DECL(netinet_tcp_reply);
1077a9643ea8Slogwang static void
test_netinet_tcp_reply(struct mbuf * m,struct label * mlabel)1078a9643ea8Slogwang test_netinet_tcp_reply(struct mbuf *m, struct label *mlabel)
1079a9643ea8Slogwang {
1080a9643ea8Slogwang 
1081a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1082a9643ea8Slogwang 	COUNTER_INC(netinet_tcp_reply);
1083a9643ea8Slogwang }
1084a9643ea8Slogwang 
1085a9643ea8Slogwang COUNTER_DECL(netinet6_nd6_send);
1086a9643ea8Slogwang static void
test_netinet6_nd6_send(struct ifnet * ifp,struct label * ifplabel,struct mbuf * m,struct label * mlabel)1087a9643ea8Slogwang test_netinet6_nd6_send(struct ifnet *ifp, struct label *ifplabel,
1088a9643ea8Slogwang     struct mbuf *m, struct label *mlabel)
1089a9643ea8Slogwang {
1090a9643ea8Slogwang 
1091a9643ea8Slogwang 	LABEL_CHECK(ifplabel, MAGIC_IFNET);
1092a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1093a9643ea8Slogwang 	COUNTER_INC(netinet6_nd6_send);
1094a9643ea8Slogwang }
1095a9643ea8Slogwang 
1096a9643ea8Slogwang COUNTER_DECL(pipe_check_ioctl);
1097a9643ea8Slogwang static int
test_pipe_check_ioctl(struct ucred * cred,struct pipepair * pp,struct label * pplabel,unsigned long cmd,void * data)1098a9643ea8Slogwang test_pipe_check_ioctl(struct ucred *cred, struct pipepair *pp,
1099a9643ea8Slogwang     struct label *pplabel, unsigned long cmd, void /* caddr_t */ *data)
1100a9643ea8Slogwang {
1101a9643ea8Slogwang 
1102a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1103a9643ea8Slogwang 	LABEL_CHECK(pplabel, MAGIC_PIPE);
1104a9643ea8Slogwang 	COUNTER_INC(pipe_check_ioctl);
1105a9643ea8Slogwang 
1106a9643ea8Slogwang 	return (0);
1107a9643ea8Slogwang }
1108a9643ea8Slogwang 
1109a9643ea8Slogwang COUNTER_DECL(pipe_check_poll);
1110a9643ea8Slogwang static int
test_pipe_check_poll(struct ucred * cred,struct pipepair * pp,struct label * pplabel)1111a9643ea8Slogwang test_pipe_check_poll(struct ucred *cred, struct pipepair *pp,
1112a9643ea8Slogwang     struct label *pplabel)
1113a9643ea8Slogwang {
1114a9643ea8Slogwang 
1115a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1116a9643ea8Slogwang 	LABEL_CHECK(pplabel, MAGIC_PIPE);
1117a9643ea8Slogwang 	COUNTER_INC(pipe_check_poll);
1118a9643ea8Slogwang 
1119a9643ea8Slogwang 	return (0);
1120a9643ea8Slogwang }
1121a9643ea8Slogwang 
1122a9643ea8Slogwang COUNTER_DECL(pipe_check_read);
1123a9643ea8Slogwang static int
test_pipe_check_read(struct ucred * cred,struct pipepair * pp,struct label * pplabel)1124a9643ea8Slogwang test_pipe_check_read(struct ucred *cred, struct pipepair *pp,
1125a9643ea8Slogwang     struct label *pplabel)
1126a9643ea8Slogwang {
1127a9643ea8Slogwang 
1128a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1129a9643ea8Slogwang 	LABEL_CHECK(pplabel, MAGIC_PIPE);
1130a9643ea8Slogwang 	COUNTER_INC(pipe_check_read);
1131a9643ea8Slogwang 
1132a9643ea8Slogwang 	return (0);
1133a9643ea8Slogwang }
1134a9643ea8Slogwang 
1135a9643ea8Slogwang COUNTER_DECL(pipe_check_relabel);
1136a9643ea8Slogwang static int
test_pipe_check_relabel(struct ucred * cred,struct pipepair * pp,struct label * pplabel,struct label * newlabel)1137a9643ea8Slogwang test_pipe_check_relabel(struct ucred *cred, struct pipepair *pp,
1138a9643ea8Slogwang     struct label *pplabel, struct label *newlabel)
1139a9643ea8Slogwang {
1140a9643ea8Slogwang 
1141a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1142a9643ea8Slogwang 	LABEL_CHECK(pplabel, MAGIC_PIPE);
1143a9643ea8Slogwang 	LABEL_CHECK(newlabel, MAGIC_PIPE);
1144a9643ea8Slogwang 	COUNTER_INC(pipe_check_relabel);
1145a9643ea8Slogwang 
1146a9643ea8Slogwang 	return (0);
1147a9643ea8Slogwang }
1148a9643ea8Slogwang 
1149a9643ea8Slogwang COUNTER_DECL(pipe_check_stat);
1150a9643ea8Slogwang static int
test_pipe_check_stat(struct ucred * cred,struct pipepair * pp,struct label * pplabel)1151a9643ea8Slogwang test_pipe_check_stat(struct ucred *cred, struct pipepair *pp,
1152a9643ea8Slogwang     struct label *pplabel)
1153a9643ea8Slogwang {
1154a9643ea8Slogwang 
1155a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1156a9643ea8Slogwang 	LABEL_CHECK(pplabel, MAGIC_PIPE);
1157a9643ea8Slogwang 	COUNTER_INC(pipe_check_stat);
1158a9643ea8Slogwang 
1159a9643ea8Slogwang 	return (0);
1160a9643ea8Slogwang }
1161a9643ea8Slogwang 
1162a9643ea8Slogwang COUNTER_DECL(pipe_check_write);
1163a9643ea8Slogwang static int
test_pipe_check_write(struct ucred * cred,struct pipepair * pp,struct label * pplabel)1164a9643ea8Slogwang test_pipe_check_write(struct ucred *cred, struct pipepair *pp,
1165a9643ea8Slogwang     struct label *pplabel)
1166a9643ea8Slogwang {
1167a9643ea8Slogwang 
1168a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1169a9643ea8Slogwang 	LABEL_CHECK(pplabel, MAGIC_PIPE);
1170a9643ea8Slogwang 	COUNTER_INC(pipe_check_write);
1171a9643ea8Slogwang 
1172a9643ea8Slogwang 	return (0);
1173a9643ea8Slogwang }
1174a9643ea8Slogwang 
1175a9643ea8Slogwang COUNTER_DECL(pipe_copy_label);
1176a9643ea8Slogwang static void
test_pipe_copy_label(struct label * src,struct label * dest)1177a9643ea8Slogwang test_pipe_copy_label(struct label *src, struct label *dest)
1178a9643ea8Slogwang {
1179a9643ea8Slogwang 
1180a9643ea8Slogwang 	LABEL_CHECK(src, MAGIC_PIPE);
1181a9643ea8Slogwang 	LABEL_CHECK(dest, MAGIC_PIPE);
1182a9643ea8Slogwang 	COUNTER_INC(pipe_copy_label);
1183a9643ea8Slogwang }
1184a9643ea8Slogwang 
1185a9643ea8Slogwang COUNTER_DECL(pipe_create);
1186a9643ea8Slogwang static void
test_pipe_create(struct ucred * cred,struct pipepair * pp,struct label * pplabel)1187a9643ea8Slogwang test_pipe_create(struct ucred *cred, struct pipepair *pp,
1188a9643ea8Slogwang    struct label *pplabel)
1189a9643ea8Slogwang {
1190a9643ea8Slogwang 
1191a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1192a9643ea8Slogwang 	LABEL_CHECK(pplabel, MAGIC_PIPE);
1193a9643ea8Slogwang 	COUNTER_INC(pipe_create);
1194a9643ea8Slogwang }
1195a9643ea8Slogwang 
1196a9643ea8Slogwang COUNTER_DECL(pipe_destroy_label);
1197a9643ea8Slogwang static void
test_pipe_destroy_label(struct label * label)1198a9643ea8Slogwang test_pipe_destroy_label(struct label *label)
1199a9643ea8Slogwang {
1200a9643ea8Slogwang 
1201a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_PIPE);
1202a9643ea8Slogwang 	COUNTER_INC(pipe_destroy_label);
1203a9643ea8Slogwang }
1204a9643ea8Slogwang 
1205a9643ea8Slogwang COUNTER_DECL(pipe_externalize_label);
1206a9643ea8Slogwang static int
test_pipe_externalize_label(struct label * label,char * element_name,struct sbuf * sb,int * claimed)1207a9643ea8Slogwang test_pipe_externalize_label(struct label *label, char *element_name,
1208a9643ea8Slogwang     struct sbuf *sb, int *claimed)
1209a9643ea8Slogwang {
1210a9643ea8Slogwang 
1211a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_PIPE);
1212a9643ea8Slogwang 	COUNTER_INC(pipe_externalize_label);
1213a9643ea8Slogwang 
1214a9643ea8Slogwang 	return (0);
1215a9643ea8Slogwang }
1216a9643ea8Slogwang 
1217a9643ea8Slogwang COUNTER_DECL(pipe_init_label);
1218a9643ea8Slogwang static void
test_pipe_init_label(struct label * label)1219a9643ea8Slogwang test_pipe_init_label(struct label *label)
1220a9643ea8Slogwang {
1221a9643ea8Slogwang 
1222a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_PIPE);
1223a9643ea8Slogwang 	COUNTER_INC(pipe_init_label);
1224a9643ea8Slogwang }
1225a9643ea8Slogwang 
1226a9643ea8Slogwang COUNTER_DECL(pipe_internalize_label);
1227a9643ea8Slogwang static int
test_pipe_internalize_label(struct label * label,char * element_name,char * element_data,int * claimed)1228a9643ea8Slogwang test_pipe_internalize_label(struct label *label, char *element_name,
1229a9643ea8Slogwang     char *element_data, int *claimed)
1230a9643ea8Slogwang {
1231a9643ea8Slogwang 
1232a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_PIPE);
1233a9643ea8Slogwang 	COUNTER_INC(pipe_internalize_label);
1234a9643ea8Slogwang 
1235a9643ea8Slogwang 	return (0);
1236a9643ea8Slogwang }
1237a9643ea8Slogwang 
1238a9643ea8Slogwang COUNTER_DECL(pipe_relabel);
1239a9643ea8Slogwang static void
test_pipe_relabel(struct ucred * cred,struct pipepair * pp,struct label * pplabel,struct label * newlabel)1240a9643ea8Slogwang test_pipe_relabel(struct ucred *cred, struct pipepair *pp,
1241a9643ea8Slogwang     struct label *pplabel, struct label *newlabel)
1242a9643ea8Slogwang {
1243a9643ea8Slogwang 
1244a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1245a9643ea8Slogwang 	LABEL_CHECK(pplabel, MAGIC_PIPE);
1246a9643ea8Slogwang 	LABEL_CHECK(newlabel, MAGIC_PIPE);
1247a9643ea8Slogwang 	COUNTER_INC(pipe_relabel);
1248a9643ea8Slogwang }
1249a9643ea8Slogwang 
1250a9643ea8Slogwang COUNTER_DECL(posixsem_check_getvalue);
1251a9643ea8Slogwang static int
test_posixsem_check_getvalue(struct ucred * active_cred,struct ucred * file_cred,struct ksem * ks,struct label * kslabel)1252a9643ea8Slogwang test_posixsem_check_getvalue(struct ucred *active_cred, struct ucred *file_cred,
1253a9643ea8Slogwang     struct ksem *ks, struct label *kslabel)
1254a9643ea8Slogwang {
1255a9643ea8Slogwang 
1256a9643ea8Slogwang 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
1257a9643ea8Slogwang 	LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
1258a9643ea8Slogwang 	LABEL_CHECK(kslabel, MAGIC_POSIX_SEM);
1259a9643ea8Slogwang 	COUNTER_INC(posixsem_check_getvalue);
1260a9643ea8Slogwang 
1261a9643ea8Slogwang 	return (0);
1262a9643ea8Slogwang }
1263a9643ea8Slogwang 
1264a9643ea8Slogwang COUNTER_DECL(posixsem_check_open);
1265a9643ea8Slogwang static int
test_posixsem_check_open(struct ucred * cred,struct ksem * ks,struct label * kslabel)1266a9643ea8Slogwang test_posixsem_check_open(struct ucred *cred, struct ksem *ks,
1267a9643ea8Slogwang     struct label *kslabel)
1268a9643ea8Slogwang {
1269a9643ea8Slogwang 
1270a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1271a9643ea8Slogwang 	LABEL_CHECK(kslabel, MAGIC_POSIX_SEM);
1272a9643ea8Slogwang 	COUNTER_INC(posixsem_check_open);
1273a9643ea8Slogwang 
1274a9643ea8Slogwang 	return (0);
1275a9643ea8Slogwang }
1276a9643ea8Slogwang 
1277a9643ea8Slogwang COUNTER_DECL(posixsem_check_post);
1278a9643ea8Slogwang static int
test_posixsem_check_post(struct ucred * active_cred,struct ucred * file_cred,struct ksem * ks,struct label * kslabel)1279a9643ea8Slogwang test_posixsem_check_post(struct ucred *active_cred, struct ucred *file_cred,
1280a9643ea8Slogwang     struct ksem *ks, struct label *kslabel)
1281a9643ea8Slogwang {
1282a9643ea8Slogwang 
1283a9643ea8Slogwang 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
1284a9643ea8Slogwang 	LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
1285a9643ea8Slogwang 	LABEL_CHECK(kslabel, MAGIC_POSIX_SEM);
1286a9643ea8Slogwang 	COUNTER_INC(posixsem_check_post);
1287a9643ea8Slogwang 
1288a9643ea8Slogwang 	return (0);
1289a9643ea8Slogwang }
1290a9643ea8Slogwang 
1291a9643ea8Slogwang COUNTER_DECL(posixsem_check_setmode);
1292a9643ea8Slogwang static int
test_posixsem_check_setmode(struct ucred * cred,struct ksem * ks,struct label * kslabel,mode_t mode)1293a9643ea8Slogwang test_posixsem_check_setmode(struct ucred *cred, struct ksem *ks,
1294a9643ea8Slogwang     struct label *kslabel, mode_t mode)
1295a9643ea8Slogwang {
1296a9643ea8Slogwang 
1297a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1298a9643ea8Slogwang 	LABEL_CHECK(kslabel, MAGIC_POSIX_SHM);
1299a9643ea8Slogwang 	COUNTER_INC(posixsem_check_setmode);
1300a9643ea8Slogwang 	return (0);
1301a9643ea8Slogwang }
1302a9643ea8Slogwang 
1303a9643ea8Slogwang COUNTER_DECL(posixsem_check_setowner);
1304a9643ea8Slogwang static int
test_posixsem_check_setowner(struct ucred * cred,struct ksem * ks,struct label * kslabel,uid_t uid,gid_t gid)1305a9643ea8Slogwang test_posixsem_check_setowner(struct ucred *cred, struct ksem *ks,
1306a9643ea8Slogwang     struct label *kslabel, uid_t uid, gid_t gid)
1307a9643ea8Slogwang {
1308a9643ea8Slogwang 
1309a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1310a9643ea8Slogwang 	LABEL_CHECK(kslabel, MAGIC_POSIX_SHM);
1311a9643ea8Slogwang 	COUNTER_INC(posixsem_check_setowner);
1312a9643ea8Slogwang 	return (0);
1313a9643ea8Slogwang }
1314a9643ea8Slogwang 
1315a9643ea8Slogwang COUNTER_DECL(posixsem_check_stat);
1316a9643ea8Slogwang static int
test_posixsem_check_stat(struct ucred * active_cred,struct ucred * file_cred,struct ksem * ks,struct label * kslabel)1317a9643ea8Slogwang test_posixsem_check_stat(struct ucred *active_cred,
1318a9643ea8Slogwang     struct ucred *file_cred, struct ksem *ks, struct label *kslabel)
1319a9643ea8Slogwang {
1320a9643ea8Slogwang 
1321a9643ea8Slogwang 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
1322a9643ea8Slogwang 	LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
1323a9643ea8Slogwang 	LABEL_CHECK(kslabel, MAGIC_POSIX_SEM);
1324a9643ea8Slogwang 	COUNTER_INC(posixsem_check_stat);
1325a9643ea8Slogwang 	return (0);
1326a9643ea8Slogwang }
1327a9643ea8Slogwang 
1328a9643ea8Slogwang COUNTER_DECL(posixsem_check_unlink);
1329a9643ea8Slogwang static int
test_posixsem_check_unlink(struct ucred * cred,struct ksem * ks,struct label * kslabel)1330a9643ea8Slogwang test_posixsem_check_unlink(struct ucred *cred, struct ksem *ks,
1331a9643ea8Slogwang     struct label *kslabel)
1332a9643ea8Slogwang {
1333a9643ea8Slogwang 
1334a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1335a9643ea8Slogwang 	LABEL_CHECK(kslabel, MAGIC_POSIX_SEM);
1336a9643ea8Slogwang 	COUNTER_INC(posixsem_check_unlink);
1337a9643ea8Slogwang 
1338a9643ea8Slogwang 	return (0);
1339a9643ea8Slogwang }
1340a9643ea8Slogwang 
1341a9643ea8Slogwang COUNTER_DECL(posixsem_check_wait);
1342a9643ea8Slogwang static int
test_posixsem_check_wait(struct ucred * active_cred,struct ucred * file_cred,struct ksem * ks,struct label * kslabel)1343a9643ea8Slogwang test_posixsem_check_wait(struct ucred *active_cred, struct ucred *file_cred,
1344a9643ea8Slogwang     struct ksem *ks, struct label *kslabel)
1345a9643ea8Slogwang {
1346a9643ea8Slogwang 
1347a9643ea8Slogwang 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
1348a9643ea8Slogwang 	LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
1349a9643ea8Slogwang 	LABEL_CHECK(kslabel, MAGIC_POSIX_SEM);
1350a9643ea8Slogwang 	COUNTER_INC(posixsem_check_wait);
1351a9643ea8Slogwang 
1352a9643ea8Slogwang 	return (0);
1353a9643ea8Slogwang }
1354a9643ea8Slogwang 
1355a9643ea8Slogwang COUNTER_DECL(posixsem_create);
1356a9643ea8Slogwang static void
test_posixsem_create(struct ucred * cred,struct ksem * ks,struct label * kslabel)1357a9643ea8Slogwang test_posixsem_create(struct ucred *cred, struct ksem *ks,
1358a9643ea8Slogwang    struct label *kslabel)
1359a9643ea8Slogwang {
1360a9643ea8Slogwang 
1361a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1362a9643ea8Slogwang 	LABEL_CHECK(kslabel, MAGIC_POSIX_SEM);
1363a9643ea8Slogwang 	COUNTER_INC(posixsem_create);
1364a9643ea8Slogwang }
1365a9643ea8Slogwang 
1366a9643ea8Slogwang COUNTER_DECL(posixsem_destroy_label);
1367a9643ea8Slogwang static void
test_posixsem_destroy_label(struct label * label)1368a9643ea8Slogwang test_posixsem_destroy_label(struct label *label)
1369a9643ea8Slogwang {
1370a9643ea8Slogwang 
1371a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_POSIX_SEM);
1372a9643ea8Slogwang 	COUNTER_INC(posixsem_destroy_label);
1373a9643ea8Slogwang }
1374a9643ea8Slogwang 
1375a9643ea8Slogwang COUNTER_DECL(posixsem_init_label);
1376a9643ea8Slogwang static void
test_posixsem_init_label(struct label * label)1377a9643ea8Slogwang test_posixsem_init_label(struct label *label)
1378a9643ea8Slogwang {
1379a9643ea8Slogwang 
1380a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_POSIX_SEM);
1381a9643ea8Slogwang 	COUNTER_INC(posixsem_init_label);
1382a9643ea8Slogwang }
1383a9643ea8Slogwang 
1384a9643ea8Slogwang COUNTER_DECL(posixshm_check_create);
1385a9643ea8Slogwang static int
test_posixshm_check_create(struct ucred * cred,const char * path)1386a9643ea8Slogwang test_posixshm_check_create(struct ucred *cred, const char *path)
1387a9643ea8Slogwang {
1388a9643ea8Slogwang 
1389a9643ea8Slogwang 	COUNTER_INC(posixshm_check_create);
1390a9643ea8Slogwang 	return (0);
1391a9643ea8Slogwang }
1392a9643ea8Slogwang 
1393a9643ea8Slogwang COUNTER_DECL(posixshm_check_mmap);
1394a9643ea8Slogwang static int
test_posixshm_check_mmap(struct ucred * cred,struct shmfd * shmfd,struct label * shmfdlabel,int prot,int flags)1395a9643ea8Slogwang test_posixshm_check_mmap(struct ucred *cred, struct shmfd *shmfd,
1396a9643ea8Slogwang     struct label *shmfdlabel, int prot, int flags)
1397a9643ea8Slogwang {
1398a9643ea8Slogwang 
1399a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1400a9643ea8Slogwang 	LABEL_CHECK(shmfdlabel, MAGIC_POSIX_SHM);
1401a9643ea8Slogwang 	COUNTER_INC(posixshm_check_mmap);
1402a9643ea8Slogwang 	return (0);
1403a9643ea8Slogwang }
1404a9643ea8Slogwang 
1405a9643ea8Slogwang COUNTER_DECL(posixshm_check_open);
1406a9643ea8Slogwang static int
test_posixshm_check_open(struct ucred * cred,struct shmfd * shmfd,struct label * shmfdlabel,accmode_t accmode)1407a9643ea8Slogwang test_posixshm_check_open(struct ucred *cred, struct shmfd *shmfd,
1408a9643ea8Slogwang     struct label *shmfdlabel, accmode_t accmode)
1409a9643ea8Slogwang {
1410a9643ea8Slogwang 
1411a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1412a9643ea8Slogwang 	LABEL_CHECK(shmfdlabel, MAGIC_POSIX_SHM);
1413a9643ea8Slogwang 	COUNTER_INC(posixshm_check_open);
1414a9643ea8Slogwang 	return (0);
1415a9643ea8Slogwang }
1416a9643ea8Slogwang 
1417a9643ea8Slogwang COUNTER_DECL(posixshm_check_read);
1418a9643ea8Slogwang static int
test_posixshm_check_read(struct ucred * active_cred,struct ucred * file_cred,struct shmfd * shm,struct label * shmlabel)1419a9643ea8Slogwang test_posixshm_check_read(struct ucred *active_cred,
1420a9643ea8Slogwang     struct ucred *file_cred, struct shmfd *shm, struct label *shmlabel)
1421a9643ea8Slogwang {
1422a9643ea8Slogwang 
1423a9643ea8Slogwang 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
1424a9643ea8Slogwang 	if (file_cred != NULL)
1425a9643ea8Slogwang 		LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
1426a9643ea8Slogwang 	LABEL_CHECK(shmlabel, MAGIC_POSIX_SHM);
1427a9643ea8Slogwang 	COUNTER_INC(posixshm_check_read);
1428a9643ea8Slogwang 
1429a9643ea8Slogwang 	return (0);
1430a9643ea8Slogwang }
1431a9643ea8Slogwang 
1432a9643ea8Slogwang COUNTER_DECL(posixshm_check_setmode);
1433a9643ea8Slogwang static int
test_posixshm_check_setmode(struct ucred * cred,struct shmfd * shmfd,struct label * shmfdlabel,mode_t mode)1434a9643ea8Slogwang test_posixshm_check_setmode(struct ucred *cred, struct shmfd *shmfd,
1435a9643ea8Slogwang     struct label *shmfdlabel, mode_t mode)
1436a9643ea8Slogwang {
1437a9643ea8Slogwang 
1438a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1439a9643ea8Slogwang 	LABEL_CHECK(shmfdlabel, MAGIC_POSIX_SHM);
1440a9643ea8Slogwang 	COUNTER_INC(posixshm_check_setmode);
1441a9643ea8Slogwang 	return (0);
1442a9643ea8Slogwang }
1443a9643ea8Slogwang 
1444a9643ea8Slogwang COUNTER_DECL(posixshm_check_setowner);
1445a9643ea8Slogwang static int
test_posixshm_check_setowner(struct ucred * cred,struct shmfd * shmfd,struct label * shmfdlabel,uid_t uid,gid_t gid)1446a9643ea8Slogwang test_posixshm_check_setowner(struct ucred *cred, struct shmfd *shmfd,
1447a9643ea8Slogwang     struct label *shmfdlabel, uid_t uid, gid_t gid)
1448a9643ea8Slogwang {
1449a9643ea8Slogwang 
1450a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1451a9643ea8Slogwang 	LABEL_CHECK(shmfdlabel, MAGIC_POSIX_SHM);
1452a9643ea8Slogwang 	COUNTER_INC(posixshm_check_setowner);
1453a9643ea8Slogwang 	return (0);
1454a9643ea8Slogwang }
1455a9643ea8Slogwang 
1456a9643ea8Slogwang COUNTER_DECL(posixshm_check_stat);
1457a9643ea8Slogwang static int
test_posixshm_check_stat(struct ucred * active_cred,struct ucred * file_cred,struct shmfd * shmfd,struct label * shmfdlabel)1458a9643ea8Slogwang test_posixshm_check_stat(struct ucred *active_cred,
1459a9643ea8Slogwang     struct ucred *file_cred, struct shmfd *shmfd, struct label *shmfdlabel)
1460a9643ea8Slogwang {
1461a9643ea8Slogwang 
1462a9643ea8Slogwang 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
1463a9643ea8Slogwang 	LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
1464a9643ea8Slogwang 	LABEL_CHECK(shmfdlabel, MAGIC_POSIX_SHM);
1465a9643ea8Slogwang 	COUNTER_INC(posixshm_check_stat);
1466a9643ea8Slogwang 	return (0);
1467a9643ea8Slogwang }
1468a9643ea8Slogwang 
1469a9643ea8Slogwang COUNTER_DECL(posixshm_check_truncate);
1470a9643ea8Slogwang static int
test_posixshm_check_truncate(struct ucred * active_cred,struct ucred * file_cred,struct shmfd * shmfd,struct label * shmfdlabel)1471a9643ea8Slogwang test_posixshm_check_truncate(struct ucred *active_cred,
1472a9643ea8Slogwang     struct ucred *file_cred, struct shmfd *shmfd, struct label *shmfdlabel)
1473a9643ea8Slogwang {
1474a9643ea8Slogwang 
1475a9643ea8Slogwang 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
1476a9643ea8Slogwang 	LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
1477a9643ea8Slogwang 	LABEL_CHECK(shmfdlabel, MAGIC_POSIX_SHM);
1478a9643ea8Slogwang 	COUNTER_INC(posixshm_check_truncate);
1479a9643ea8Slogwang 	return (0);
1480a9643ea8Slogwang }
1481a9643ea8Slogwang 
1482a9643ea8Slogwang COUNTER_DECL(posixshm_check_unlink);
1483a9643ea8Slogwang static int
test_posixshm_check_unlink(struct ucred * cred,struct shmfd * shmfd,struct label * shmfdlabel)1484a9643ea8Slogwang test_posixshm_check_unlink(struct ucred *cred, struct shmfd *shmfd,
1485a9643ea8Slogwang     struct label *shmfdlabel)
1486a9643ea8Slogwang {
1487a9643ea8Slogwang 
1488a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1489a9643ea8Slogwang 	LABEL_CHECK(shmfdlabel, MAGIC_POSIX_SHM);
1490a9643ea8Slogwang 	COUNTER_INC(posixshm_check_unlink);
1491a9643ea8Slogwang 	return (0);
1492a9643ea8Slogwang }
1493a9643ea8Slogwang 
1494a9643ea8Slogwang COUNTER_DECL(posixshm_check_write);
1495a9643ea8Slogwang static int
test_posixshm_check_write(struct ucred * active_cred,struct ucred * file_cred,struct shmfd * shm,struct label * shmlabel)1496a9643ea8Slogwang test_posixshm_check_write(struct ucred *active_cred,
1497a9643ea8Slogwang     struct ucred *file_cred, struct shmfd *shm, struct label *shmlabel)
1498a9643ea8Slogwang {
1499a9643ea8Slogwang 
1500a9643ea8Slogwang 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
1501a9643ea8Slogwang 	if (file_cred != NULL)
1502a9643ea8Slogwang 		LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
1503a9643ea8Slogwang 	LABEL_CHECK(shmlabel, MAGIC_POSIX_SHM);
1504a9643ea8Slogwang 	COUNTER_INC(posixshm_check_write);
1505a9643ea8Slogwang 
1506a9643ea8Slogwang 	return (0);
1507a9643ea8Slogwang }
1508a9643ea8Slogwang 
1509a9643ea8Slogwang COUNTER_DECL(posixshm_create);
1510a9643ea8Slogwang static void
test_posixshm_create(struct ucred * cred,struct shmfd * shmfd,struct label * shmfdlabel)1511a9643ea8Slogwang test_posixshm_create(struct ucred *cred, struct shmfd *shmfd,
1512a9643ea8Slogwang    struct label *shmfdlabel)
1513a9643ea8Slogwang {
1514a9643ea8Slogwang 
1515a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1516a9643ea8Slogwang 	LABEL_CHECK(shmfdlabel, MAGIC_POSIX_SHM);
1517a9643ea8Slogwang 	COUNTER_INC(posixshm_create);
1518a9643ea8Slogwang }
1519a9643ea8Slogwang 
1520a9643ea8Slogwang COUNTER_DECL(posixshm_destroy_label);
1521a9643ea8Slogwang static void
test_posixshm_destroy_label(struct label * label)1522a9643ea8Slogwang test_posixshm_destroy_label(struct label *label)
1523a9643ea8Slogwang {
1524a9643ea8Slogwang 
1525a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_POSIX_SHM);
1526a9643ea8Slogwang 	COUNTER_INC(posixshm_destroy_label);
1527a9643ea8Slogwang }
1528a9643ea8Slogwang 
1529a9643ea8Slogwang COUNTER_DECL(posixshm_init_label);
1530a9643ea8Slogwang static void
test_posixshm_init_label(struct label * label)1531a9643ea8Slogwang test_posixshm_init_label(struct label *label)
1532a9643ea8Slogwang {
1533a9643ea8Slogwang 
1534a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_POSIX_SHM);
1535a9643ea8Slogwang 	COUNTER_INC(posixshm_init_label);
1536a9643ea8Slogwang }
1537a9643ea8Slogwang 
1538a9643ea8Slogwang COUNTER_DECL(proc_check_debug);
1539a9643ea8Slogwang static int
test_proc_check_debug(struct ucred * cred,struct proc * p)1540a9643ea8Slogwang test_proc_check_debug(struct ucred *cred, struct proc *p)
1541a9643ea8Slogwang {
1542a9643ea8Slogwang 
1543a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1544a9643ea8Slogwang 	LABEL_CHECK(p->p_ucred->cr_label, MAGIC_CRED);
1545a9643ea8Slogwang 	COUNTER_INC(proc_check_debug);
1546a9643ea8Slogwang 
1547a9643ea8Slogwang 	return (0);
1548a9643ea8Slogwang }
1549a9643ea8Slogwang 
1550a9643ea8Slogwang COUNTER_DECL(proc_check_sched);
1551a9643ea8Slogwang static int
test_proc_check_sched(struct ucred * cred,struct proc * p)1552a9643ea8Slogwang test_proc_check_sched(struct ucred *cred, struct proc *p)
1553a9643ea8Slogwang {
1554a9643ea8Slogwang 
1555a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1556a9643ea8Slogwang 	LABEL_CHECK(p->p_ucred->cr_label, MAGIC_CRED);
1557a9643ea8Slogwang 	COUNTER_INC(proc_check_sched);
1558a9643ea8Slogwang 
1559a9643ea8Slogwang 	return (0);
1560a9643ea8Slogwang }
1561a9643ea8Slogwang 
1562a9643ea8Slogwang COUNTER_DECL(proc_check_signal);
1563a9643ea8Slogwang static int
test_proc_check_signal(struct ucred * cred,struct proc * p,int signum)1564a9643ea8Slogwang test_proc_check_signal(struct ucred *cred, struct proc *p, int signum)
1565a9643ea8Slogwang {
1566a9643ea8Slogwang 
1567a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1568a9643ea8Slogwang 	LABEL_CHECK(p->p_ucred->cr_label, MAGIC_CRED);
1569a9643ea8Slogwang 	COUNTER_INC(proc_check_signal);
1570a9643ea8Slogwang 
1571a9643ea8Slogwang 	return (0);
1572a9643ea8Slogwang }
1573a9643ea8Slogwang 
1574a9643ea8Slogwang COUNTER_DECL(proc_check_wait);
1575a9643ea8Slogwang static int
test_proc_check_wait(struct ucred * cred,struct proc * p)1576a9643ea8Slogwang test_proc_check_wait(struct ucred *cred, struct proc *p)
1577a9643ea8Slogwang {
1578a9643ea8Slogwang 
1579a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1580a9643ea8Slogwang 	LABEL_CHECK(p->p_ucred->cr_label, MAGIC_CRED);
1581a9643ea8Slogwang 	COUNTER_INC(proc_check_wait);
1582a9643ea8Slogwang 
1583a9643ea8Slogwang 	return (0);
1584a9643ea8Slogwang }
1585a9643ea8Slogwang 
1586a9643ea8Slogwang COUNTER_DECL(proc_destroy_label);
1587a9643ea8Slogwang static void
test_proc_destroy_label(struct label * label)1588a9643ea8Slogwang test_proc_destroy_label(struct label *label)
1589a9643ea8Slogwang {
1590a9643ea8Slogwang 
1591a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_PROC);
1592a9643ea8Slogwang 	COUNTER_INC(proc_destroy_label);
1593a9643ea8Slogwang }
1594a9643ea8Slogwang 
1595a9643ea8Slogwang COUNTER_DECL(proc_init_label);
1596a9643ea8Slogwang static void
test_proc_init_label(struct label * label)1597a9643ea8Slogwang test_proc_init_label(struct label *label)
1598a9643ea8Slogwang {
1599a9643ea8Slogwang 
1600a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_PROC);
1601a9643ea8Slogwang 	COUNTER_INC(proc_init_label);
1602a9643ea8Slogwang }
1603a9643ea8Slogwang 
1604a9643ea8Slogwang COUNTER_DECL(socket_check_accept);
1605a9643ea8Slogwang static int
test_socket_check_accept(struct ucred * cred,struct socket * so,struct label * solabel)1606a9643ea8Slogwang test_socket_check_accept(struct ucred *cred, struct socket *so,
1607a9643ea8Slogwang     struct label *solabel)
1608a9643ea8Slogwang {
1609a9643ea8Slogwang 
1610a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1611a9643ea8Slogwang 	SOCK_LOCK(so);
1612a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1613a9643ea8Slogwang 	SOCK_UNLOCK(so);
1614a9643ea8Slogwang 	COUNTER_INC(socket_check_accept);
1615a9643ea8Slogwang 
1616a9643ea8Slogwang 	return (0);
1617a9643ea8Slogwang }
1618a9643ea8Slogwang 
1619a9643ea8Slogwang COUNTER_DECL(socket_check_bind);
1620a9643ea8Slogwang static int
test_socket_check_bind(struct ucred * cred,struct socket * so,struct label * solabel,struct sockaddr * sa)1621a9643ea8Slogwang test_socket_check_bind(struct ucred *cred, struct socket *so,
1622a9643ea8Slogwang     struct label *solabel, struct sockaddr *sa)
1623a9643ea8Slogwang {
1624a9643ea8Slogwang 
1625a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1626a9643ea8Slogwang 	SOCK_LOCK(so);
1627a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1628a9643ea8Slogwang 	SOCK_UNLOCK(so);
1629a9643ea8Slogwang 	COUNTER_INC(socket_check_bind);
1630a9643ea8Slogwang 
1631a9643ea8Slogwang 	return (0);
1632a9643ea8Slogwang }
1633a9643ea8Slogwang 
1634a9643ea8Slogwang COUNTER_DECL(socket_check_connect);
1635a9643ea8Slogwang static int
test_socket_check_connect(struct ucred * cred,struct socket * so,struct label * solabel,struct sockaddr * sa)1636a9643ea8Slogwang test_socket_check_connect(struct ucred *cred, struct socket *so,
1637a9643ea8Slogwang     struct label *solabel, struct sockaddr *sa)
1638a9643ea8Slogwang {
1639a9643ea8Slogwang 
1640a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1641a9643ea8Slogwang 	SOCK_LOCK(so);
1642a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1643a9643ea8Slogwang 	SOCK_UNLOCK(so);
1644a9643ea8Slogwang 	COUNTER_INC(socket_check_connect);
1645a9643ea8Slogwang 
1646a9643ea8Slogwang 	return (0);
1647a9643ea8Slogwang }
1648a9643ea8Slogwang 
1649a9643ea8Slogwang COUNTER_DECL(socket_check_deliver);
1650a9643ea8Slogwang static int
test_socket_check_deliver(struct socket * so,struct label * solabel,struct mbuf * m,struct label * mlabel)1651a9643ea8Slogwang test_socket_check_deliver(struct socket *so, struct label *solabel,
1652a9643ea8Slogwang     struct mbuf *m, struct label *mlabel)
1653a9643ea8Slogwang {
1654a9643ea8Slogwang 
1655a9643ea8Slogwang 	SOCK_LOCK(so);
1656a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1657a9643ea8Slogwang 	SOCK_UNLOCK(so);
1658a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1659a9643ea8Slogwang 	COUNTER_INC(socket_check_deliver);
1660a9643ea8Slogwang 
1661a9643ea8Slogwang 	return (0);
1662a9643ea8Slogwang }
1663a9643ea8Slogwang 
1664a9643ea8Slogwang COUNTER_DECL(socket_check_listen);
1665a9643ea8Slogwang static int
test_socket_check_listen(struct ucred * cred,struct socket * so,struct label * solabel)1666a9643ea8Slogwang test_socket_check_listen(struct ucred *cred, struct socket *so,
1667a9643ea8Slogwang     struct label *solabel)
1668a9643ea8Slogwang {
1669a9643ea8Slogwang 
1670a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1671a9643ea8Slogwang 	SOCK_LOCK(so);
1672a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1673a9643ea8Slogwang 	SOCK_UNLOCK(so);
1674a9643ea8Slogwang 	COUNTER_INC(socket_check_listen);
1675a9643ea8Slogwang 
1676a9643ea8Slogwang 	return (0);
1677a9643ea8Slogwang }
1678a9643ea8Slogwang 
1679a9643ea8Slogwang COUNTER_DECL(socket_check_poll);
1680a9643ea8Slogwang static int
test_socket_check_poll(struct ucred * cred,struct socket * so,struct label * solabel)1681a9643ea8Slogwang test_socket_check_poll(struct ucred *cred, struct socket *so,
1682a9643ea8Slogwang     struct label *solabel)
1683a9643ea8Slogwang {
1684a9643ea8Slogwang 
1685a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1686a9643ea8Slogwang 	SOCK_LOCK(so);
1687a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1688a9643ea8Slogwang 	SOCK_UNLOCK(so);
1689a9643ea8Slogwang 	COUNTER_INC(socket_check_poll);
1690a9643ea8Slogwang 
1691a9643ea8Slogwang 	return (0);
1692a9643ea8Slogwang }
1693a9643ea8Slogwang 
1694a9643ea8Slogwang COUNTER_DECL(socket_check_receive);
1695a9643ea8Slogwang static int
test_socket_check_receive(struct ucred * cred,struct socket * so,struct label * solabel)1696a9643ea8Slogwang test_socket_check_receive(struct ucred *cred, struct socket *so,
1697a9643ea8Slogwang     struct label *solabel)
1698a9643ea8Slogwang {
1699a9643ea8Slogwang 
1700a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1701a9643ea8Slogwang 	SOCK_LOCK(so);
1702a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1703a9643ea8Slogwang 	SOCK_UNLOCK(so);
1704a9643ea8Slogwang 	COUNTER_INC(socket_check_receive);
1705a9643ea8Slogwang 
1706a9643ea8Slogwang 	return (0);
1707a9643ea8Slogwang }
1708a9643ea8Slogwang 
1709a9643ea8Slogwang COUNTER_DECL(socket_check_relabel);
1710a9643ea8Slogwang static int
test_socket_check_relabel(struct ucred * cred,struct socket * so,struct label * solabel,struct label * newlabel)1711a9643ea8Slogwang test_socket_check_relabel(struct ucred *cred, struct socket *so,
1712a9643ea8Slogwang     struct label *solabel, struct label *newlabel)
1713a9643ea8Slogwang {
1714a9643ea8Slogwang 
1715a9643ea8Slogwang 	SOCK_LOCK_ASSERT(so);
1716a9643ea8Slogwang 
1717a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1718a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1719a9643ea8Slogwang 	LABEL_CHECK(newlabel, MAGIC_SOCKET);
1720a9643ea8Slogwang 	COUNTER_INC(socket_check_relabel);
1721a9643ea8Slogwang 
1722a9643ea8Slogwang 	return (0);
1723a9643ea8Slogwang }
1724a9643ea8Slogwang 
1725a9643ea8Slogwang COUNTER_DECL(socket_check_send);
1726a9643ea8Slogwang static int
test_socket_check_send(struct ucred * cred,struct socket * so,struct label * solabel)1727a9643ea8Slogwang test_socket_check_send(struct ucred *cred, struct socket *so,
1728a9643ea8Slogwang     struct label *solabel)
1729a9643ea8Slogwang {
1730a9643ea8Slogwang 
1731a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1732a9643ea8Slogwang 	SOCK_LOCK(so);
1733a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1734a9643ea8Slogwang 	SOCK_UNLOCK(so);
1735a9643ea8Slogwang 	COUNTER_INC(socket_check_send);
1736a9643ea8Slogwang 
1737a9643ea8Slogwang 	return (0);
1738a9643ea8Slogwang }
1739a9643ea8Slogwang 
1740a9643ea8Slogwang COUNTER_DECL(socket_check_stat);
1741a9643ea8Slogwang static int
test_socket_check_stat(struct ucred * cred,struct socket * so,struct label * solabel)1742a9643ea8Slogwang test_socket_check_stat(struct ucred *cred, struct socket *so,
1743a9643ea8Slogwang     struct label *solabel)
1744a9643ea8Slogwang {
1745a9643ea8Slogwang 
1746a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1747a9643ea8Slogwang 	SOCK_LOCK(so);
1748a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1749a9643ea8Slogwang 	SOCK_UNLOCK(so);
1750a9643ea8Slogwang 	COUNTER_INC(socket_check_stat);
1751a9643ea8Slogwang 
1752a9643ea8Slogwang 	return (0);
1753a9643ea8Slogwang }
1754a9643ea8Slogwang 
1755a9643ea8Slogwang COUNTER_DECL(socket_check_visible);
1756a9643ea8Slogwang static int
test_socket_check_visible(struct ucred * cred,struct socket * so,struct label * solabel)1757a9643ea8Slogwang test_socket_check_visible(struct ucred *cred, struct socket *so,
1758a9643ea8Slogwang     struct label *solabel)
1759a9643ea8Slogwang {
1760a9643ea8Slogwang 
1761a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1762a9643ea8Slogwang 	SOCK_LOCK(so);
1763a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1764a9643ea8Slogwang 	SOCK_UNLOCK(so);
1765a9643ea8Slogwang 	COUNTER_INC(socket_check_visible);
1766a9643ea8Slogwang 
1767a9643ea8Slogwang 	return (0);
1768a9643ea8Slogwang }
1769a9643ea8Slogwang 
1770a9643ea8Slogwang COUNTER_DECL(socket_copy_label);
1771a9643ea8Slogwang static void
test_socket_copy_label(struct label * src,struct label * dest)1772a9643ea8Slogwang test_socket_copy_label(struct label *src, struct label *dest)
1773a9643ea8Slogwang {
1774a9643ea8Slogwang 
1775a9643ea8Slogwang 	LABEL_CHECK(src, MAGIC_SOCKET);
1776a9643ea8Slogwang 	LABEL_CHECK(dest, MAGIC_SOCKET);
1777a9643ea8Slogwang 	COUNTER_INC(socket_copy_label);
1778a9643ea8Slogwang }
1779a9643ea8Slogwang 
1780a9643ea8Slogwang COUNTER_DECL(socket_create);
1781a9643ea8Slogwang static void
test_socket_create(struct ucred * cred,struct socket * so,struct label * solabel)1782a9643ea8Slogwang test_socket_create(struct ucred *cred, struct socket *so,
1783a9643ea8Slogwang     struct label *solabel)
1784a9643ea8Slogwang {
1785a9643ea8Slogwang 
1786a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1787a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1788a9643ea8Slogwang 	COUNTER_INC(socket_create);
1789a9643ea8Slogwang }
1790a9643ea8Slogwang 
1791a9643ea8Slogwang COUNTER_DECL(socket_create_mbuf);
1792a9643ea8Slogwang static void
test_socket_create_mbuf(struct socket * so,struct label * solabel,struct mbuf * m,struct label * mlabel)1793a9643ea8Slogwang test_socket_create_mbuf(struct socket *so, struct label *solabel,
1794a9643ea8Slogwang     struct mbuf *m, struct label *mlabel)
1795a9643ea8Slogwang {
1796a9643ea8Slogwang 
1797a9643ea8Slogwang 	SOCK_LOCK(so);
1798a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1799a9643ea8Slogwang 	SOCK_UNLOCK(so);
1800a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1801a9643ea8Slogwang 	COUNTER_INC(socket_create_mbuf);
1802a9643ea8Slogwang }
1803a9643ea8Slogwang 
1804a9643ea8Slogwang COUNTER_DECL(socket_destroy_label);
1805a9643ea8Slogwang static void
test_socket_destroy_label(struct label * label)1806a9643ea8Slogwang test_socket_destroy_label(struct label *label)
1807a9643ea8Slogwang {
1808a9643ea8Slogwang 
1809a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_SOCKET);
1810a9643ea8Slogwang 	COUNTER_INC(socket_destroy_label);
1811a9643ea8Slogwang }
1812a9643ea8Slogwang 
1813a9643ea8Slogwang COUNTER_DECL(socket_externalize_label);
1814a9643ea8Slogwang static int
test_socket_externalize_label(struct label * label,char * element_name,struct sbuf * sb,int * claimed)1815a9643ea8Slogwang test_socket_externalize_label(struct label *label, char *element_name,
1816a9643ea8Slogwang     struct sbuf *sb, int *claimed)
1817a9643ea8Slogwang {
1818a9643ea8Slogwang 
1819a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_SOCKET);
1820a9643ea8Slogwang 	COUNTER_INC(socket_externalize_label);
1821a9643ea8Slogwang 
1822a9643ea8Slogwang 	return (0);
1823a9643ea8Slogwang }
1824a9643ea8Slogwang 
1825a9643ea8Slogwang COUNTER_DECL(socket_init_label);
1826a9643ea8Slogwang static int
test_socket_init_label(struct label * label,int flag)1827a9643ea8Slogwang test_socket_init_label(struct label *label, int flag)
1828a9643ea8Slogwang {
1829a9643ea8Slogwang 
1830a9643ea8Slogwang 	if (flag & M_WAITOK)
1831a9643ea8Slogwang 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
1832a9643ea8Slogwang 		    "test_socket_init_label() at %s:%d", __FILE__,
1833a9643ea8Slogwang 		    __LINE__);
1834a9643ea8Slogwang 
1835a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_SOCKET);
1836a9643ea8Slogwang 	COUNTER_INC(socket_init_label);
1837a9643ea8Slogwang 	return (0);
1838a9643ea8Slogwang }
1839a9643ea8Slogwang 
1840a9643ea8Slogwang COUNTER_DECL(socket_internalize_label);
1841a9643ea8Slogwang static int
test_socket_internalize_label(struct label * label,char * element_name,char * element_data,int * claimed)1842a9643ea8Slogwang test_socket_internalize_label(struct label *label, char *element_name,
1843a9643ea8Slogwang     char *element_data, int *claimed)
1844a9643ea8Slogwang {
1845a9643ea8Slogwang 
1846a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_SOCKET);
1847a9643ea8Slogwang 	COUNTER_INC(socket_internalize_label);
1848a9643ea8Slogwang 
1849a9643ea8Slogwang 	return (0);
1850a9643ea8Slogwang }
1851a9643ea8Slogwang 
1852a9643ea8Slogwang COUNTER_DECL(socket_newconn);
1853a9643ea8Slogwang static void
test_socket_newconn(struct socket * oldso,struct label * oldsolabel,struct socket * newso,struct label * newsolabel)1854a9643ea8Slogwang test_socket_newconn(struct socket *oldso, struct label *oldsolabel,
1855a9643ea8Slogwang     struct socket *newso, struct label *newsolabel)
1856a9643ea8Slogwang {
1857a9643ea8Slogwang 
1858a9643ea8Slogwang 	SOCK_LOCK(oldso);
1859a9643ea8Slogwang 	LABEL_CHECK(oldsolabel, MAGIC_SOCKET);
1860a9643ea8Slogwang 	SOCK_UNLOCK(oldso);
1861a9643ea8Slogwang 	SOCK_LOCK(newso);
1862a9643ea8Slogwang 	LABEL_CHECK(newsolabel, MAGIC_SOCKET);
1863a9643ea8Slogwang 	SOCK_UNLOCK(newso);
1864a9643ea8Slogwang 	COUNTER_INC(socket_newconn);
1865a9643ea8Slogwang }
1866a9643ea8Slogwang 
1867a9643ea8Slogwang COUNTER_DECL(socket_relabel);
1868a9643ea8Slogwang static void
test_socket_relabel(struct ucred * cred,struct socket * so,struct label * solabel,struct label * newlabel)1869a9643ea8Slogwang test_socket_relabel(struct ucred *cred, struct socket *so,
1870a9643ea8Slogwang     struct label *solabel, struct label *newlabel)
1871a9643ea8Slogwang {
1872a9643ea8Slogwang 
1873a9643ea8Slogwang 	SOCK_LOCK_ASSERT(so);
1874a9643ea8Slogwang 
1875a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1876a9643ea8Slogwang 	LABEL_CHECK(solabel, MAGIC_SOCKET);
1877a9643ea8Slogwang 	LABEL_CHECK(newlabel, MAGIC_SOCKET);
1878a9643ea8Slogwang 	COUNTER_INC(socket_relabel);
1879a9643ea8Slogwang }
1880a9643ea8Slogwang 
1881a9643ea8Slogwang COUNTER_DECL(socketpeer_destroy_label);
1882a9643ea8Slogwang static void
test_socketpeer_destroy_label(struct label * label)1883a9643ea8Slogwang test_socketpeer_destroy_label(struct label *label)
1884a9643ea8Slogwang {
1885a9643ea8Slogwang 
1886a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_SOCKET);
1887a9643ea8Slogwang 	COUNTER_INC(socketpeer_destroy_label);
1888a9643ea8Slogwang }
1889a9643ea8Slogwang 
1890a9643ea8Slogwang COUNTER_DECL(socketpeer_externalize_label);
1891a9643ea8Slogwang static int
test_socketpeer_externalize_label(struct label * label,char * element_name,struct sbuf * sb,int * claimed)1892a9643ea8Slogwang test_socketpeer_externalize_label(struct label *label, char *element_name,
1893a9643ea8Slogwang     struct sbuf *sb, int *claimed)
1894a9643ea8Slogwang {
1895a9643ea8Slogwang 
1896a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_SOCKET);
1897a9643ea8Slogwang 	COUNTER_INC(socketpeer_externalize_label);
1898a9643ea8Slogwang 
1899a9643ea8Slogwang 	return (0);
1900a9643ea8Slogwang }
1901a9643ea8Slogwang 
1902a9643ea8Slogwang COUNTER_DECL(socketpeer_init_label);
1903a9643ea8Slogwang static int
test_socketpeer_init_label(struct label * label,int flag)1904a9643ea8Slogwang test_socketpeer_init_label(struct label *label, int flag)
1905a9643ea8Slogwang {
1906a9643ea8Slogwang 
1907a9643ea8Slogwang 	if (flag & M_WAITOK)
1908a9643ea8Slogwang 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
1909a9643ea8Slogwang 		    "test_socketpeer_init_label() at %s:%d", __FILE__,
1910a9643ea8Slogwang 		    __LINE__);
1911a9643ea8Slogwang 
1912a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_SOCKET);
1913a9643ea8Slogwang 	COUNTER_INC(socketpeer_init_label);
1914a9643ea8Slogwang 	return (0);
1915a9643ea8Slogwang }
1916a9643ea8Slogwang 
1917a9643ea8Slogwang COUNTER_DECL(socketpeer_set_from_mbuf);
1918a9643ea8Slogwang static void
test_socketpeer_set_from_mbuf(struct mbuf * m,struct label * mlabel,struct socket * so,struct label * sopeerlabel)1919a9643ea8Slogwang test_socketpeer_set_from_mbuf(struct mbuf *m, struct label *mlabel,
1920a9643ea8Slogwang     struct socket *so, struct label *sopeerlabel)
1921a9643ea8Slogwang {
1922a9643ea8Slogwang 
1923a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1924a9643ea8Slogwang 	SOCK_LOCK(so);
1925a9643ea8Slogwang 	LABEL_CHECK(sopeerlabel, MAGIC_SOCKET);
1926a9643ea8Slogwang 	SOCK_UNLOCK(so);
1927a9643ea8Slogwang 	COUNTER_INC(socketpeer_set_from_mbuf);
1928a9643ea8Slogwang }
1929a9643ea8Slogwang 
1930a9643ea8Slogwang COUNTER_DECL(socketpeer_set_from_socket);
1931a9643ea8Slogwang static void
test_socketpeer_set_from_socket(struct socket * oldso,struct label * oldsolabel,struct socket * newso,struct label * newsopeerlabel)1932a9643ea8Slogwang test_socketpeer_set_from_socket(struct socket *oldso,
1933a9643ea8Slogwang     struct label *oldsolabel, struct socket *newso,
1934a9643ea8Slogwang     struct label *newsopeerlabel)
1935a9643ea8Slogwang {
1936a9643ea8Slogwang 
1937a9643ea8Slogwang 	SOCK_LOCK(oldso);
1938a9643ea8Slogwang 	LABEL_CHECK(oldsolabel, MAGIC_SOCKET);
1939a9643ea8Slogwang 	SOCK_UNLOCK(oldso);
1940a9643ea8Slogwang 	SOCK_LOCK(newso);
1941a9643ea8Slogwang 	LABEL_CHECK(newsopeerlabel, MAGIC_SOCKET);
1942a9643ea8Slogwang 	SOCK_UNLOCK(newso);
1943a9643ea8Slogwang 	COUNTER_INC(socketpeer_set_from_socket);
1944a9643ea8Slogwang }
1945a9643ea8Slogwang 
1946a9643ea8Slogwang COUNTER_DECL(syncache_create);
1947a9643ea8Slogwang static void
test_syncache_create(struct label * label,struct inpcb * inp)1948a9643ea8Slogwang test_syncache_create(struct label *label, struct inpcb *inp)
1949a9643ea8Slogwang {
1950a9643ea8Slogwang 
1951a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_SYNCACHE);
1952a9643ea8Slogwang 	COUNTER_INC(syncache_create);
1953a9643ea8Slogwang }
1954a9643ea8Slogwang 
1955a9643ea8Slogwang COUNTER_DECL(syncache_create_mbuf);
1956a9643ea8Slogwang static void
test_syncache_create_mbuf(struct label * sc_label,struct mbuf * m,struct label * mlabel)1957a9643ea8Slogwang test_syncache_create_mbuf(struct label *sc_label, struct mbuf *m,
1958a9643ea8Slogwang     struct label *mlabel)
1959a9643ea8Slogwang {
1960a9643ea8Slogwang 
1961a9643ea8Slogwang 	LABEL_CHECK(sc_label, MAGIC_SYNCACHE);
1962a9643ea8Slogwang 	LABEL_CHECK(mlabel, MAGIC_MBUF);
1963a9643ea8Slogwang 	COUNTER_INC(syncache_create_mbuf);
1964a9643ea8Slogwang }
1965a9643ea8Slogwang 
1966a9643ea8Slogwang COUNTER_DECL(syncache_destroy_label);
1967a9643ea8Slogwang static void
test_syncache_destroy_label(struct label * label)1968a9643ea8Slogwang test_syncache_destroy_label(struct label *label)
1969a9643ea8Slogwang {
1970a9643ea8Slogwang 
1971a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_SYNCACHE);
1972a9643ea8Slogwang 	COUNTER_INC(syncache_destroy_label);
1973a9643ea8Slogwang }
1974a9643ea8Slogwang 
1975a9643ea8Slogwang COUNTER_DECL(syncache_init_label);
1976a9643ea8Slogwang static int
test_syncache_init_label(struct label * label,int flag)1977a9643ea8Slogwang test_syncache_init_label(struct label *label, int flag)
1978a9643ea8Slogwang {
1979a9643ea8Slogwang 
1980a9643ea8Slogwang 	if (flag & M_WAITOK)
1981a9643ea8Slogwang 		WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
1982a9643ea8Slogwang 		    "test_syncache_init_label() at %s:%d", __FILE__,
1983a9643ea8Slogwang 		    __LINE__);
1984a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_SYNCACHE);
1985a9643ea8Slogwang 	COUNTER_INC(syncache_init_label);
1986a9643ea8Slogwang 	return (0);
1987a9643ea8Slogwang }
1988a9643ea8Slogwang 
1989a9643ea8Slogwang COUNTER_DECL(system_check_acct);
1990a9643ea8Slogwang static int
test_system_check_acct(struct ucred * cred,struct vnode * vp,struct label * vplabel)1991a9643ea8Slogwang test_system_check_acct(struct ucred *cred, struct vnode *vp,
1992a9643ea8Slogwang     struct label *vplabel)
1993a9643ea8Slogwang {
1994a9643ea8Slogwang 
1995a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
1996a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
1997a9643ea8Slogwang 	COUNTER_INC(system_check_acct);
1998a9643ea8Slogwang 
1999a9643ea8Slogwang 	return (0);
2000a9643ea8Slogwang }
2001a9643ea8Slogwang 
2002a9643ea8Slogwang COUNTER_DECL(system_check_audit);
2003a9643ea8Slogwang static int
test_system_check_audit(struct ucred * cred,void * record,int length)2004a9643ea8Slogwang test_system_check_audit(struct ucred *cred, void *record, int length)
2005a9643ea8Slogwang {
2006a9643ea8Slogwang 
2007a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2008a9643ea8Slogwang 	COUNTER_INC(system_check_audit);
2009a9643ea8Slogwang 
2010a9643ea8Slogwang 	return (0);
2011a9643ea8Slogwang }
2012a9643ea8Slogwang 
2013a9643ea8Slogwang COUNTER_DECL(system_check_auditctl);
2014a9643ea8Slogwang static int
test_system_check_auditctl(struct ucred * cred,struct vnode * vp,struct label * vplabel)2015a9643ea8Slogwang test_system_check_auditctl(struct ucred *cred, struct vnode *vp,
2016a9643ea8Slogwang     struct label *vplabel)
2017a9643ea8Slogwang {
2018a9643ea8Slogwang 
2019a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2020a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2021a9643ea8Slogwang 	COUNTER_INC(system_check_auditctl);
2022a9643ea8Slogwang 
2023a9643ea8Slogwang 	return (0);
2024a9643ea8Slogwang }
2025a9643ea8Slogwang 
2026a9643ea8Slogwang COUNTER_DECL(system_check_auditon);
2027a9643ea8Slogwang static int
test_system_check_auditon(struct ucred * cred,int cmd)2028a9643ea8Slogwang test_system_check_auditon(struct ucred *cred, int cmd)
2029a9643ea8Slogwang {
2030a9643ea8Slogwang 
2031a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2032a9643ea8Slogwang 	COUNTER_INC(system_check_auditon);
2033a9643ea8Slogwang 
2034a9643ea8Slogwang 	return (0);
2035a9643ea8Slogwang }
2036a9643ea8Slogwang 
2037a9643ea8Slogwang COUNTER_DECL(system_check_reboot);
2038a9643ea8Slogwang static int
test_system_check_reboot(struct ucred * cred,int how)2039a9643ea8Slogwang test_system_check_reboot(struct ucred *cred, int how)
2040a9643ea8Slogwang {
2041a9643ea8Slogwang 
2042a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2043a9643ea8Slogwang 	COUNTER_INC(system_check_reboot);
2044a9643ea8Slogwang 
2045a9643ea8Slogwang 	return (0);
2046a9643ea8Slogwang }
2047a9643ea8Slogwang 
2048a9643ea8Slogwang COUNTER_DECL(system_check_swapoff);
2049a9643ea8Slogwang static int
test_system_check_swapoff(struct ucred * cred,struct vnode * vp,struct label * vplabel)2050a9643ea8Slogwang test_system_check_swapoff(struct ucred *cred, struct vnode *vp,
2051a9643ea8Slogwang     struct label *vplabel)
2052a9643ea8Slogwang {
2053a9643ea8Slogwang 
2054a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2055a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2056a9643ea8Slogwang 	COUNTER_INC(system_check_swapoff);
2057a9643ea8Slogwang 
2058a9643ea8Slogwang 	return (0);
2059a9643ea8Slogwang }
2060a9643ea8Slogwang 
2061a9643ea8Slogwang COUNTER_DECL(system_check_swapon);
2062a9643ea8Slogwang static int
test_system_check_swapon(struct ucred * cred,struct vnode * vp,struct label * vplabel)2063a9643ea8Slogwang test_system_check_swapon(struct ucred *cred, struct vnode *vp,
2064a9643ea8Slogwang     struct label *vplabel)
2065a9643ea8Slogwang {
2066a9643ea8Slogwang 
2067a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2068a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2069a9643ea8Slogwang 	COUNTER_INC(system_check_swapon);
2070a9643ea8Slogwang 
2071a9643ea8Slogwang 	return (0);
2072a9643ea8Slogwang }
2073a9643ea8Slogwang 
2074a9643ea8Slogwang COUNTER_DECL(system_check_sysctl);
2075a9643ea8Slogwang static int
test_system_check_sysctl(struct ucred * cred,struct sysctl_oid * oidp,void * arg1,int arg2,struct sysctl_req * req)2076a9643ea8Slogwang test_system_check_sysctl(struct ucred *cred, struct sysctl_oid *oidp,
2077a9643ea8Slogwang     void *arg1, int arg2, struct sysctl_req *req)
2078a9643ea8Slogwang {
2079a9643ea8Slogwang 
2080a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2081a9643ea8Slogwang 	COUNTER_INC(system_check_sysctl);
2082a9643ea8Slogwang 
2083a9643ea8Slogwang 	return (0);
2084a9643ea8Slogwang }
2085a9643ea8Slogwang 
2086a9643ea8Slogwang COUNTER_DECL(sysvmsg_cleanup);
2087a9643ea8Slogwang static void
test_sysvmsg_cleanup(struct label * msglabel)2088a9643ea8Slogwang test_sysvmsg_cleanup(struct label *msglabel)
2089a9643ea8Slogwang {
2090a9643ea8Slogwang 
2091a9643ea8Slogwang 	LABEL_CHECK(msglabel, MAGIC_SYSV_MSG);
2092a9643ea8Slogwang 	COUNTER_INC(sysvmsg_cleanup);
2093a9643ea8Slogwang }
2094a9643ea8Slogwang 
2095a9643ea8Slogwang COUNTER_DECL(sysvmsg_create);
2096a9643ea8Slogwang static void
test_sysvmsg_create(struct ucred * cred,struct msqid_kernel * msqkptr,struct label * msqlabel,struct msg * msgptr,struct label * msglabel)2097a9643ea8Slogwang test_sysvmsg_create(struct ucred *cred, struct msqid_kernel *msqkptr,
2098a9643ea8Slogwang     struct label *msqlabel, struct msg *msgptr, struct label *msglabel)
2099a9643ea8Slogwang {
2100a9643ea8Slogwang 
2101a9643ea8Slogwang 	LABEL_CHECK(msglabel, MAGIC_SYSV_MSG);
2102a9643ea8Slogwang 	LABEL_CHECK(msqlabel, MAGIC_SYSV_MSQ);
2103a9643ea8Slogwang 	COUNTER_INC(sysvmsg_create);
2104a9643ea8Slogwang }
2105a9643ea8Slogwang 
2106a9643ea8Slogwang COUNTER_DECL(sysvmsg_destroy_label);
2107a9643ea8Slogwang static void
test_sysvmsg_destroy_label(struct label * label)2108a9643ea8Slogwang test_sysvmsg_destroy_label(struct label *label)
2109a9643ea8Slogwang {
2110a9643ea8Slogwang 
2111a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_SYSV_MSG);
2112a9643ea8Slogwang 	COUNTER_INC(sysvmsg_destroy_label);
2113a9643ea8Slogwang }
2114a9643ea8Slogwang 
2115a9643ea8Slogwang COUNTER_DECL(sysvmsg_init_label);
2116a9643ea8Slogwang static void
test_sysvmsg_init_label(struct label * label)2117a9643ea8Slogwang test_sysvmsg_init_label(struct label *label)
2118a9643ea8Slogwang {
2119a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_SYSV_MSG);
2120a9643ea8Slogwang 	COUNTER_INC(sysvmsg_init_label);
2121a9643ea8Slogwang }
2122a9643ea8Slogwang 
2123a9643ea8Slogwang COUNTER_DECL(sysvmsq_check_msgmsq);
2124a9643ea8Slogwang static int
test_sysvmsq_check_msgmsq(struct ucred * cred,struct msg * msgptr,struct label * msglabel,struct msqid_kernel * msqkptr,struct label * msqklabel)2125a9643ea8Slogwang test_sysvmsq_check_msgmsq(struct ucred *cred, struct msg *msgptr,
2126a9643ea8Slogwang     struct label *msglabel, struct msqid_kernel *msqkptr,
2127a9643ea8Slogwang     struct label *msqklabel)
2128a9643ea8Slogwang {
2129a9643ea8Slogwang 
2130a9643ea8Slogwang 	LABEL_CHECK(msqklabel, MAGIC_SYSV_MSQ);
2131a9643ea8Slogwang 	LABEL_CHECK(msglabel, MAGIC_SYSV_MSG);
2132a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2133a9643ea8Slogwang 	COUNTER_INC(sysvmsq_check_msgmsq);
2134a9643ea8Slogwang 
2135a9643ea8Slogwang   	return (0);
2136a9643ea8Slogwang }
2137a9643ea8Slogwang 
2138a9643ea8Slogwang COUNTER_DECL(sysvmsq_check_msgrcv);
2139a9643ea8Slogwang static int
test_sysvmsq_check_msgrcv(struct ucred * cred,struct msg * msgptr,struct label * msglabel)2140a9643ea8Slogwang test_sysvmsq_check_msgrcv(struct ucred *cred, struct msg *msgptr,
2141a9643ea8Slogwang     struct label *msglabel)
2142a9643ea8Slogwang {
2143a9643ea8Slogwang 
2144a9643ea8Slogwang 	LABEL_CHECK(msglabel, MAGIC_SYSV_MSG);
2145a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2146a9643ea8Slogwang 	COUNTER_INC(sysvmsq_check_msgrcv);
2147a9643ea8Slogwang 
2148a9643ea8Slogwang 	return (0);
2149a9643ea8Slogwang }
2150a9643ea8Slogwang 
2151a9643ea8Slogwang COUNTER_DECL(sysvmsq_check_msgrmid);
2152a9643ea8Slogwang static int
test_sysvmsq_check_msgrmid(struct ucred * cred,struct msg * msgptr,struct label * msglabel)2153a9643ea8Slogwang test_sysvmsq_check_msgrmid(struct ucred *cred, struct msg *msgptr,
2154a9643ea8Slogwang     struct label *msglabel)
2155a9643ea8Slogwang {
2156a9643ea8Slogwang 
2157a9643ea8Slogwang 	LABEL_CHECK(msglabel, MAGIC_SYSV_MSG);
2158a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2159a9643ea8Slogwang 	COUNTER_INC(sysvmsq_check_msgrmid);
2160a9643ea8Slogwang 
2161a9643ea8Slogwang 	return (0);
2162a9643ea8Slogwang }
2163a9643ea8Slogwang 
2164a9643ea8Slogwang COUNTER_DECL(sysvmsq_check_msqget);
2165a9643ea8Slogwang static int
test_sysvmsq_check_msqget(struct ucred * cred,struct msqid_kernel * msqkptr,struct label * msqklabel)2166a9643ea8Slogwang test_sysvmsq_check_msqget(struct ucred *cred,
2167a9643ea8Slogwang     struct msqid_kernel *msqkptr, struct label *msqklabel)
2168a9643ea8Slogwang {
2169a9643ea8Slogwang 
2170a9643ea8Slogwang 	LABEL_CHECK(msqklabel, MAGIC_SYSV_MSQ);
2171a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2172a9643ea8Slogwang 	COUNTER_INC(sysvmsq_check_msqget);
2173a9643ea8Slogwang 
2174a9643ea8Slogwang 	return (0);
2175a9643ea8Slogwang }
2176a9643ea8Slogwang 
2177a9643ea8Slogwang COUNTER_DECL(sysvmsq_check_msqsnd);
2178a9643ea8Slogwang static int
test_sysvmsq_check_msqsnd(struct ucred * cred,struct msqid_kernel * msqkptr,struct label * msqklabel)2179a9643ea8Slogwang test_sysvmsq_check_msqsnd(struct ucred *cred,
2180a9643ea8Slogwang     struct msqid_kernel *msqkptr, struct label *msqklabel)
2181a9643ea8Slogwang {
2182a9643ea8Slogwang 
2183a9643ea8Slogwang 	LABEL_CHECK(msqklabel, MAGIC_SYSV_MSQ);
2184a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2185a9643ea8Slogwang 	COUNTER_INC(sysvmsq_check_msqsnd);
2186a9643ea8Slogwang 
2187a9643ea8Slogwang 	return (0);
2188a9643ea8Slogwang }
2189a9643ea8Slogwang 
2190a9643ea8Slogwang COUNTER_DECL(sysvmsq_check_msqrcv);
2191a9643ea8Slogwang static int
test_sysvmsq_check_msqrcv(struct ucred * cred,struct msqid_kernel * msqkptr,struct label * msqklabel)2192a9643ea8Slogwang test_sysvmsq_check_msqrcv(struct ucred *cred,
2193a9643ea8Slogwang     struct msqid_kernel *msqkptr, struct label *msqklabel)
2194a9643ea8Slogwang {
2195a9643ea8Slogwang 
2196a9643ea8Slogwang 	LABEL_CHECK(msqklabel, MAGIC_SYSV_MSQ);
2197a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2198a9643ea8Slogwang 	COUNTER_INC(sysvmsq_check_msqrcv);
2199a9643ea8Slogwang 
2200a9643ea8Slogwang 	return (0);
2201a9643ea8Slogwang }
2202a9643ea8Slogwang 
2203a9643ea8Slogwang COUNTER_DECL(sysvmsq_check_msqctl);
2204a9643ea8Slogwang static int
test_sysvmsq_check_msqctl(struct ucred * cred,struct msqid_kernel * msqkptr,struct label * msqklabel,int cmd)2205a9643ea8Slogwang test_sysvmsq_check_msqctl(struct ucred *cred,
2206a9643ea8Slogwang     struct msqid_kernel *msqkptr, struct label *msqklabel, int cmd)
2207a9643ea8Slogwang {
2208a9643ea8Slogwang 
2209a9643ea8Slogwang 	LABEL_CHECK(msqklabel, MAGIC_SYSV_MSQ);
2210a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2211a9643ea8Slogwang 	COUNTER_INC(sysvmsq_check_msqctl);
2212a9643ea8Slogwang 
2213a9643ea8Slogwang 	return (0);
2214a9643ea8Slogwang }
2215a9643ea8Slogwang 
2216a9643ea8Slogwang COUNTER_DECL(sysvmsq_cleanup);
2217a9643ea8Slogwang static void
test_sysvmsq_cleanup(struct label * msqlabel)2218a9643ea8Slogwang test_sysvmsq_cleanup(struct label *msqlabel)
2219a9643ea8Slogwang {
2220a9643ea8Slogwang 
2221a9643ea8Slogwang 	LABEL_CHECK(msqlabel, MAGIC_SYSV_MSQ);
2222a9643ea8Slogwang 	COUNTER_INC(sysvmsq_cleanup);
2223a9643ea8Slogwang }
2224a9643ea8Slogwang 
2225a9643ea8Slogwang COUNTER_DECL(sysvmsq_create);
2226a9643ea8Slogwang static void
test_sysvmsq_create(struct ucred * cred,struct msqid_kernel * msqkptr,struct label * msqlabel)2227a9643ea8Slogwang test_sysvmsq_create(struct ucred *cred,
2228a9643ea8Slogwang     struct msqid_kernel *msqkptr, struct label *msqlabel)
2229a9643ea8Slogwang {
2230a9643ea8Slogwang 
2231a9643ea8Slogwang 	LABEL_CHECK(msqlabel, MAGIC_SYSV_MSQ);
2232a9643ea8Slogwang 	COUNTER_INC(sysvmsq_create);
2233a9643ea8Slogwang }
2234a9643ea8Slogwang 
2235a9643ea8Slogwang COUNTER_DECL(sysvmsq_destroy_label);
2236a9643ea8Slogwang static void
test_sysvmsq_destroy_label(struct label * label)2237a9643ea8Slogwang test_sysvmsq_destroy_label(struct label *label)
2238a9643ea8Slogwang {
2239a9643ea8Slogwang 
2240a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_SYSV_MSQ);
2241a9643ea8Slogwang 	COUNTER_INC(sysvmsq_destroy_label);
2242a9643ea8Slogwang }
2243a9643ea8Slogwang 
2244a9643ea8Slogwang COUNTER_DECL(sysvmsq_init_label);
2245a9643ea8Slogwang static void
test_sysvmsq_init_label(struct label * label)2246a9643ea8Slogwang test_sysvmsq_init_label(struct label *label)
2247a9643ea8Slogwang {
2248a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_SYSV_MSQ);
2249a9643ea8Slogwang 	COUNTER_INC(sysvmsq_init_label);
2250a9643ea8Slogwang }
2251a9643ea8Slogwang 
2252a9643ea8Slogwang COUNTER_DECL(sysvsem_check_semctl);
2253a9643ea8Slogwang static int
test_sysvsem_check_semctl(struct ucred * cred,struct semid_kernel * semakptr,struct label * semaklabel,int cmd)2254a9643ea8Slogwang test_sysvsem_check_semctl(struct ucred *cred,
2255a9643ea8Slogwang     struct semid_kernel *semakptr, struct label *semaklabel, int cmd)
2256a9643ea8Slogwang {
2257a9643ea8Slogwang 
2258a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2259a9643ea8Slogwang 	LABEL_CHECK(semaklabel, MAGIC_SYSV_SEM);
2260a9643ea8Slogwang 	COUNTER_INC(sysvsem_check_semctl);
2261a9643ea8Slogwang 
2262a9643ea8Slogwang   	return (0);
2263a9643ea8Slogwang }
2264a9643ea8Slogwang 
2265a9643ea8Slogwang COUNTER_DECL(sysvsem_check_semget);
2266a9643ea8Slogwang static int
test_sysvsem_check_semget(struct ucred * cred,struct semid_kernel * semakptr,struct label * semaklabel)2267a9643ea8Slogwang test_sysvsem_check_semget(struct ucred *cred,
2268a9643ea8Slogwang     struct semid_kernel *semakptr, struct label *semaklabel)
2269a9643ea8Slogwang {
2270a9643ea8Slogwang 
2271a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2272a9643ea8Slogwang 	LABEL_CHECK(semaklabel, MAGIC_SYSV_SEM);
2273a9643ea8Slogwang 	COUNTER_INC(sysvsem_check_semget);
2274a9643ea8Slogwang 
2275a9643ea8Slogwang 	return (0);
2276a9643ea8Slogwang }
2277a9643ea8Slogwang 
2278a9643ea8Slogwang COUNTER_DECL(sysvsem_check_semop);
2279a9643ea8Slogwang static int
test_sysvsem_check_semop(struct ucred * cred,struct semid_kernel * semakptr,struct label * semaklabel,size_t accesstype)2280a9643ea8Slogwang test_sysvsem_check_semop(struct ucred *cred,
2281a9643ea8Slogwang     struct semid_kernel *semakptr, struct label *semaklabel, size_t accesstype)
2282a9643ea8Slogwang {
2283a9643ea8Slogwang 
2284a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2285a9643ea8Slogwang 	LABEL_CHECK(semaklabel, MAGIC_SYSV_SEM);
2286a9643ea8Slogwang 	COUNTER_INC(sysvsem_check_semop);
2287a9643ea8Slogwang 
2288a9643ea8Slogwang 	return (0);
2289a9643ea8Slogwang }
2290a9643ea8Slogwang 
2291a9643ea8Slogwang COUNTER_DECL(sysvsem_cleanup);
2292a9643ea8Slogwang static void
test_sysvsem_cleanup(struct label * semalabel)2293a9643ea8Slogwang test_sysvsem_cleanup(struct label *semalabel)
2294a9643ea8Slogwang {
2295a9643ea8Slogwang 
2296a9643ea8Slogwang 	LABEL_CHECK(semalabel, MAGIC_SYSV_SEM);
2297a9643ea8Slogwang 	COUNTER_INC(sysvsem_cleanup);
2298a9643ea8Slogwang }
2299a9643ea8Slogwang 
2300a9643ea8Slogwang COUNTER_DECL(sysvsem_create);
2301a9643ea8Slogwang static void
test_sysvsem_create(struct ucred * cred,struct semid_kernel * semakptr,struct label * semalabel)2302a9643ea8Slogwang test_sysvsem_create(struct ucred *cred, struct semid_kernel *semakptr,
2303a9643ea8Slogwang     struct label *semalabel)
2304a9643ea8Slogwang {
2305a9643ea8Slogwang 
2306a9643ea8Slogwang 	LABEL_CHECK(semalabel, MAGIC_SYSV_SEM);
2307a9643ea8Slogwang 	COUNTER_INC(sysvsem_create);
2308a9643ea8Slogwang }
2309a9643ea8Slogwang 
2310a9643ea8Slogwang COUNTER_DECL(sysvsem_destroy_label);
2311a9643ea8Slogwang static void
test_sysvsem_destroy_label(struct label * label)2312a9643ea8Slogwang test_sysvsem_destroy_label(struct label *label)
2313a9643ea8Slogwang {
2314a9643ea8Slogwang 
2315a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_SYSV_SEM);
2316a9643ea8Slogwang 	COUNTER_INC(sysvsem_destroy_label);
2317a9643ea8Slogwang }
2318a9643ea8Slogwang 
2319a9643ea8Slogwang COUNTER_DECL(sysvsem_init_label);
2320a9643ea8Slogwang static void
test_sysvsem_init_label(struct label * label)2321a9643ea8Slogwang test_sysvsem_init_label(struct label *label)
2322a9643ea8Slogwang {
2323a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_SYSV_SEM);
2324a9643ea8Slogwang 	COUNTER_INC(sysvsem_init_label);
2325a9643ea8Slogwang }
2326a9643ea8Slogwang 
2327a9643ea8Slogwang COUNTER_DECL(sysvshm_check_shmat);
2328a9643ea8Slogwang static int
test_sysvshm_check_shmat(struct ucred * cred,struct shmid_kernel * shmsegptr,struct label * shmseglabel,int shmflg)2329a9643ea8Slogwang test_sysvshm_check_shmat(struct ucred *cred,
2330a9643ea8Slogwang     struct shmid_kernel *shmsegptr, struct label *shmseglabel, int shmflg)
2331a9643ea8Slogwang {
2332a9643ea8Slogwang 
2333a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2334a9643ea8Slogwang 	LABEL_CHECK(shmseglabel, MAGIC_SYSV_SHM);
2335a9643ea8Slogwang 	COUNTER_INC(sysvshm_check_shmat);
2336a9643ea8Slogwang 
2337a9643ea8Slogwang   	return (0);
2338a9643ea8Slogwang }
2339a9643ea8Slogwang 
2340a9643ea8Slogwang COUNTER_DECL(sysvshm_check_shmctl);
2341a9643ea8Slogwang static int
test_sysvshm_check_shmctl(struct ucred * cred,struct shmid_kernel * shmsegptr,struct label * shmseglabel,int cmd)2342a9643ea8Slogwang test_sysvshm_check_shmctl(struct ucred *cred,
2343a9643ea8Slogwang     struct shmid_kernel *shmsegptr, struct label *shmseglabel, int cmd)
2344a9643ea8Slogwang {
2345a9643ea8Slogwang 
2346a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2347a9643ea8Slogwang 	LABEL_CHECK(shmseglabel, MAGIC_SYSV_SHM);
2348a9643ea8Slogwang 	COUNTER_INC(sysvshm_check_shmctl);
2349a9643ea8Slogwang 
2350a9643ea8Slogwang   	return (0);
2351a9643ea8Slogwang }
2352a9643ea8Slogwang 
2353a9643ea8Slogwang COUNTER_DECL(sysvshm_check_shmdt);
2354a9643ea8Slogwang static int
test_sysvshm_check_shmdt(struct ucred * cred,struct shmid_kernel * shmsegptr,struct label * shmseglabel)2355a9643ea8Slogwang test_sysvshm_check_shmdt(struct ucred *cred,
2356a9643ea8Slogwang     struct shmid_kernel *shmsegptr, struct label *shmseglabel)
2357a9643ea8Slogwang {
2358a9643ea8Slogwang 
2359a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2360a9643ea8Slogwang 	LABEL_CHECK(shmseglabel, MAGIC_SYSV_SHM);
2361a9643ea8Slogwang 	COUNTER_INC(sysvshm_check_shmdt);
2362a9643ea8Slogwang 
2363a9643ea8Slogwang 	return (0);
2364a9643ea8Slogwang }
2365a9643ea8Slogwang 
2366a9643ea8Slogwang COUNTER_DECL(sysvshm_check_shmget);
2367a9643ea8Slogwang static int
test_sysvshm_check_shmget(struct ucred * cred,struct shmid_kernel * shmsegptr,struct label * shmseglabel,int shmflg)2368a9643ea8Slogwang test_sysvshm_check_shmget(struct ucred *cred,
2369a9643ea8Slogwang     struct shmid_kernel *shmsegptr, struct label *shmseglabel, int shmflg)
2370a9643ea8Slogwang {
2371a9643ea8Slogwang 
2372a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2373a9643ea8Slogwang 	LABEL_CHECK(shmseglabel, MAGIC_SYSV_SHM);
2374a9643ea8Slogwang 	COUNTER_INC(sysvshm_check_shmget);
2375a9643ea8Slogwang 
2376a9643ea8Slogwang 	return (0);
2377a9643ea8Slogwang }
2378a9643ea8Slogwang 
2379a9643ea8Slogwang COUNTER_DECL(sysvshm_cleanup);
2380a9643ea8Slogwang static void
test_sysvshm_cleanup(struct label * shmlabel)2381a9643ea8Slogwang test_sysvshm_cleanup(struct label *shmlabel)
2382a9643ea8Slogwang {
2383a9643ea8Slogwang 
2384a9643ea8Slogwang 	LABEL_CHECK(shmlabel, MAGIC_SYSV_SHM);
2385a9643ea8Slogwang 	COUNTER_INC(sysvshm_cleanup);
2386a9643ea8Slogwang }
2387a9643ea8Slogwang 
2388a9643ea8Slogwang COUNTER_DECL(sysvshm_create);
2389a9643ea8Slogwang static void
test_sysvshm_create(struct ucred * cred,struct shmid_kernel * shmsegptr,struct label * shmlabel)2390a9643ea8Slogwang test_sysvshm_create(struct ucred *cred, struct shmid_kernel *shmsegptr,
2391a9643ea8Slogwang     struct label *shmlabel)
2392a9643ea8Slogwang {
2393a9643ea8Slogwang 
2394a9643ea8Slogwang 	LABEL_CHECK(shmlabel, MAGIC_SYSV_SHM);
2395a9643ea8Slogwang 	COUNTER_INC(sysvshm_create);
2396a9643ea8Slogwang }
2397a9643ea8Slogwang 
2398a9643ea8Slogwang COUNTER_DECL(sysvshm_destroy_label);
2399a9643ea8Slogwang static void
test_sysvshm_destroy_label(struct label * label)2400a9643ea8Slogwang test_sysvshm_destroy_label(struct label *label)
2401a9643ea8Slogwang {
2402a9643ea8Slogwang 
2403a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_SYSV_SHM);
2404a9643ea8Slogwang 	COUNTER_INC(sysvshm_destroy_label);
2405a9643ea8Slogwang }
2406a9643ea8Slogwang 
2407a9643ea8Slogwang COUNTER_DECL(sysvshm_init_label);
2408a9643ea8Slogwang static void
test_sysvshm_init_label(struct label * label)2409a9643ea8Slogwang test_sysvshm_init_label(struct label *label)
2410a9643ea8Slogwang {
2411a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_SYSV_SHM);
2412a9643ea8Slogwang 	COUNTER_INC(sysvshm_init_label);
2413a9643ea8Slogwang }
2414a9643ea8Slogwang 
2415a9643ea8Slogwang COUNTER_DECL(thread_userret);
2416a9643ea8Slogwang static void
test_thread_userret(struct thread * td)2417a9643ea8Slogwang test_thread_userret(struct thread *td)
2418a9643ea8Slogwang {
2419a9643ea8Slogwang 
2420a9643ea8Slogwang 	COUNTER_INC(thread_userret);
2421a9643ea8Slogwang }
2422a9643ea8Slogwang 
2423a9643ea8Slogwang COUNTER_DECL(vnode_associate_extattr);
2424a9643ea8Slogwang static int
test_vnode_associate_extattr(struct mount * mp,struct label * mplabel,struct vnode * vp,struct label * vplabel)2425a9643ea8Slogwang test_vnode_associate_extattr(struct mount *mp, struct label *mplabel,
2426a9643ea8Slogwang     struct vnode *vp, struct label *vplabel)
2427a9643ea8Slogwang {
2428a9643ea8Slogwang 
2429a9643ea8Slogwang 	LABEL_CHECK(mplabel, MAGIC_MOUNT);
2430a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2431a9643ea8Slogwang 	COUNTER_INC(vnode_associate_extattr);
2432a9643ea8Slogwang 
2433a9643ea8Slogwang 	return (0);
2434a9643ea8Slogwang }
2435a9643ea8Slogwang 
2436a9643ea8Slogwang COUNTER_DECL(vnode_associate_singlelabel);
2437a9643ea8Slogwang static void
test_vnode_associate_singlelabel(struct mount * mp,struct label * mplabel,struct vnode * vp,struct label * vplabel)2438a9643ea8Slogwang test_vnode_associate_singlelabel(struct mount *mp, struct label *mplabel,
2439a9643ea8Slogwang     struct vnode *vp, struct label *vplabel)
2440a9643ea8Slogwang {
2441a9643ea8Slogwang 
2442a9643ea8Slogwang 	LABEL_CHECK(mplabel, MAGIC_MOUNT);
2443a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2444a9643ea8Slogwang 	COUNTER_INC(vnode_associate_singlelabel);
2445a9643ea8Slogwang }
2446a9643ea8Slogwang 
2447a9643ea8Slogwang COUNTER_DECL(vnode_check_access);
2448a9643ea8Slogwang static int
test_vnode_check_access(struct ucred * cred,struct vnode * vp,struct label * vplabel,accmode_t accmode)2449a9643ea8Slogwang test_vnode_check_access(struct ucred *cred, struct vnode *vp,
2450a9643ea8Slogwang     struct label *vplabel, accmode_t accmode)
2451a9643ea8Slogwang {
2452a9643ea8Slogwang 
2453a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2454a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2455a9643ea8Slogwang 	COUNTER_INC(vnode_check_access);
2456a9643ea8Slogwang 
2457a9643ea8Slogwang 	return (0);
2458a9643ea8Slogwang }
2459a9643ea8Slogwang 
2460a9643ea8Slogwang COUNTER_DECL(vnode_check_chdir);
2461a9643ea8Slogwang static int
test_vnode_check_chdir(struct ucred * cred,struct vnode * dvp,struct label * dvplabel)2462a9643ea8Slogwang test_vnode_check_chdir(struct ucred *cred, struct vnode *dvp,
2463a9643ea8Slogwang     struct label *dvplabel)
2464a9643ea8Slogwang {
2465a9643ea8Slogwang 
2466a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2467a9643ea8Slogwang 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2468a9643ea8Slogwang 	COUNTER_INC(vnode_check_chdir);
2469a9643ea8Slogwang 
2470a9643ea8Slogwang 	return (0);
2471a9643ea8Slogwang }
2472a9643ea8Slogwang 
2473a9643ea8Slogwang COUNTER_DECL(vnode_check_chroot);
2474a9643ea8Slogwang static int
test_vnode_check_chroot(struct ucred * cred,struct vnode * dvp,struct label * dvplabel)2475a9643ea8Slogwang test_vnode_check_chroot(struct ucred *cred, struct vnode *dvp,
2476a9643ea8Slogwang     struct label *dvplabel)
2477a9643ea8Slogwang {
2478a9643ea8Slogwang 
2479a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2480a9643ea8Slogwang 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2481a9643ea8Slogwang 	COUNTER_INC(vnode_check_chroot);
2482a9643ea8Slogwang 
2483a9643ea8Slogwang 	return (0);
2484a9643ea8Slogwang }
2485a9643ea8Slogwang 
2486a9643ea8Slogwang COUNTER_DECL(vnode_check_create);
2487a9643ea8Slogwang static int
test_vnode_check_create(struct ucred * cred,struct vnode * dvp,struct label * dvplabel,struct componentname * cnp,struct vattr * vap)2488a9643ea8Slogwang test_vnode_check_create(struct ucred *cred, struct vnode *dvp,
2489a9643ea8Slogwang     struct label *dvplabel, struct componentname *cnp, struct vattr *vap)
2490a9643ea8Slogwang {
2491a9643ea8Slogwang 
2492a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2493a9643ea8Slogwang 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2494a9643ea8Slogwang 	COUNTER_INC(vnode_check_create);
2495a9643ea8Slogwang 
2496a9643ea8Slogwang 	return (0);
2497a9643ea8Slogwang }
2498a9643ea8Slogwang 
2499a9643ea8Slogwang COUNTER_DECL(vnode_check_deleteacl);
2500a9643ea8Slogwang static int
test_vnode_check_deleteacl(struct ucred * cred,struct vnode * vp,struct label * vplabel,acl_type_t type)2501a9643ea8Slogwang test_vnode_check_deleteacl(struct ucred *cred, struct vnode *vp,
2502a9643ea8Slogwang     struct label *vplabel, acl_type_t type)
2503a9643ea8Slogwang {
2504a9643ea8Slogwang 
2505a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2506a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2507a9643ea8Slogwang 	COUNTER_INC(vnode_check_deleteacl);
2508a9643ea8Slogwang 
2509a9643ea8Slogwang 	return (0);
2510a9643ea8Slogwang }
2511a9643ea8Slogwang 
2512a9643ea8Slogwang COUNTER_DECL(vnode_check_deleteextattr);
2513a9643ea8Slogwang static int
test_vnode_check_deleteextattr(struct ucred * cred,struct vnode * vp,struct label * vplabel,int attrnamespace,const char * name)2514a9643ea8Slogwang test_vnode_check_deleteextattr(struct ucred *cred, struct vnode *vp,
2515a9643ea8Slogwang     struct label *vplabel, int attrnamespace, const char *name)
2516a9643ea8Slogwang {
2517a9643ea8Slogwang 
2518a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2519a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2520a9643ea8Slogwang 	COUNTER_INC(vnode_check_deleteextattr);
2521a9643ea8Slogwang 
2522a9643ea8Slogwang 	return (0);
2523a9643ea8Slogwang }
2524a9643ea8Slogwang 
2525a9643ea8Slogwang COUNTER_DECL(vnode_check_exec);
2526a9643ea8Slogwang static int
test_vnode_check_exec(struct ucred * cred,struct vnode * vp,struct label * vplabel,struct image_params * imgp,struct label * execlabel)2527a9643ea8Slogwang test_vnode_check_exec(struct ucred *cred, struct vnode *vp,
2528a9643ea8Slogwang     struct label *vplabel, struct image_params *imgp,
2529a9643ea8Slogwang     struct label *execlabel)
2530a9643ea8Slogwang {
2531a9643ea8Slogwang 
2532a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2533a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2534a9643ea8Slogwang 	LABEL_CHECK(execlabel, MAGIC_CRED);
2535a9643ea8Slogwang 	COUNTER_INC(vnode_check_exec);
2536a9643ea8Slogwang 
2537a9643ea8Slogwang 	return (0);
2538a9643ea8Slogwang }
2539a9643ea8Slogwang 
2540a9643ea8Slogwang COUNTER_DECL(vnode_check_getacl);
2541a9643ea8Slogwang static int
test_vnode_check_getacl(struct ucred * cred,struct vnode * vp,struct label * vplabel,acl_type_t type)2542a9643ea8Slogwang test_vnode_check_getacl(struct ucred *cred, struct vnode *vp,
2543a9643ea8Slogwang     struct label *vplabel, acl_type_t type)
2544a9643ea8Slogwang {
2545a9643ea8Slogwang 
2546a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2547a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2548a9643ea8Slogwang 	COUNTER_INC(vnode_check_getacl);
2549a9643ea8Slogwang 
2550a9643ea8Slogwang 	return (0);
2551a9643ea8Slogwang }
2552a9643ea8Slogwang 
2553a9643ea8Slogwang COUNTER_DECL(vnode_check_getextattr);
2554a9643ea8Slogwang static int
test_vnode_check_getextattr(struct ucred * cred,struct vnode * vp,struct label * vplabel,int attrnamespace,const char * name)2555a9643ea8Slogwang test_vnode_check_getextattr(struct ucred *cred, struct vnode *vp,
2556a9643ea8Slogwang     struct label *vplabel, int attrnamespace, const char *name)
2557a9643ea8Slogwang {
2558a9643ea8Slogwang 
2559a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2560a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2561a9643ea8Slogwang 	COUNTER_INC(vnode_check_getextattr);
2562a9643ea8Slogwang 
2563a9643ea8Slogwang 	return (0);
2564a9643ea8Slogwang }
2565a9643ea8Slogwang 
2566a9643ea8Slogwang COUNTER_DECL(vnode_check_link);
2567a9643ea8Slogwang static int
test_vnode_check_link(struct ucred * cred,struct vnode * dvp,struct label * dvplabel,struct vnode * vp,struct label * vplabel,struct componentname * cnp)2568a9643ea8Slogwang test_vnode_check_link(struct ucred *cred, struct vnode *dvp,
2569a9643ea8Slogwang     struct label *dvplabel, struct vnode *vp, struct label *vplabel,
2570a9643ea8Slogwang     struct componentname *cnp)
2571a9643ea8Slogwang {
2572a9643ea8Slogwang 
2573a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2574a9643ea8Slogwang 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2575a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2576a9643ea8Slogwang 	COUNTER_INC(vnode_check_link);
2577a9643ea8Slogwang 
2578a9643ea8Slogwang 	return (0);
2579a9643ea8Slogwang }
2580a9643ea8Slogwang 
2581a9643ea8Slogwang COUNTER_DECL(vnode_check_listextattr);
2582a9643ea8Slogwang static int
test_vnode_check_listextattr(struct ucred * cred,struct vnode * vp,struct label * vplabel,int attrnamespace)2583a9643ea8Slogwang test_vnode_check_listextattr(struct ucred *cred, struct vnode *vp,
2584a9643ea8Slogwang     struct label *vplabel, int attrnamespace)
2585a9643ea8Slogwang {
2586a9643ea8Slogwang 
2587a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2588a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2589a9643ea8Slogwang 	COUNTER_INC(vnode_check_listextattr);
2590a9643ea8Slogwang 
2591a9643ea8Slogwang 	return (0);
2592a9643ea8Slogwang }
2593a9643ea8Slogwang 
2594a9643ea8Slogwang COUNTER_DECL(vnode_check_lookup);
2595a9643ea8Slogwang static int
test_vnode_check_lookup(struct ucred * cred,struct vnode * dvp,struct label * dvplabel,struct componentname * cnp)2596a9643ea8Slogwang test_vnode_check_lookup(struct ucred *cred, struct vnode *dvp,
2597a9643ea8Slogwang     struct label *dvplabel, struct componentname *cnp)
2598a9643ea8Slogwang {
2599a9643ea8Slogwang 
2600a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2601a9643ea8Slogwang 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2602a9643ea8Slogwang 	COUNTER_INC(vnode_check_lookup);
2603a9643ea8Slogwang 
2604a9643ea8Slogwang 	return (0);
2605a9643ea8Slogwang }
2606a9643ea8Slogwang 
2607a9643ea8Slogwang COUNTER_DECL(vnode_check_mmap);
2608a9643ea8Slogwang static int
test_vnode_check_mmap(struct ucred * cred,struct vnode * vp,struct label * vplabel,int prot,int flags)2609a9643ea8Slogwang test_vnode_check_mmap(struct ucred *cred, struct vnode *vp,
2610a9643ea8Slogwang     struct label *vplabel, int prot, int flags)
2611a9643ea8Slogwang {
2612a9643ea8Slogwang 
2613a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2614a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2615a9643ea8Slogwang 	COUNTER_INC(vnode_check_mmap);
2616a9643ea8Slogwang 
2617a9643ea8Slogwang 	return (0);
2618a9643ea8Slogwang }
2619a9643ea8Slogwang 
2620a9643ea8Slogwang COUNTER_DECL(vnode_check_open);
2621a9643ea8Slogwang static int
test_vnode_check_open(struct ucred * cred,struct vnode * vp,struct label * vplabel,accmode_t accmode)2622a9643ea8Slogwang test_vnode_check_open(struct ucred *cred, struct vnode *vp,
2623a9643ea8Slogwang     struct label *vplabel, accmode_t accmode)
2624a9643ea8Slogwang {
2625a9643ea8Slogwang 
2626a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2627a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2628a9643ea8Slogwang 	COUNTER_INC(vnode_check_open);
2629a9643ea8Slogwang 
2630a9643ea8Slogwang 	return (0);
2631a9643ea8Slogwang }
2632a9643ea8Slogwang 
2633a9643ea8Slogwang COUNTER_DECL(vnode_check_poll);
2634a9643ea8Slogwang static int
test_vnode_check_poll(struct ucred * active_cred,struct ucred * file_cred,struct vnode * vp,struct label * vplabel)2635a9643ea8Slogwang test_vnode_check_poll(struct ucred *active_cred, struct ucred *file_cred,
2636a9643ea8Slogwang     struct vnode *vp, struct label *vplabel)
2637a9643ea8Slogwang {
2638a9643ea8Slogwang 
2639a9643ea8Slogwang 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
2640a9643ea8Slogwang 	if (file_cred != NULL)
2641a9643ea8Slogwang 		LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
2642a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2643a9643ea8Slogwang 	COUNTER_INC(vnode_check_poll);
2644a9643ea8Slogwang 
2645a9643ea8Slogwang 	return (0);
2646a9643ea8Slogwang }
2647a9643ea8Slogwang 
2648a9643ea8Slogwang COUNTER_DECL(vnode_check_read);
2649a9643ea8Slogwang static int
test_vnode_check_read(struct ucred * active_cred,struct ucred * file_cred,struct vnode * vp,struct label * vplabel)2650a9643ea8Slogwang test_vnode_check_read(struct ucred *active_cred, struct ucred *file_cred,
2651a9643ea8Slogwang     struct vnode *vp, struct label *vplabel)
2652a9643ea8Slogwang {
2653a9643ea8Slogwang 
2654a9643ea8Slogwang 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
2655a9643ea8Slogwang 	if (file_cred != NULL)
2656a9643ea8Slogwang 		LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
2657a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2658a9643ea8Slogwang 	COUNTER_INC(vnode_check_read);
2659a9643ea8Slogwang 
2660a9643ea8Slogwang 	return (0);
2661a9643ea8Slogwang }
2662a9643ea8Slogwang 
2663a9643ea8Slogwang COUNTER_DECL(vnode_check_readdir);
2664a9643ea8Slogwang static int
test_vnode_check_readdir(struct ucred * cred,struct vnode * dvp,struct label * dvplabel)2665a9643ea8Slogwang test_vnode_check_readdir(struct ucred *cred, struct vnode *dvp,
2666a9643ea8Slogwang     struct label *dvplabel)
2667a9643ea8Slogwang {
2668a9643ea8Slogwang 
2669a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2670a9643ea8Slogwang 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2671a9643ea8Slogwang 	COUNTER_INC(vnode_check_readdir);
2672a9643ea8Slogwang 
2673a9643ea8Slogwang 	return (0);
2674a9643ea8Slogwang }
2675a9643ea8Slogwang 
2676a9643ea8Slogwang COUNTER_DECL(vnode_check_readlink);
2677a9643ea8Slogwang static int
test_vnode_check_readlink(struct ucred * cred,struct vnode * vp,struct label * vplabel)2678a9643ea8Slogwang test_vnode_check_readlink(struct ucred *cred, struct vnode *vp,
2679a9643ea8Slogwang     struct label *vplabel)
2680a9643ea8Slogwang {
2681a9643ea8Slogwang 
2682a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2683a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2684a9643ea8Slogwang 	COUNTER_INC(vnode_check_readlink);
2685a9643ea8Slogwang 
2686a9643ea8Slogwang 	return (0);
2687a9643ea8Slogwang }
2688a9643ea8Slogwang 
2689a9643ea8Slogwang COUNTER_DECL(vnode_check_relabel);
2690a9643ea8Slogwang static int
test_vnode_check_relabel(struct ucred * cred,struct vnode * vp,struct label * vplabel,struct label * newlabel)2691a9643ea8Slogwang test_vnode_check_relabel(struct ucred *cred, struct vnode *vp,
2692a9643ea8Slogwang     struct label *vplabel, struct label *newlabel)
2693a9643ea8Slogwang {
2694a9643ea8Slogwang 
2695a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2696a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2697a9643ea8Slogwang 	LABEL_CHECK(newlabel, MAGIC_VNODE);
2698a9643ea8Slogwang 	COUNTER_INC(vnode_check_relabel);
2699a9643ea8Slogwang 
2700a9643ea8Slogwang 	return (0);
2701a9643ea8Slogwang }
2702a9643ea8Slogwang 
2703a9643ea8Slogwang COUNTER_DECL(vnode_check_rename_from);
2704a9643ea8Slogwang static int
test_vnode_check_rename_from(struct ucred * cred,struct vnode * dvp,struct label * dvplabel,struct vnode * vp,struct label * vplabel,struct componentname * cnp)2705a9643ea8Slogwang test_vnode_check_rename_from(struct ucred *cred, struct vnode *dvp,
2706a9643ea8Slogwang     struct label *dvplabel, struct vnode *vp, struct label *vplabel,
2707a9643ea8Slogwang     struct componentname *cnp)
2708a9643ea8Slogwang {
2709a9643ea8Slogwang 
2710a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2711a9643ea8Slogwang 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2712a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2713a9643ea8Slogwang 	COUNTER_INC(vnode_check_rename_from);
2714a9643ea8Slogwang 
2715a9643ea8Slogwang 	return (0);
2716a9643ea8Slogwang }
2717a9643ea8Slogwang 
2718a9643ea8Slogwang COUNTER_DECL(vnode_check_rename_to);
2719a9643ea8Slogwang static int
test_vnode_check_rename_to(struct ucred * cred,struct vnode * dvp,struct label * dvplabel,struct vnode * vp,struct label * vplabel,int samedir,struct componentname * cnp)2720a9643ea8Slogwang test_vnode_check_rename_to(struct ucred *cred, struct vnode *dvp,
2721a9643ea8Slogwang     struct label *dvplabel, struct vnode *vp, struct label *vplabel,
2722a9643ea8Slogwang     int samedir, struct componentname *cnp)
2723a9643ea8Slogwang {
2724a9643ea8Slogwang 
2725a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2726a9643ea8Slogwang 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2727a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2728a9643ea8Slogwang 	COUNTER_INC(vnode_check_rename_to);
2729a9643ea8Slogwang 
2730a9643ea8Slogwang 	return (0);
2731a9643ea8Slogwang }
2732a9643ea8Slogwang 
2733a9643ea8Slogwang COUNTER_DECL(vnode_check_revoke);
2734a9643ea8Slogwang static int
test_vnode_check_revoke(struct ucred * cred,struct vnode * vp,struct label * vplabel)2735a9643ea8Slogwang test_vnode_check_revoke(struct ucred *cred, struct vnode *vp,
2736a9643ea8Slogwang     struct label *vplabel)
2737a9643ea8Slogwang {
2738a9643ea8Slogwang 
2739a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2740a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2741a9643ea8Slogwang 	COUNTER_INC(vnode_check_revoke);
2742a9643ea8Slogwang 
2743a9643ea8Slogwang 	return (0);
2744a9643ea8Slogwang }
2745a9643ea8Slogwang 
2746a9643ea8Slogwang COUNTER_DECL(vnode_check_setacl);
2747a9643ea8Slogwang static int
test_vnode_check_setacl(struct ucred * cred,struct vnode * vp,struct label * vplabel,acl_type_t type,struct acl * acl)2748a9643ea8Slogwang test_vnode_check_setacl(struct ucred *cred, struct vnode *vp,
2749a9643ea8Slogwang     struct label *vplabel, acl_type_t type, struct acl *acl)
2750a9643ea8Slogwang {
2751a9643ea8Slogwang 
2752a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2753a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2754a9643ea8Slogwang 	COUNTER_INC(vnode_check_setacl);
2755a9643ea8Slogwang 
2756a9643ea8Slogwang 	return (0);
2757a9643ea8Slogwang }
2758a9643ea8Slogwang 
2759a9643ea8Slogwang COUNTER_DECL(vnode_check_setextattr);
2760a9643ea8Slogwang static int
test_vnode_check_setextattr(struct ucred * cred,struct vnode * vp,struct label * vplabel,int attrnamespace,const char * name)2761a9643ea8Slogwang test_vnode_check_setextattr(struct ucred *cred, struct vnode *vp,
2762a9643ea8Slogwang     struct label *vplabel, int attrnamespace, const char *name)
2763a9643ea8Slogwang {
2764a9643ea8Slogwang 
2765a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2766a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2767a9643ea8Slogwang 	COUNTER_INC(vnode_check_setextattr);
2768a9643ea8Slogwang 
2769a9643ea8Slogwang 	return (0);
2770a9643ea8Slogwang }
2771a9643ea8Slogwang 
2772a9643ea8Slogwang COUNTER_DECL(vnode_check_setflags);
2773a9643ea8Slogwang static int
test_vnode_check_setflags(struct ucred * cred,struct vnode * vp,struct label * vplabel,u_long flags)2774a9643ea8Slogwang test_vnode_check_setflags(struct ucred *cred, struct vnode *vp,
2775a9643ea8Slogwang     struct label *vplabel, u_long flags)
2776a9643ea8Slogwang {
2777a9643ea8Slogwang 
2778a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2779a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2780a9643ea8Slogwang 	COUNTER_INC(vnode_check_setflags);
2781a9643ea8Slogwang 
2782a9643ea8Slogwang 	return (0);
2783a9643ea8Slogwang }
2784a9643ea8Slogwang 
2785a9643ea8Slogwang COUNTER_DECL(vnode_check_setmode);
2786a9643ea8Slogwang static int
test_vnode_check_setmode(struct ucred * cred,struct vnode * vp,struct label * vplabel,mode_t mode)2787a9643ea8Slogwang test_vnode_check_setmode(struct ucred *cred, struct vnode *vp,
2788a9643ea8Slogwang     struct label *vplabel, mode_t mode)
2789a9643ea8Slogwang {
2790a9643ea8Slogwang 
2791a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2792a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2793a9643ea8Slogwang 	COUNTER_INC(vnode_check_setmode);
2794a9643ea8Slogwang 
2795a9643ea8Slogwang 	return (0);
2796a9643ea8Slogwang }
2797a9643ea8Slogwang 
2798a9643ea8Slogwang COUNTER_DECL(vnode_check_setowner);
2799a9643ea8Slogwang static int
test_vnode_check_setowner(struct ucred * cred,struct vnode * vp,struct label * vplabel,uid_t uid,gid_t gid)2800a9643ea8Slogwang test_vnode_check_setowner(struct ucred *cred, struct vnode *vp,
2801a9643ea8Slogwang     struct label *vplabel, uid_t uid, gid_t gid)
2802a9643ea8Slogwang {
2803a9643ea8Slogwang 
2804a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2805a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2806a9643ea8Slogwang 	COUNTER_INC(vnode_check_setowner);
2807a9643ea8Slogwang 
2808a9643ea8Slogwang 	return (0);
2809a9643ea8Slogwang }
2810a9643ea8Slogwang 
2811a9643ea8Slogwang COUNTER_DECL(vnode_check_setutimes);
2812a9643ea8Slogwang static int
test_vnode_check_setutimes(struct ucred * cred,struct vnode * vp,struct label * vplabel,struct timespec atime,struct timespec mtime)2813a9643ea8Slogwang test_vnode_check_setutimes(struct ucred *cred, struct vnode *vp,
2814a9643ea8Slogwang     struct label *vplabel, struct timespec atime, struct timespec mtime)
2815a9643ea8Slogwang {
2816a9643ea8Slogwang 
2817a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2818a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2819a9643ea8Slogwang 	COUNTER_INC(vnode_check_setutimes);
2820a9643ea8Slogwang 
2821a9643ea8Slogwang 	return (0);
2822a9643ea8Slogwang }
2823a9643ea8Slogwang 
2824a9643ea8Slogwang COUNTER_DECL(vnode_check_stat);
2825a9643ea8Slogwang static int
test_vnode_check_stat(struct ucred * active_cred,struct ucred * file_cred,struct vnode * vp,struct label * vplabel)2826a9643ea8Slogwang test_vnode_check_stat(struct ucred *active_cred, struct ucred *file_cred,
2827a9643ea8Slogwang     struct vnode *vp, struct label *vplabel)
2828a9643ea8Slogwang {
2829a9643ea8Slogwang 
2830a9643ea8Slogwang 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
2831a9643ea8Slogwang 	if (file_cred != NULL)
2832a9643ea8Slogwang 		LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
2833a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2834a9643ea8Slogwang 	COUNTER_INC(vnode_check_stat);
2835a9643ea8Slogwang 
2836a9643ea8Slogwang 	return (0);
2837a9643ea8Slogwang }
2838a9643ea8Slogwang 
2839a9643ea8Slogwang COUNTER_DECL(vnode_check_unlink);
2840a9643ea8Slogwang static int
test_vnode_check_unlink(struct ucred * cred,struct vnode * dvp,struct label * dvplabel,struct vnode * vp,struct label * vplabel,struct componentname * cnp)2841a9643ea8Slogwang test_vnode_check_unlink(struct ucred *cred, struct vnode *dvp,
2842a9643ea8Slogwang     struct label *dvplabel, struct vnode *vp, struct label *vplabel,
2843a9643ea8Slogwang     struct componentname *cnp)
2844a9643ea8Slogwang {
2845a9643ea8Slogwang 
2846a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2847a9643ea8Slogwang 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2848a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2849a9643ea8Slogwang 	COUNTER_INC(vnode_check_unlink);
2850a9643ea8Slogwang 
2851a9643ea8Slogwang 	return (0);
2852a9643ea8Slogwang }
2853a9643ea8Slogwang 
2854a9643ea8Slogwang COUNTER_DECL(vnode_check_write);
2855a9643ea8Slogwang static int
test_vnode_check_write(struct ucred * active_cred,struct ucred * file_cred,struct vnode * vp,struct label * vplabel)2856a9643ea8Slogwang test_vnode_check_write(struct ucred *active_cred,
2857a9643ea8Slogwang     struct ucred *file_cred, struct vnode *vp, struct label *vplabel)
2858a9643ea8Slogwang {
2859a9643ea8Slogwang 
2860a9643ea8Slogwang 	LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
2861a9643ea8Slogwang 	if (file_cred != NULL)
2862a9643ea8Slogwang 		LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
2863a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2864a9643ea8Slogwang 	COUNTER_INC(vnode_check_write);
2865a9643ea8Slogwang 
2866a9643ea8Slogwang 	return (0);
2867a9643ea8Slogwang }
2868a9643ea8Slogwang 
2869a9643ea8Slogwang COUNTER_DECL(vnode_copy_label);
2870a9643ea8Slogwang static void
test_vnode_copy_label(struct label * src,struct label * dest)2871a9643ea8Slogwang test_vnode_copy_label(struct label *src, struct label *dest)
2872a9643ea8Slogwang {
2873a9643ea8Slogwang 
2874a9643ea8Slogwang 	LABEL_CHECK(src, MAGIC_VNODE);
2875a9643ea8Slogwang 	LABEL_CHECK(dest, MAGIC_VNODE);
2876a9643ea8Slogwang 	COUNTER_INC(vnode_copy_label);
2877a9643ea8Slogwang }
2878a9643ea8Slogwang 
2879a9643ea8Slogwang COUNTER_DECL(vnode_create_extattr);
2880a9643ea8Slogwang static int
test_vnode_create_extattr(struct ucred * cred,struct mount * mp,struct label * mplabel,struct vnode * dvp,struct label * dvplabel,struct vnode * vp,struct label * vplabel,struct componentname * cnp)2881a9643ea8Slogwang test_vnode_create_extattr(struct ucred *cred, struct mount *mp,
2882a9643ea8Slogwang     struct label *mplabel, struct vnode *dvp, struct label *dvplabel,
2883a9643ea8Slogwang     struct vnode *vp, struct label *vplabel, struct componentname *cnp)
2884a9643ea8Slogwang {
2885a9643ea8Slogwang 
2886a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2887a9643ea8Slogwang 	LABEL_CHECK(mplabel, MAGIC_MOUNT);
2888a9643ea8Slogwang 	LABEL_CHECK(dvplabel, MAGIC_VNODE);
2889a9643ea8Slogwang 	COUNTER_INC(vnode_create_extattr);
2890a9643ea8Slogwang 
2891a9643ea8Slogwang 	return (0);
2892a9643ea8Slogwang }
2893a9643ea8Slogwang 
2894a9643ea8Slogwang COUNTER_DECL(vnode_destroy_label);
2895a9643ea8Slogwang static void
test_vnode_destroy_label(struct label * label)2896a9643ea8Slogwang test_vnode_destroy_label(struct label *label)
2897a9643ea8Slogwang {
2898a9643ea8Slogwang 
2899a9643ea8Slogwang 	LABEL_DESTROY(label, MAGIC_VNODE);
2900a9643ea8Slogwang 	COUNTER_INC(vnode_destroy_label);
2901a9643ea8Slogwang }
2902a9643ea8Slogwang 
2903a9643ea8Slogwang COUNTER_DECL(vnode_execve_transition);
2904a9643ea8Slogwang static void
test_vnode_execve_transition(struct ucred * old,struct ucred * new,struct vnode * vp,struct label * filelabel,struct label * interpvplabel,struct image_params * imgp,struct label * execlabel)2905a9643ea8Slogwang test_vnode_execve_transition(struct ucred *old, struct ucred *new,
2906a9643ea8Slogwang     struct vnode *vp, struct label *filelabel,
2907a9643ea8Slogwang     struct label *interpvplabel, struct image_params *imgp,
2908a9643ea8Slogwang     struct label *execlabel)
2909a9643ea8Slogwang {
2910a9643ea8Slogwang 
2911a9643ea8Slogwang 	LABEL_CHECK(old->cr_label, MAGIC_CRED);
2912a9643ea8Slogwang 	LABEL_CHECK(new->cr_label, MAGIC_CRED);
2913a9643ea8Slogwang 	LABEL_CHECK(filelabel, MAGIC_VNODE);
2914a9643ea8Slogwang 	LABEL_CHECK(interpvplabel, MAGIC_VNODE);
2915a9643ea8Slogwang 	LABEL_CHECK(execlabel, MAGIC_CRED);
2916a9643ea8Slogwang 	COUNTER_INC(vnode_execve_transition);
2917a9643ea8Slogwang }
2918a9643ea8Slogwang 
2919a9643ea8Slogwang COUNTER_DECL(vnode_execve_will_transition);
2920a9643ea8Slogwang static int
test_vnode_execve_will_transition(struct ucred * old,struct vnode * vp,struct label * filelabel,struct label * interpvplabel,struct image_params * imgp,struct label * execlabel)2921a9643ea8Slogwang test_vnode_execve_will_transition(struct ucred *old, struct vnode *vp,
2922a9643ea8Slogwang     struct label *filelabel, struct label *interpvplabel,
2923a9643ea8Slogwang     struct image_params *imgp, struct label *execlabel)
2924a9643ea8Slogwang {
2925a9643ea8Slogwang 
2926a9643ea8Slogwang 	LABEL_CHECK(old->cr_label, MAGIC_CRED);
2927a9643ea8Slogwang 	LABEL_CHECK(filelabel, MAGIC_VNODE);
2928a9643ea8Slogwang 	LABEL_CHECK(interpvplabel, MAGIC_VNODE);
2929a9643ea8Slogwang 	LABEL_CHECK(execlabel, MAGIC_CRED);
2930a9643ea8Slogwang 	COUNTER_INC(vnode_execve_will_transition);
2931a9643ea8Slogwang 
2932a9643ea8Slogwang 	return (0);
2933a9643ea8Slogwang }
2934a9643ea8Slogwang 
2935a9643ea8Slogwang COUNTER_DECL(vnode_externalize_label);
2936a9643ea8Slogwang static int
test_vnode_externalize_label(struct label * label,char * element_name,struct sbuf * sb,int * claimed)2937a9643ea8Slogwang test_vnode_externalize_label(struct label *label, char *element_name,
2938a9643ea8Slogwang     struct sbuf *sb, int *claimed)
2939a9643ea8Slogwang {
2940a9643ea8Slogwang 
2941a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_VNODE);
2942a9643ea8Slogwang 	COUNTER_INC(vnode_externalize_label);
2943a9643ea8Slogwang 
2944a9643ea8Slogwang 	return (0);
2945a9643ea8Slogwang }
2946a9643ea8Slogwang 
2947a9643ea8Slogwang COUNTER_DECL(vnode_init_label);
2948a9643ea8Slogwang static void
test_vnode_init_label(struct label * label)2949a9643ea8Slogwang test_vnode_init_label(struct label *label)
2950a9643ea8Slogwang {
2951a9643ea8Slogwang 
2952a9643ea8Slogwang 	LABEL_INIT(label, MAGIC_VNODE);
2953a9643ea8Slogwang 	COUNTER_INC(vnode_init_label);
2954a9643ea8Slogwang }
2955a9643ea8Slogwang 
2956a9643ea8Slogwang COUNTER_DECL(vnode_internalize_label);
2957a9643ea8Slogwang static int
test_vnode_internalize_label(struct label * label,char * element_name,char * element_data,int * claimed)2958a9643ea8Slogwang test_vnode_internalize_label(struct label *label, char *element_name,
2959a9643ea8Slogwang     char *element_data, int *claimed)
2960a9643ea8Slogwang {
2961a9643ea8Slogwang 
2962a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_VNODE);
2963a9643ea8Slogwang 	COUNTER_INC(vnode_internalize_label);
2964a9643ea8Slogwang 
2965a9643ea8Slogwang 	return (0);
2966a9643ea8Slogwang }
2967a9643ea8Slogwang 
2968a9643ea8Slogwang COUNTER_DECL(vnode_relabel);
2969a9643ea8Slogwang static void
test_vnode_relabel(struct ucred * cred,struct vnode * vp,struct label * vplabel,struct label * label)2970a9643ea8Slogwang test_vnode_relabel(struct ucred *cred, struct vnode *vp,
2971a9643ea8Slogwang     struct label *vplabel, struct label *label)
2972a9643ea8Slogwang {
2973a9643ea8Slogwang 
2974a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2975a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2976a9643ea8Slogwang 	LABEL_CHECK(label, MAGIC_VNODE);
2977a9643ea8Slogwang 	COUNTER_INC(vnode_relabel);
2978a9643ea8Slogwang }
2979a9643ea8Slogwang 
2980a9643ea8Slogwang COUNTER_DECL(vnode_setlabel_extattr);
2981a9643ea8Slogwang static int
test_vnode_setlabel_extattr(struct ucred * cred,struct vnode * vp,struct label * vplabel,struct label * intlabel)2982a9643ea8Slogwang test_vnode_setlabel_extattr(struct ucred *cred, struct vnode *vp,
2983a9643ea8Slogwang     struct label *vplabel, struct label *intlabel)
2984a9643ea8Slogwang {
2985a9643ea8Slogwang 
2986a9643ea8Slogwang 	LABEL_CHECK(cred->cr_label, MAGIC_CRED);
2987a9643ea8Slogwang 	LABEL_CHECK(vplabel, MAGIC_VNODE);
2988a9643ea8Slogwang 	LABEL_CHECK(intlabel, MAGIC_VNODE);
2989a9643ea8Slogwang 	COUNTER_INC(vnode_setlabel_extattr);
2990a9643ea8Slogwang 
2991a9643ea8Slogwang 	return (0);
2992a9643ea8Slogwang }
2993a9643ea8Slogwang 
2994a9643ea8Slogwang static struct mac_policy_ops test_ops =
2995a9643ea8Slogwang {
2996a9643ea8Slogwang 	.mpo_bpfdesc_check_receive = test_bpfdesc_check_receive,
2997a9643ea8Slogwang 	.mpo_bpfdesc_create = test_bpfdesc_create,
2998a9643ea8Slogwang 	.mpo_bpfdesc_create_mbuf = test_bpfdesc_create_mbuf,
2999a9643ea8Slogwang 	.mpo_bpfdesc_destroy_label = test_bpfdesc_destroy_label,
3000a9643ea8Slogwang 	.mpo_bpfdesc_init_label = test_bpfdesc_init_label,
3001a9643ea8Slogwang 
3002a9643ea8Slogwang 	.mpo_cred_check_relabel = test_cred_check_relabel,
3003a9643ea8Slogwang 	.mpo_cred_check_setaudit = test_cred_check_setaudit,
3004a9643ea8Slogwang 	.mpo_cred_check_setaudit_addr = test_cred_check_setaudit_addr,
3005a9643ea8Slogwang 	.mpo_cred_check_setauid = test_cred_check_setauid,
3006a9643ea8Slogwang 	.mpo_cred_check_seteuid = test_cred_check_seteuid,
3007a9643ea8Slogwang 	.mpo_cred_check_setegid = test_cred_check_setegid,
3008a9643ea8Slogwang 	.mpo_cred_check_setgid = test_cred_check_setgid,
3009a9643ea8Slogwang 	.mpo_cred_check_setgroups = test_cred_check_setgroups,
3010a9643ea8Slogwang 	.mpo_cred_check_setregid = test_cred_check_setregid,
3011a9643ea8Slogwang 	.mpo_cred_check_setresgid = test_cred_check_setresgid,
3012a9643ea8Slogwang 	.mpo_cred_check_setresuid = test_cred_check_setresuid,
3013a9643ea8Slogwang 	.mpo_cred_check_setreuid = test_cred_check_setreuid,
3014a9643ea8Slogwang 	.mpo_cred_check_setuid = test_cred_check_setuid,
3015a9643ea8Slogwang 	.mpo_cred_check_visible = test_cred_check_visible,
3016a9643ea8Slogwang 	.mpo_cred_copy_label = test_cred_copy_label,
3017a9643ea8Slogwang 	.mpo_cred_create_init = test_cred_create_init,
3018a9643ea8Slogwang 	.mpo_cred_create_swapper = test_cred_create_swapper,
3019a9643ea8Slogwang 	.mpo_cred_destroy_label = test_cred_destroy_label,
3020a9643ea8Slogwang 	.mpo_cred_externalize_label = test_cred_externalize_label,
3021a9643ea8Slogwang 	.mpo_cred_init_label = test_cred_init_label,
3022a9643ea8Slogwang 	.mpo_cred_internalize_label = test_cred_internalize_label,
3023a9643ea8Slogwang 	.mpo_cred_relabel = test_cred_relabel,
3024a9643ea8Slogwang 
3025a9643ea8Slogwang 	.mpo_devfs_create_device = test_devfs_create_device,
3026a9643ea8Slogwang 	.mpo_devfs_create_directory = test_devfs_create_directory,
3027a9643ea8Slogwang 	.mpo_devfs_create_symlink = test_devfs_create_symlink,
3028a9643ea8Slogwang 	.mpo_devfs_destroy_label = test_devfs_destroy_label,
3029a9643ea8Slogwang 	.mpo_devfs_init_label = test_devfs_init_label,
3030a9643ea8Slogwang 	.mpo_devfs_update = test_devfs_update,
3031a9643ea8Slogwang 	.mpo_devfs_vnode_associate = test_devfs_vnode_associate,
3032a9643ea8Slogwang 
3033a9643ea8Slogwang 	.mpo_ifnet_check_relabel = test_ifnet_check_relabel,
3034a9643ea8Slogwang 	.mpo_ifnet_check_transmit = test_ifnet_check_transmit,
3035a9643ea8Slogwang 	.mpo_ifnet_copy_label = test_ifnet_copy_label,
3036a9643ea8Slogwang 	.mpo_ifnet_create = test_ifnet_create,
3037a9643ea8Slogwang 	.mpo_ifnet_create_mbuf = test_ifnet_create_mbuf,
3038a9643ea8Slogwang 	.mpo_ifnet_destroy_label = test_ifnet_destroy_label,
3039a9643ea8Slogwang 	.mpo_ifnet_externalize_label = test_ifnet_externalize_label,
3040a9643ea8Slogwang 	.mpo_ifnet_init_label = test_ifnet_init_label,
3041a9643ea8Slogwang 	.mpo_ifnet_internalize_label = test_ifnet_internalize_label,
3042a9643ea8Slogwang 	.mpo_ifnet_relabel = test_ifnet_relabel,
3043a9643ea8Slogwang 
3044a9643ea8Slogwang 	.mpo_syncache_destroy_label = test_syncache_destroy_label,
3045a9643ea8Slogwang 	.mpo_syncache_init_label = test_syncache_init_label,
3046a9643ea8Slogwang 
3047a9643ea8Slogwang 	.mpo_sysvmsg_destroy_label = test_sysvmsg_destroy_label,
3048a9643ea8Slogwang 	.mpo_sysvmsg_init_label = test_sysvmsg_init_label,
3049a9643ea8Slogwang 
3050a9643ea8Slogwang 	.mpo_sysvmsq_destroy_label = test_sysvmsq_destroy_label,
3051a9643ea8Slogwang 	.mpo_sysvmsq_init_label = test_sysvmsq_init_label,
3052a9643ea8Slogwang 
3053a9643ea8Slogwang 	.mpo_sysvsem_destroy_label = test_sysvsem_destroy_label,
3054a9643ea8Slogwang 	.mpo_sysvsem_init_label = test_sysvsem_init_label,
3055a9643ea8Slogwang 
3056a9643ea8Slogwang 	.mpo_sysvshm_destroy_label = test_sysvshm_destroy_label,
3057a9643ea8Slogwang 	.mpo_sysvshm_init_label = test_sysvshm_init_label,
3058a9643ea8Slogwang 
3059a9643ea8Slogwang 	.mpo_inpcb_check_deliver = test_inpcb_check_deliver,
3060a9643ea8Slogwang 	.mpo_inpcb_check_visible = test_inpcb_check_visible,
3061a9643ea8Slogwang 	.mpo_inpcb_create = test_inpcb_create,
3062a9643ea8Slogwang 	.mpo_inpcb_create_mbuf = test_inpcb_create_mbuf,
3063a9643ea8Slogwang 	.mpo_inpcb_destroy_label = test_inpcb_destroy_label,
3064a9643ea8Slogwang 	.mpo_inpcb_init_label = test_inpcb_init_label,
3065a9643ea8Slogwang 	.mpo_inpcb_sosetlabel = test_inpcb_sosetlabel,
3066a9643ea8Slogwang 
3067a9643ea8Slogwang 	.mpo_ip6q_create = test_ip6q_create,
3068a9643ea8Slogwang 	.mpo_ip6q_destroy_label = test_ip6q_destroy_label,
3069a9643ea8Slogwang 	.mpo_ip6q_init_label = test_ip6q_init_label,
3070a9643ea8Slogwang 	.mpo_ip6q_match = test_ip6q_match,
3071a9643ea8Slogwang 	.mpo_ip6q_reassemble = test_ip6q_reassemble,
3072a9643ea8Slogwang 	.mpo_ip6q_update = test_ip6q_update,
3073a9643ea8Slogwang 
3074a9643ea8Slogwang 	.mpo_ipq_create = test_ipq_create,
3075a9643ea8Slogwang 	.mpo_ipq_destroy_label = test_ipq_destroy_label,
3076a9643ea8Slogwang 	.mpo_ipq_init_label = test_ipq_init_label,
3077a9643ea8Slogwang 	.mpo_ipq_match = test_ipq_match,
3078a9643ea8Slogwang 	.mpo_ipq_reassemble = test_ipq_reassemble,
3079a9643ea8Slogwang 	.mpo_ipq_update = test_ipq_update,
3080a9643ea8Slogwang 
3081a9643ea8Slogwang 	.mpo_kenv_check_dump = test_kenv_check_dump,
3082a9643ea8Slogwang 	.mpo_kenv_check_get = test_kenv_check_get,
3083a9643ea8Slogwang 	.mpo_kenv_check_set = test_kenv_check_set,
3084a9643ea8Slogwang 	.mpo_kenv_check_unset = test_kenv_check_unset,
3085a9643ea8Slogwang 
3086a9643ea8Slogwang 	.mpo_kld_check_load = test_kld_check_load,
3087a9643ea8Slogwang 	.mpo_kld_check_stat = test_kld_check_stat,
3088a9643ea8Slogwang 
3089a9643ea8Slogwang 	.mpo_mbuf_copy_label = test_mbuf_copy_label,
3090a9643ea8Slogwang 	.mpo_mbuf_destroy_label = test_mbuf_destroy_label,
3091a9643ea8Slogwang 	.mpo_mbuf_init_label = test_mbuf_init_label,
3092a9643ea8Slogwang 
3093a9643ea8Slogwang 	.mpo_mount_check_stat = test_mount_check_stat,
3094a9643ea8Slogwang 	.mpo_mount_create = test_mount_create,
3095a9643ea8Slogwang 	.mpo_mount_destroy_label = test_mount_destroy_label,
3096a9643ea8Slogwang 	.mpo_mount_init_label = test_mount_init_label,
3097a9643ea8Slogwang 
3098a9643ea8Slogwang 	.mpo_netinet_arp_send = test_netinet_arp_send,
3099a9643ea8Slogwang 	.mpo_netinet_fragment = test_netinet_fragment,
3100a9643ea8Slogwang 	.mpo_netinet_icmp_reply = test_netinet_icmp_reply,
3101a9643ea8Slogwang 	.mpo_netinet_icmp_replyinplace = test_netinet_icmp_replyinplace,
3102a9643ea8Slogwang 	.mpo_netinet_igmp_send = test_netinet_igmp_send,
3103a9643ea8Slogwang 	.mpo_netinet_tcp_reply = test_netinet_tcp_reply,
3104a9643ea8Slogwang 
3105a9643ea8Slogwang 	.mpo_netinet6_nd6_send = test_netinet6_nd6_send,
3106a9643ea8Slogwang 
3107a9643ea8Slogwang 	.mpo_pipe_check_ioctl = test_pipe_check_ioctl,
3108a9643ea8Slogwang 	.mpo_pipe_check_poll = test_pipe_check_poll,
3109a9643ea8Slogwang 	.mpo_pipe_check_read = test_pipe_check_read,
3110a9643ea8Slogwang 	.mpo_pipe_check_relabel = test_pipe_check_relabel,
3111a9643ea8Slogwang 	.mpo_pipe_check_stat = test_pipe_check_stat,
3112a9643ea8Slogwang 	.mpo_pipe_check_write = test_pipe_check_write,
3113a9643ea8Slogwang 	.mpo_pipe_copy_label = test_pipe_copy_label,
3114a9643ea8Slogwang 	.mpo_pipe_create = test_pipe_create,
3115a9643ea8Slogwang 	.mpo_pipe_destroy_label = test_pipe_destroy_label,
3116a9643ea8Slogwang 	.mpo_pipe_externalize_label = test_pipe_externalize_label,
3117a9643ea8Slogwang 	.mpo_pipe_init_label = test_pipe_init_label,
3118a9643ea8Slogwang 	.mpo_pipe_internalize_label = test_pipe_internalize_label,
3119a9643ea8Slogwang 	.mpo_pipe_relabel = test_pipe_relabel,
3120a9643ea8Slogwang 
3121a9643ea8Slogwang 	.mpo_posixsem_check_getvalue = test_posixsem_check_getvalue,
3122a9643ea8Slogwang 	.mpo_posixsem_check_open = test_posixsem_check_open,
3123a9643ea8Slogwang 	.mpo_posixsem_check_post = test_posixsem_check_post,
3124a9643ea8Slogwang 	.mpo_posixsem_check_setmode = test_posixsem_check_setmode,
3125a9643ea8Slogwang 	.mpo_posixsem_check_setowner = test_posixsem_check_setowner,
3126a9643ea8Slogwang 	.mpo_posixsem_check_stat = test_posixsem_check_stat,
3127a9643ea8Slogwang 	.mpo_posixsem_check_unlink = test_posixsem_check_unlink,
3128a9643ea8Slogwang 	.mpo_posixsem_check_wait = test_posixsem_check_wait,
3129a9643ea8Slogwang 	.mpo_posixsem_create = test_posixsem_create,
3130a9643ea8Slogwang 	.mpo_posixsem_destroy_label = test_posixsem_destroy_label,
3131a9643ea8Slogwang 	.mpo_posixsem_init_label = test_posixsem_init_label,
3132a9643ea8Slogwang 
3133a9643ea8Slogwang 	.mpo_posixshm_check_create = test_posixshm_check_create,
3134a9643ea8Slogwang 	.mpo_posixshm_check_mmap = test_posixshm_check_mmap,
3135a9643ea8Slogwang 	.mpo_posixshm_check_open = test_posixshm_check_open,
3136a9643ea8Slogwang 	.mpo_posixshm_check_read = test_posixshm_check_read,
3137a9643ea8Slogwang 	.mpo_posixshm_check_setmode = test_posixshm_check_setmode,
3138a9643ea8Slogwang 	.mpo_posixshm_check_setowner = test_posixshm_check_setowner,
3139a9643ea8Slogwang 	.mpo_posixshm_check_stat = test_posixshm_check_stat,
3140a9643ea8Slogwang 	.mpo_posixshm_check_truncate = test_posixshm_check_truncate,
3141a9643ea8Slogwang 	.mpo_posixshm_check_unlink = test_posixshm_check_unlink,
3142a9643ea8Slogwang 	.mpo_posixshm_check_write = test_posixshm_check_write,
3143a9643ea8Slogwang 	.mpo_posixshm_create = test_posixshm_create,
3144a9643ea8Slogwang 	.mpo_posixshm_destroy_label = test_posixshm_destroy_label,
3145a9643ea8Slogwang 	.mpo_posixshm_init_label = test_posixshm_init_label,
3146a9643ea8Slogwang 
3147a9643ea8Slogwang 	.mpo_proc_check_debug = test_proc_check_debug,
3148a9643ea8Slogwang 	.mpo_proc_check_sched = test_proc_check_sched,
3149a9643ea8Slogwang 	.mpo_proc_check_signal = test_proc_check_signal,
3150a9643ea8Slogwang 	.mpo_proc_check_wait = test_proc_check_wait,
3151a9643ea8Slogwang 	.mpo_proc_destroy_label = test_proc_destroy_label,
3152a9643ea8Slogwang 	.mpo_proc_init_label = test_proc_init_label,
3153a9643ea8Slogwang 
3154a9643ea8Slogwang 	.mpo_socket_check_accept = test_socket_check_accept,
3155a9643ea8Slogwang 	.mpo_socket_check_bind = test_socket_check_bind,
3156a9643ea8Slogwang 	.mpo_socket_check_connect = test_socket_check_connect,
3157a9643ea8Slogwang 	.mpo_socket_check_deliver = test_socket_check_deliver,
3158a9643ea8Slogwang 	.mpo_socket_check_listen = test_socket_check_listen,
3159a9643ea8Slogwang 	.mpo_socket_check_poll = test_socket_check_poll,
3160a9643ea8Slogwang 	.mpo_socket_check_receive = test_socket_check_receive,
3161a9643ea8Slogwang 	.mpo_socket_check_relabel = test_socket_check_relabel,
3162a9643ea8Slogwang 	.mpo_socket_check_send = test_socket_check_send,
3163a9643ea8Slogwang 	.mpo_socket_check_stat = test_socket_check_stat,
3164a9643ea8Slogwang 	.mpo_socket_check_visible = test_socket_check_visible,
3165a9643ea8Slogwang 	.mpo_socket_copy_label = test_socket_copy_label,
3166a9643ea8Slogwang 	.mpo_socket_create = test_socket_create,
3167a9643ea8Slogwang 	.mpo_socket_create_mbuf = test_socket_create_mbuf,
3168a9643ea8Slogwang 	.mpo_socket_destroy_label = test_socket_destroy_label,
3169a9643ea8Slogwang 	.mpo_socket_externalize_label = test_socket_externalize_label,
3170a9643ea8Slogwang 	.mpo_socket_init_label = test_socket_init_label,
3171a9643ea8Slogwang 	.mpo_socket_internalize_label = test_socket_internalize_label,
3172a9643ea8Slogwang 	.mpo_socket_newconn = test_socket_newconn,
3173a9643ea8Slogwang 	.mpo_socket_relabel = test_socket_relabel,
3174a9643ea8Slogwang 
3175a9643ea8Slogwang 	.mpo_socketpeer_destroy_label = test_socketpeer_destroy_label,
3176a9643ea8Slogwang 	.mpo_socketpeer_externalize_label = test_socketpeer_externalize_label,
3177a9643ea8Slogwang 	.mpo_socketpeer_init_label = test_socketpeer_init_label,
3178a9643ea8Slogwang 	.mpo_socketpeer_set_from_mbuf = test_socketpeer_set_from_mbuf,
3179a9643ea8Slogwang 	.mpo_socketpeer_set_from_socket = test_socketpeer_set_from_socket,
3180a9643ea8Slogwang 
3181a9643ea8Slogwang 	.mpo_syncache_create = test_syncache_create,
3182a9643ea8Slogwang 	.mpo_syncache_create_mbuf = test_syncache_create_mbuf,
3183a9643ea8Slogwang 
3184a9643ea8Slogwang 	.mpo_system_check_acct = test_system_check_acct,
3185a9643ea8Slogwang 	.mpo_system_check_audit = test_system_check_audit,
3186a9643ea8Slogwang 	.mpo_system_check_auditctl = test_system_check_auditctl,
3187a9643ea8Slogwang 	.mpo_system_check_auditon = test_system_check_auditon,
3188a9643ea8Slogwang 	.mpo_system_check_reboot = test_system_check_reboot,
3189a9643ea8Slogwang 	.mpo_system_check_swapoff = test_system_check_swapoff,
3190a9643ea8Slogwang 	.mpo_system_check_swapon = test_system_check_swapon,
3191a9643ea8Slogwang 	.mpo_system_check_sysctl = test_system_check_sysctl,
3192a9643ea8Slogwang 
3193a9643ea8Slogwang 	.mpo_vnode_check_access = test_vnode_check_access,
3194a9643ea8Slogwang 	.mpo_sysvmsg_cleanup = test_sysvmsg_cleanup,
3195a9643ea8Slogwang 	.mpo_sysvmsg_create = test_sysvmsg_create,
3196a9643ea8Slogwang 
3197a9643ea8Slogwang 	.mpo_sysvmsq_check_msgmsq = test_sysvmsq_check_msgmsq,
3198a9643ea8Slogwang 	.mpo_sysvmsq_check_msgrcv = test_sysvmsq_check_msgrcv,
3199a9643ea8Slogwang 	.mpo_sysvmsq_check_msgrmid = test_sysvmsq_check_msgrmid,
3200a9643ea8Slogwang 	.mpo_sysvmsq_check_msqget = test_sysvmsq_check_msqget,
3201a9643ea8Slogwang 	.mpo_sysvmsq_check_msqsnd = test_sysvmsq_check_msqsnd,
3202a9643ea8Slogwang 	.mpo_sysvmsq_check_msqrcv = test_sysvmsq_check_msqrcv,
3203a9643ea8Slogwang 	.mpo_sysvmsq_check_msqctl = test_sysvmsq_check_msqctl,
3204a9643ea8Slogwang 	.mpo_sysvmsq_cleanup = test_sysvmsq_cleanup,
3205a9643ea8Slogwang 	.mpo_sysvmsq_create = test_sysvmsq_create,
3206a9643ea8Slogwang 
3207a9643ea8Slogwang 	.mpo_sysvsem_check_semctl = test_sysvsem_check_semctl,
3208a9643ea8Slogwang 	.mpo_sysvsem_check_semget = test_sysvsem_check_semget,
3209a9643ea8Slogwang 	.mpo_sysvsem_check_semop = test_sysvsem_check_semop,
3210a9643ea8Slogwang 	.mpo_sysvsem_cleanup = test_sysvsem_cleanup,
3211a9643ea8Slogwang 	.mpo_sysvsem_create = test_sysvsem_create,
3212a9643ea8Slogwang 
3213a9643ea8Slogwang 	.mpo_sysvshm_check_shmat = test_sysvshm_check_shmat,
3214a9643ea8Slogwang 	.mpo_sysvshm_check_shmctl = test_sysvshm_check_shmctl,
3215a9643ea8Slogwang 	.mpo_sysvshm_check_shmdt = test_sysvshm_check_shmdt,
3216a9643ea8Slogwang 	.mpo_sysvshm_check_shmget = test_sysvshm_check_shmget,
3217a9643ea8Slogwang 	.mpo_sysvshm_cleanup = test_sysvshm_cleanup,
3218a9643ea8Slogwang 	.mpo_sysvshm_create = test_sysvshm_create,
3219a9643ea8Slogwang 
3220a9643ea8Slogwang 	.mpo_thread_userret = test_thread_userret,
3221a9643ea8Slogwang 
3222a9643ea8Slogwang 	.mpo_vnode_associate_extattr = test_vnode_associate_extattr,
3223a9643ea8Slogwang 	.mpo_vnode_associate_singlelabel = test_vnode_associate_singlelabel,
3224a9643ea8Slogwang 	.mpo_vnode_check_chdir = test_vnode_check_chdir,
3225a9643ea8Slogwang 	.mpo_vnode_check_chroot = test_vnode_check_chroot,
3226a9643ea8Slogwang 	.mpo_vnode_check_create = test_vnode_check_create,
3227a9643ea8Slogwang 	.mpo_vnode_check_deleteacl = test_vnode_check_deleteacl,
3228a9643ea8Slogwang 	.mpo_vnode_check_deleteextattr = test_vnode_check_deleteextattr,
3229a9643ea8Slogwang 	.mpo_vnode_check_exec = test_vnode_check_exec,
3230a9643ea8Slogwang 	.mpo_vnode_check_getacl = test_vnode_check_getacl,
3231a9643ea8Slogwang 	.mpo_vnode_check_getextattr = test_vnode_check_getextattr,
3232a9643ea8Slogwang 	.mpo_vnode_check_link = test_vnode_check_link,
3233a9643ea8Slogwang 	.mpo_vnode_check_listextattr = test_vnode_check_listextattr,
3234a9643ea8Slogwang 	.mpo_vnode_check_lookup = test_vnode_check_lookup,
3235a9643ea8Slogwang 	.mpo_vnode_check_mmap = test_vnode_check_mmap,
3236a9643ea8Slogwang 	.mpo_vnode_check_open = test_vnode_check_open,
3237a9643ea8Slogwang 	.mpo_vnode_check_poll = test_vnode_check_poll,
3238a9643ea8Slogwang 	.mpo_vnode_check_read = test_vnode_check_read,
3239a9643ea8Slogwang 	.mpo_vnode_check_readdir = test_vnode_check_readdir,
3240a9643ea8Slogwang 	.mpo_vnode_check_readlink = test_vnode_check_readlink,
3241a9643ea8Slogwang 	.mpo_vnode_check_relabel = test_vnode_check_relabel,
3242a9643ea8Slogwang 	.mpo_vnode_check_rename_from = test_vnode_check_rename_from,
3243a9643ea8Slogwang 	.mpo_vnode_check_rename_to = test_vnode_check_rename_to,
3244a9643ea8Slogwang 	.mpo_vnode_check_revoke = test_vnode_check_revoke,
3245a9643ea8Slogwang 	.mpo_vnode_check_setacl = test_vnode_check_setacl,
3246a9643ea8Slogwang 	.mpo_vnode_check_setextattr = test_vnode_check_setextattr,
3247a9643ea8Slogwang 	.mpo_vnode_check_setflags = test_vnode_check_setflags,
3248a9643ea8Slogwang 	.mpo_vnode_check_setmode = test_vnode_check_setmode,
3249a9643ea8Slogwang 	.mpo_vnode_check_setowner = test_vnode_check_setowner,
3250a9643ea8Slogwang 	.mpo_vnode_check_setutimes = test_vnode_check_setutimes,
3251a9643ea8Slogwang 	.mpo_vnode_check_stat = test_vnode_check_stat,
3252a9643ea8Slogwang 	.mpo_vnode_check_unlink = test_vnode_check_unlink,
3253a9643ea8Slogwang 	.mpo_vnode_check_write = test_vnode_check_write,
3254a9643ea8Slogwang 	.mpo_vnode_copy_label = test_vnode_copy_label,
3255a9643ea8Slogwang 	.mpo_vnode_create_extattr = test_vnode_create_extattr,
3256a9643ea8Slogwang 	.mpo_vnode_destroy_label = test_vnode_destroy_label,
3257a9643ea8Slogwang 	.mpo_vnode_execve_transition = test_vnode_execve_transition,
3258a9643ea8Slogwang 	.mpo_vnode_execve_will_transition = test_vnode_execve_will_transition,
3259a9643ea8Slogwang 	.mpo_vnode_externalize_label = test_vnode_externalize_label,
3260a9643ea8Slogwang 	.mpo_vnode_init_label = test_vnode_init_label,
3261a9643ea8Slogwang 	.mpo_vnode_internalize_label = test_vnode_internalize_label,
3262a9643ea8Slogwang 	.mpo_vnode_relabel = test_vnode_relabel,
3263a9643ea8Slogwang 	.mpo_vnode_setlabel_extattr = test_vnode_setlabel_extattr,
3264a9643ea8Slogwang };
3265a9643ea8Slogwang 
3266a9643ea8Slogwang MAC_POLICY_SET(&test_ops, mac_test, "TrustedBSD MAC/Test",
3267a9643ea8Slogwang     MPC_LOADTIME_FLAG_UNLOADOK, &test_slot);
3268