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