The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/security/mac_test/mac_test.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: e18b77f959a29fe59c2c7a2d8cfeee2f


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.