Date: Sat, 5 Oct 2002 10:09:19 -0700 (PDT) From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 18733 for review Message-ID: <200210051709.g95H9JiU088813@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://people.freebsd.org/~peter/p4db/chv.cgi?CH=18733 Change 18733 by rwatson@rwatson_tislabs on 2002/10/05 10:09:12 Integ 5.0-CURRENT into TrustedBSD base: look back a lot of MAC cosmetic changes to sync the trees--also, GEOM is now default unless NO_GEOM is specified. Affected files ... .. //depot/projects/trustedbsd/base/sys/alpha/conf/GENERIC#15 integrate .. //depot/projects/trustedbsd/base/sys/alpha/conf/SIMOS#5 integrate .. //depot/projects/trustedbsd/base/sys/conf/NOTES#17 integrate .. //depot/projects/trustedbsd/base/sys/conf/files#37 integrate .. //depot/projects/trustedbsd/base/sys/conf/files.alpha#11 integrate .. //depot/projects/trustedbsd/base/sys/conf/files.i386#19 integrate .. //depot/projects/trustedbsd/base/sys/conf/files.ia64#10 integrate .. //depot/projects/trustedbsd/base/sys/conf/files.pc98#17 integrate .. //depot/projects/trustedbsd/base/sys/conf/files.sparc64#16 integrate .. //depot/projects/trustedbsd/base/sys/conf/options#20 integrate .. //depot/projects/trustedbsd/base/sys/dev/mcd/mcd.c#2 integrate .. //depot/projects/trustedbsd/base/sys/dev/mcd/mcd_isa.c#2 integrate .. //depot/projects/trustedbsd/base/sys/geom/geom_disk.c#10 integrate .. //depot/projects/trustedbsd/base/sys/i386/conf/GENERIC#22 integrate .. //depot/projects/trustedbsd/base/sys/i386/conf/OLDCARD#6 integrate .. //depot/projects/trustedbsd/base/sys/i386/isa/scd.c#7 integrate .. //depot/projects/trustedbsd/base/sys/ia64/conf/GENERIC#13 integrate .. //depot/projects/trustedbsd/base/sys/ia64/conf/SKI#6 integrate .. //depot/projects/trustedbsd/base/sys/kern/kern_mac.c#14 integrate .. //depot/projects/trustedbsd/base/sys/kern/subr_disk.c#8 integrate .. //depot/projects/trustedbsd/base/sys/pc98/conf/GENERIC#16 integrate .. //depot/projects/trustedbsd/base/sys/pc98/pc98/wd.c#3 integrate .. //depot/projects/trustedbsd/base/sys/pc98/pc98/wd_cd.c#4 integrate .. //depot/projects/trustedbsd/base/sys/powerpc/conf/GENERIC#10 integrate .. //depot/projects/trustedbsd/base/sys/sparc64/conf/GENERIC#19 integrate Differences ... ==== //depot/projects/trustedbsd/base/sys/alpha/conf/GENERIC#15 (text+ko) ==== @@ -18,7 +18,7 @@ # # For hardware specific information check HARDWARE.TXT # -# $FreeBSD: src/sys/alpha/conf/GENERIC,v 1.150 2002/08/20 00:10:19 peter Exp $ +# $FreeBSD: src/sys/alpha/conf/GENERIC,v 1.151 2002/10/05 16:35:20 phk Exp $ machine alpha cpu EV4 @@ -31,6 +31,8 @@ makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols +options NO_GEOM + # Platforms supported options API_UP1000 # UP1000, UP1100 (Nautilus) options DEC_AXPPCI_33 # UDB, Multia, AXPpci33, NoName ==== //depot/projects/trustedbsd/base/sys/alpha/conf/SIMOS#5 (text+ko) ==== @@ -11,13 +11,15 @@ # device lines is present in the ./NOTES file. If you are in doubt as # to the purpose or necessity of a line, check first in NOTES. # -# $FreeBSD: src/sys/alpha/conf/SIMOS,v 1.22 2002/07/23 06:36:23 peter Exp $ +# $FreeBSD: src/sys/alpha/conf/SIMOS,v 1.23 2002/10/05 16:35:21 phk Exp $ machine alpha cpu EV5 ident SIMOS maxusers 10 +options NO_GEOM + options DEC_KN8AE options SIMOS options INET #InterNETworking ==== //depot/projects/trustedbsd/base/sys/conf/NOTES#17 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/NOTES,v 1.1088 2002/10/04 20:42:31 sam Exp $ +# $FreeBSD: src/sys/conf/NOTES,v 1.1089 2002/10/05 16:35:25 phk Exp $ # # NOTES -- Lines that can be cut/pasted into kernel and hints configs. # @@ -114,8 +114,12 @@ # options INCLUDE_CONFIG_FILE # Include this file in kernel -options GEOM # Use the GEOMetry system for - # disk-I/O transformations. +options GEOM_AES +options GEOM_BSD +options GEOM_GPT +options GEOM_MBR +options GEOM_PC98 +options GEOM_SUNLABEL # # The root device and filesystem type can be compiled in; ==== //depot/projects/trustedbsd/base/sys/conf/files#37 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/files,v 1.712 2002/10/05 02:00:57 iwasaki Exp $ +# $FreeBSD: src/sys/conf/files,v 1.713 2002/10/05 16:35:26 phk Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -458,8 +458,8 @@ dev/nsp/nsp_pccard.c optional nsp card #dev/nsp/nsp_pccard.c optional nsp pccard dev/mca/mca_bus.c optional mca -dev/mcd/mcd.c optional mcd isa -dev/mcd/mcd_isa.c optional mcd isa +dev/mcd/mcd.c optional mcd isa nowerror +dev/mcd/mcd_isa.c optional mcd isa nowerror dev/md/md.c optional md dev/mii/amphy.c optional miibus dev/mii/bmtphy.c optional miibus @@ -787,21 +787,21 @@ fs/unionfs/union_subr.c optional unionfs fs/unionfs/union_vfsops.c optional unionfs fs/unionfs/union_vnops.c optional unionfs -geom/geom_aes.c optional geom -geom/geom_bsd.c optional geom -geom/geom_dev.c optional geom -geom/geom_disk.c optional geom -geom/geom_dump.c optional geom -geom/geom_enc.c optional geom -geom/geom_event.c optional geom -geom/geom_gpt.c optional geom -geom/geom_io.c optional geom -geom/geom_kern.c optional geom -geom/geom_mbr.c optional geom -geom/geom_pc98.c optional geom -geom/geom_slice.c optional geom -geom/geom_subr.c optional geom -geom/geom_sunlabel.c optional geom +geom/geom_aes.c optional geom_aes +geom/geom_bsd.c optional geom_bsd +geom/geom_dev.c standard +geom/geom_disk.c standard +geom/geom_dump.c standard +geom/geom_enc.c standard +geom/geom_event.c standard +geom/geom_gpt.c optional geom_gpt +geom/geom_io.c standard +geom/geom_kern.c standard +geom/geom_mbr.c optional geom_mbr +geom/geom_pc98.c optional geom_pc98 +geom/geom_slice.c standard +geom/geom_subr.c standard +geom/geom_sunlabel.c optional geom_sunlabel crypto/rijndael/rijndael-alg-fst.c optional geom crypto/rijndael/rijndael-api-fst.c optional geom gnu/ext2fs/ext2_alloc.c optional ext2fs \ ==== //depot/projects/trustedbsd/base/sys/conf/files.alpha#11 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.alpha,v 1.94 2002/10/04 20:42:33 sam Exp $ +# $FreeBSD: src/sys/conf/files.alpha,v 1.95 2002/10/05 16:35:26 phk Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -193,6 +193,7 @@ dev/syscons/scvtb.c optional sc dev/syscons/syscons.c optional sc dev/syscons/sysmouse.c optional sc +geom/geom_bsd.c standard isa/atkbd_isa.c optional atkbd isa/atkbdc_isa.c optional atkbdc isa/fd.c optional fdc ==== //depot/projects/trustedbsd/base/sys/conf/files.i386#19 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.i386,v 1.422 2002/10/04 20:42:33 sam Exp $ +# $FreeBSD: src/sys/conf/files.i386,v 1.423 2002/10/05 16:35:26 phk Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -146,6 +146,8 @@ dev/syscons/scvtb.c optional sc dev/syscons/syscons.c optional sc dev/syscons/sysmouse.c optional sc +geom/geom_bsd.c standard +geom/geom_mbr.c standard gnu/i386/fpemul/div_small.s optional gpl_math_emulate \ warning "kernel contains GPL contaminated math emulator" gnu/i386/fpemul/errors.c optional gpl_math_emulate @@ -285,7 +287,7 @@ i386/isa/pmtimer.c optional pmtimer i386/isa/prof_machdep.c optional profiling-routine i386/isa/rc.c count rc -i386/isa/scd.c count scd +i386/isa/scd.c count scd nowerror i386/isa/spic.c optional spic i386/isa/spigot.c count spigot i386/isa/spkr.c optional speaker ==== //depot/projects/trustedbsd/base/sys/conf/files.ia64#10 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.ia64,v 1.37 2002/10/04 20:42:33 sam Exp $ +# $FreeBSD: src/sys/conf/files.ia64,v 1.38 2002/10/05 16:35:26 phk Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -99,6 +99,7 @@ dev/syscons/scvtb.c optional sc dev/syscons/syscons.c optional sc dev/syscons/sysmouse.c optional sc +geom/geom_gpt.c standard isa/atkbd_isa.c optional atkbd isa/atkbdc_isa.c optional atkbdc isa/fd.c optional fdc ==== //depot/projects/trustedbsd/base/sys/conf/files.pc98#17 (text+ko) ==== @@ -3,7 +3,7 @@ # # modified for PC-9801 # -# $FreeBSD: src/sys/conf/files.pc98,v 1.249 2002/10/04 20:42:33 sam Exp $ +# $FreeBSD: src/sys/conf/files.pc98,v 1.250 2002/10/05 16:35:26 phk Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -135,6 +135,9 @@ dev/syscons/scterm-dumb.c optional sc dev/syscons/scvidctl.c optional sc dev/syscons/sysmouse.c optional sc +geom/geom_mbr.c standard +geom/geom_bsd.c standard +geom/geom_pc98.c standard gnu/i386/fpemul/div_small.s optional gpl_math_emulate \ warning "kernel contains GPL contaminated math emulator" gnu/i386/fpemul/errors.c optional gpl_math_emulate ==== //depot/projects/trustedbsd/base/sys/conf/files.sparc64#16 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.sparc64,v 1.31 2002/10/04 20:42:33 sam Exp $ +# $FreeBSD: src/sys/conf/files.sparc64,v 1.32 2002/10/05 16:35:26 phk Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -16,6 +16,8 @@ dev/ofw/openfirm.c standard dev/sio/sio.c optional sio dev/sio/sio_isa.c optional sio isa +geom/geom_bsd.c standard +geom/geom_sunlabel.c standard libkern/ffs.c standard kern/subr_diskmbr.c standard kern/syscalls.c optional ktr ==== //depot/projects/trustedbsd/base/sys/conf/options#20 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/options,v 1.354 2002/10/02 07:44:15 scottl Exp $ +# $FreeBSD: src/sys/conf/options,v 1.355 2002/10/05 16:35:26 phk Exp $ # # On the handling of kernel options # @@ -86,7 +86,13 @@ DDB_UNATTENDED GDB_REMOTE_CHAT opt_ddb.h GDBSPEED opt_ddb.h -GEOM +NO_GEOM opt_geom.h +GEOM_AES opt_geom.h +GEOM_BSD opt_geom.h +GEOM_GPT opt_geom.h +GEOM_MBR opt_geom.h +GEOM_PC98 opt_geom.h +GEOM_SUNLABEL opt_geom.h HW_WDOG KSTACK_PAGES KSTACK_MAX_PAGES ==== //depot/projects/trustedbsd/base/sys/dev/mcd/mcd.c#2 (text+ko) ==== @@ -1,5 +1,7 @@ #include "opt_geom.h" -#ifndef GEOM +#ifndef NO_GEOM +#warning "The mcd driver is currently not compatible with GEOM" +#else /* * Copyright 1993 by Holger Veit (data part) * Copyright 1993 by Brian Moore (audio part) @@ -42,7 +44,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/mcd/mcd.c,v 1.129 2002/10/04 07:14:13 mdodd Exp $ + * $FreeBSD: src/sys/dev/mcd/mcd.c,v 1.130 2002/10/05 16:35:27 phk Exp $ */ static const char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore"; ==== //depot/projects/trustedbsd/base/sys/dev/mcd/mcd_isa.c#2 (text+ko) ==== @@ -1,7 +1,10 @@ /* - * $FreeBSD: src/sys/dev/mcd/mcd_isa.c,v 1.1 2002/10/04 07:14:13 mdodd Exp $ + * $FreeBSD: src/sys/dev/mcd/mcd_isa.c,v 1.2 2002/10/05 16:35:29 phk Exp $ */ +#include "opt_geom.h" +#ifdef NO_GEOM + #include <sys/param.h> #include <sys/systm.h> #include <sys/kernel.h> @@ -209,3 +212,5 @@ static devclass_t mcd_devclass; DRIVER_MODULE(mcd, isa, mcd_isa_driver, mcd_devclass, NULL, 0); + +#endif /* GEOM */ ==== //depot/projects/trustedbsd/base/sys/geom/geom_disk.c#10 (text+ko) ==== @@ -32,9 +32,12 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/geom/geom_disk.c,v 1.20 2002/10/04 10:15:26 phk Exp $ + * $FreeBSD: src/sys/geom/geom_disk.c,v 1.21 2002/10/05 16:35:29 phk Exp $ */ +#include "opt_geom.h" +#ifndef NO_GEOM + #include <sys/param.h> #include <sys/systm.h> #include <sys/kernel.h> @@ -263,15 +266,6 @@ { } -SYSCTL_INT(_debug_sizeof, OID_AUTO, disklabel, CTLFLAG_RD, - 0, sizeof(struct disklabel), "sizeof(struct disklabel)"); - -SYSCTL_INT(_debug_sizeof, OID_AUTO, diskslices, CTLFLAG_RD, - 0, sizeof(struct diskslices), "sizeof(struct diskslices)"); - -SYSCTL_INT(_debug_sizeof, OID_AUTO, disk, CTLFLAG_RD, - 0, sizeof(struct disk), "sizeof(struct disk)"); - static void g_kern_disks(void *p) { @@ -309,3 +303,5 @@ SYSCTL_PROC(_kern, OID_AUTO, disks, CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NOLOCK, 0, 0, sysctl_disks, "A", "names of available disks"); + +#endif ==== //depot/projects/trustedbsd/base/sys/i386/conf/GENERIC#22 (text+ko) ==== @@ -16,7 +16,7 @@ # If you are in doubt as to the purpose or necessity of a line, check first # in NOTES. # -# $FreeBSD: src/sys/i386/conf/GENERIC,v 1.365 2002/09/27 19:09:21 sos Exp $ +# $FreeBSD: src/sys/i386/conf/GENERIC,v 1.366 2002/10/05 16:35:30 phk Exp $ machine i386 cpu I486_CPU @@ -30,6 +30,8 @@ makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols +options NO_GEOM + options INET #InterNETworking options INET6 #IPv6 communications protocols options FFS #Berkeley Fast Filesystem ==== //depot/projects/trustedbsd/base/sys/i386/conf/OLDCARD#6 (text+ko) ==== @@ -17,7 +17,7 @@ # If you are in doubt as to the purpose or necessity of a line, check first # in NOTES. # -# $FreeBSD: src/sys/i386/conf/OLDCARD,v 1.10 2002/08/20 04:36:31 kuriyama Exp $ +# $FreeBSD: src/sys/i386/conf/OLDCARD,v 1.11 2002/10/05 16:35:30 phk Exp $ machine i386 cpu I486_CPU @@ -31,6 +31,8 @@ makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols +options NO_GEOM + options INET #InterNETworking options INET6 #IPv6 communications protocols options FFS #Berkeley Fast Filesystem ==== //depot/projects/trustedbsd/base/sys/i386/isa/scd.c#7 (text+ko) ==== @@ -1,5 +1,7 @@ #include "opt_geom.h" -#ifndef GEOM +#ifndef NO_GEOM +#warning "The scd driver is currently incompatible with GEOM" +#else /*- * Copyright (c) 1995 Mikael Hybsch * All rights reserved. @@ -43,7 +45,7 @@ */ -/* $FreeBSD: src/sys/i386/isa/scd.c,v 1.68 2002/10/04 08:33:10 mdodd Exp $ */ +/* $FreeBSD: src/sys/i386/isa/scd.c,v 1.69 2002/10/05 16:35:31 phk Exp $ */ /* Please send any comments to micke@dynas.se */ ==== //depot/projects/trustedbsd/base/sys/ia64/conf/GENERIC#13 (text+ko) ==== @@ -18,7 +18,7 @@ # # For hardware specific information check HARDWARE.TXT # -# $FreeBSD: src/sys/ia64/conf/GENERIC,v 1.37 2002/09/09 02:40:59 kuriyama Exp $ +# $FreeBSD: src/sys/ia64/conf/GENERIC,v 1.38 2002/10/05 16:35:31 phk Exp $ machine ia64 cpu ITANIUM @@ -31,6 +31,8 @@ makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols makeoptions NO_CPU_COPTFLAGS=true #Ignore any x86 CPUTYPE +options NO_GEOM + #options SKI #Support for HP simulator options INET #InterNETworking options INET6 #IPv6 communications protocols ==== //depot/projects/trustedbsd/base/sys/ia64/conf/SKI#6 (text+ko) ==== @@ -20,7 +20,7 @@ # # For hardware specific information check HARDWARE.TXT # -# $FreeBSD: src/sys/ia64/conf/SKI,v 1.6 2002/09/09 02:40:59 kuriyama Exp $ +# $FreeBSD: src/sys/ia64/conf/SKI,v 1.7 2002/10/05 16:35:31 phk Exp $ machine ia64 cpu ITANIUM @@ -33,6 +33,8 @@ makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols makeoptions NO_CPU_COPTFLAGS=true #Ignore any x86 CPUTYPE +options NO_GEOM + options SKI #Support for HP simulator options INET #InterNETworking #options INET6 #IPv6 communications protocols ==== //depot/projects/trustedbsd/base/sys/kern/kern_mac.c#14 (text+ko) ==== @@ -36,7 +36,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/kern/kern_mac.c,v 1.28 2002/10/05 15:09:57 rwatson Exp $ + * $FreeBSD: src/sys/kern/kern_mac.c,v 1.33 2002/10/05 16:57:16 rwatson Exp $ */ /* * Developed by the TrustedBSD Project. @@ -98,6 +98,7 @@ SYSCTL_NODE(_security, OID_AUTO, mac, CTLFLAG_RW, 0, "TrustedBSD MAC policy controls"); + #ifndef MAC_MAX_POLICIES #define MAC_MAX_POLICIES 8 #endif @@ -178,30 +179,34 @@ TUNABLE_INT("security.mac.debug_label_fallback", &mac_debug_label_fallback); +SYSCTL_NODE(_security_mac_debug, OID_AUTO, counters, CTLFLAG_RW, 0, + "TrustedBSD MAC object counters"); + static unsigned int nmacmbufs, nmaccreds, nmacifnets, nmacbpfdescs, nmacsockets, nmacmounts, nmactemp, nmacvnodes, nmacdevfsdirents, nmacipqs, nmacpipes; -SYSCTL_UINT(_security_mac_debug, OID_AUTO, mbufs, CTLFLAG_RD, + +SYSCTL_UINT(_security_mac_debug_counters, OID_AUTO, mbufs, CTLFLAG_RD, &nmacmbufs, 0, "number of mbufs in use"); -SYSCTL_UINT(_security_mac_debug, OID_AUTO, creds, CTLFLAG_RD, +SYSCTL_UINT(_security_mac_debug_counters, OID_AUTO, creds, CTLFLAG_RD, &nmaccreds, 0, "number of ucreds in use"); -SYSCTL_UINT(_security_mac_debug, OID_AUTO, ifnets, CTLFLAG_RD, +SYSCTL_UINT(_security_mac_debug_counters, OID_AUTO, ifnets, CTLFLAG_RD, &nmacifnets, 0, "number of ifnets in use"); -SYSCTL_UINT(_security_mac_debug, OID_AUTO, ipqs, CTLFLAG_RD, +SYSCTL_UINT(_security_mac_debug_counters, OID_AUTO, ipqs, CTLFLAG_RD, &nmacipqs, 0, "number of ipqs in use"); -SYSCTL_UINT(_security_mac_debug, OID_AUTO, bpfdescs, CTLFLAG_RD, +SYSCTL_UINT(_security_mac_debug_counters, OID_AUTO, bpfdescs, CTLFLAG_RD, &nmacbpfdescs, 0, "number of bpfdescs in use"); -SYSCTL_UINT(_security_mac_debug, OID_AUTO, sockets, CTLFLAG_RD, +SYSCTL_UINT(_security_mac_debug_counters, OID_AUTO, sockets, CTLFLAG_RD, &nmacsockets, 0, "number of sockets in use"); -SYSCTL_UINT(_security_mac_debug, OID_AUTO, pipes, CTLFLAG_RD, +SYSCTL_UINT(_security_mac_debug_counters, OID_AUTO, pipes, CTLFLAG_RD, &nmacpipes, 0, "number of pipes in use"); -SYSCTL_UINT(_security_mac_debug, OID_AUTO, mounts, CTLFLAG_RD, +SYSCTL_UINT(_security_mac_debug_counters, OID_AUTO, mounts, CTLFLAG_RD, &nmacmounts, 0, "number of mounts in use"); -SYSCTL_UINT(_security_mac_debug, OID_AUTO, temp, CTLFLAG_RD, +SYSCTL_UINT(_security_mac_debug_counters, OID_AUTO, temp, CTLFLAG_RD, &nmactemp, 0, "number of temporary labels in use"); -SYSCTL_UINT(_security_mac_debug, OID_AUTO, vnodes, CTLFLAG_RD, +SYSCTL_UINT(_security_mac_debug_counters, OID_AUTO, vnodes, CTLFLAG_RD, &nmacvnodes, 0, "number of vnodes in use"); -SYSCTL_UINT(_security_mac_debug, OID_AUTO, devfsdirents, CTLFLAG_RD, +SYSCTL_UINT(_security_mac_debug_counters, OID_AUTO, devfsdirents, CTLFLAG_RD, &nmacdevfsdirents, 0, "number of devfs dirents inuse"); #endif @@ -659,10 +664,12 @@ mpe->mpe_function; break; case MAC_CREATE_PROC0: - mpc->mpc_ops->mpo_create_proc0 = mpe->mpe_function; + mpc->mpc_ops->mpo_create_proc0 = + mpe->mpe_function; break; case MAC_CREATE_PROC1: - mpc->mpc_ops->mpo_create_proc1 = mpe->mpe_function; + mpc->mpc_ops->mpo_create_proc1 = + mpe->mpe_function; break; case MAC_RELABEL_CRED: mpc->mpc_ops->mpo_relabel_cred = @@ -921,16 +928,38 @@ mac_policy_unregister(struct mac_policy_conf *mpc) { + /* + * If we fail the load, we may get a request to unload. Check + * to see if we did the run-time registration, and if not, + * silently succeed. + */ + MAC_POLICY_LIST_LOCK(); + if ((mpc->mpc_runtime_flags & MPC_RUNTIME_FLAG_REGISTERED) == 0) { + MAC_POLICY_LIST_UNLOCK(); + return (0); + } #if 0 /* * Don't allow unloading modules with private data. */ - if (mpc->mpc_field_off != NULL) + if (mpc->mpc_field_off != NULL) { + MAC_POLICY_LIST_UNLOCK(); return (EBUSY); + } #endif - if ((mpc->mpc_loadtime_flags & MPC_LOADTIME_FLAG_UNLOADOK) == 0) + /* + * Only allow the unload to proceed if the module is unloadable + * by its own definition. + */ + if ((mpc->mpc_loadtime_flags & MPC_LOADTIME_FLAG_UNLOADOK) == 0) { + MAC_POLICY_LIST_UNLOCK(); return (EBUSY); - MAC_POLICY_LIST_LOCK(); + } + /* + * Right now, we EBUSY if the list is in use. In the future, + * for reliability reasons, we might want to sleep and wakeup + * later to try again. + */ if (mac_policy_list_busy > 0) { MAC_POLICY_LIST_UNLOCK(); return (EBUSY); @@ -987,291 +1016,6 @@ return (error2); } -void -mac_update_devfsdirent(struct devfs_dirent *de, struct vnode *vp) -{ - - MAC_PERFORM(update_devfsdirent, de, &de->de_label, vp, &vp->v_label); -} - -void -mac_update_procfsvnode(struct vnode *vp, struct ucred *cred) -{ - - MAC_PERFORM(update_procfsvnode, vp, &vp->v_label, cred); -} - -/* - * Support callout for policies that manage their own externalization - * using extended attributes. - */ -static int -mac_update_vnode_from_extattr(struct vnode *vp, struct mount *mp) -{ - int error; - - MAC_CHECK(update_vnode_from_extattr, vp, &vp->v_label, mp, - &mp->mnt_fslabel); - - return (error); -} - -/* - * Given an externalized mac label, internalize it and stamp it on a - * vnode. - */ -static int -mac_update_vnode_from_externalized(struct vnode *vp, struct mac *extmac) -{ - int error; - - MAC_CHECK(update_vnode_from_externalized, vp, &vp->v_label, extmac); - - return (error); -} - -/* - * Call out to individual policies to update the label in a vnode from - * the mountpoint. - */ -void -mac_update_vnode_from_mount(struct vnode *vp, struct mount *mp) -{ - - MAC_PERFORM(update_vnode_from_mount, vp, &vp->v_label, mp, - &mp->mnt_fslabel); - - ASSERT_VOP_LOCKED(vp, "mac_update_vnode_from_mount"); - if (mac_cache_fslabel_in_vnode) - vp->v_vflag |= VV_CACHEDLABEL; -} - -/* - * Implementation of VOP_REFRESHLABEL() that relies on extended attributes - * to store label data. Can be referenced by filesystems supporting - * extended attributes. - */ -int -vop_stdrefreshlabel_ea(struct vop_refreshlabel_args *ap) -{ - struct vnode *vp = ap->a_vp; - struct mac extmac; - int buflen, error; - - ASSERT_VOP_LOCKED(vp, "vop_stdrefreshlabel_ea"); - - /* - * Call out to external policies first. Order doesn't really - * matter, as long as failure of one assures failure of all. - */ - error = mac_update_vnode_from_extattr(vp, vp->v_mount); - if (error) - return (error); - - buflen = sizeof(extmac); - error = vn_extattr_get(vp, IO_NODELOCKED, - FREEBSD_MAC_EXTATTR_NAMESPACE, FREEBSD_MAC_EXTATTR_NAME, &buflen, - (char *)&extmac, curthread); - switch (error) { - case 0: - /* Got it */ - break; - - case ENOATTR: - /* - * Use the label from the mount point. - */ - mac_update_vnode_from_mount(vp, vp->v_mount); - return (0); - - case EOPNOTSUPP: - default: - /* Fail horribly. */ - return (error); - } - - if (buflen != sizeof(extmac)) - error = EPERM; /* Fail very closed. */ - if (error == 0) - error = mac_update_vnode_from_externalized(vp, &extmac); - if (error == 0) - vp->v_vflag |= VV_CACHEDLABEL; - else { - struct vattr va; - - printf("Corrupted label on %s", - vp->v_mount->mnt_stat.f_mntonname); - if (VOP_GETATTR(vp, &va, curthread->td_ucred, curthread) == 0) - printf(" inum %ld", va.va_fileid); -#ifdef MAC_DEBUG - if (mac_debug_label_fallback) { - printf(", falling back.\n"); - mac_update_vnode_from_mount(vp, vp->v_mount); - error = 0; - } else { -#endif - printf(".\n"); - error = EPERM; -#ifdef MAC_DEBUG - } -#endif - } - - return (error); -} - -/* - * Make sure the vnode label is up-to-date. If EOPNOTSUPP, then we handle - * the labeling activity outselves. Filesystems should be careful not - * to change their minds regarding whether they support vop_refreshlabel() - * for a vnode or not. Don't cache the vnode here, allow the file - * system code to determine if it's safe to cache. If we update from - * the mount, don't cache since a change to the mount label should affect - * all vnodes. - */ -static int -vn_refreshlabel(struct vnode *vp, struct ucred *cred) -{ - int error; - - ASSERT_VOP_LOCKED(vp, "vn_refreshlabel"); - - if (vp->v_mount == NULL) { -/* - Eventually, we probably want to special-case refreshing - of deadfs vnodes, and if there's a lock-free race somewhere, - that case might be handled here. - - mac_update_vnode_deadfs(vp); - return (0); - */ - /* printf("vn_refreshlabel: null v_mount\n"); */ - if (vp->v_type != VNON) - printf( - "vn_refreshlabel: null v_mount with non-VNON\n"); - return (EBADF); - } - - if (vp->v_vflag & VV_CACHEDLABEL) { - mac_vnode_label_cache_hits++; - return (0); - } else - mac_vnode_label_cache_misses++; - - if ((vp->v_mount->mnt_flag & MNT_MULTILABEL) == 0) { - mac_update_vnode_from_mount(vp, vp->v_mount); - return (0); - } - - error = VOP_REFRESHLABEL(vp, cred, curthread); - switch (error) { - case EOPNOTSUPP: - /* - * If labels are not supported on this vnode, fall back to - * the label in the mount and propagate it to the vnode. - * There should probably be some sort of policy/flag/decision - * about doing this. - */ - mac_update_vnode_from_mount(vp, vp->v_mount); - error = 0; - default: - return (error); - } -} - -/* - * Helper function for file systems using the vop_std*_ea() calls. This - * function must be called after EA service is available for the vnode, - * but before it's hooked up to the namespace so that the node persists - * if there's a crash, or before it can be accessed. On successful - * commit of the label to disk (etc), do cache the label. - */ -int -vop_stdcreatevnode_ea(struct vnode *dvp, struct vnode *tvp, struct ucred *cred) -{ - struct mac extmac; - int error; - - ASSERT_VOP_LOCKED(tvp, "vop_stdcreatevnode_ea"); - if ((dvp->v_mount->mnt_flag & MNT_MULTILABEL) == 0) { - mac_update_vnode_from_mount(tvp, tvp->v_mount); - } else { - error = vn_refreshlabel(dvp, cred); - if (error) - return (error); - - /* - * Stick the label in the vnode. Then try to write to - * disk. If we fail, return a failure to abort the - * create operation. Really, this failure shouldn't - * happen except in fairly unusual circumstances (out - * of disk, etc). - */ - mac_create_vnode(cred, dvp, tvp); - - error = mac_stdcreatevnode_ea(tvp); - if (error) - return (error); - - /* - * XXX: Eventually this will go away and all policies will - * directly manage their extended attributes. - */ - error = mac_externalize(&tvp->v_label, &extmac); - if (error) - return (error); - - error = vn_extattr_set(tvp, IO_NODELOCKED, - FREEBSD_MAC_EXTATTR_NAMESPACE, FREEBSD_MAC_EXTATTR_NAME, - sizeof(extmac), (char *)&extmac, curthread); - if (error == 0) - tvp->v_vflag |= VV_CACHEDLABEL; - else { -#if 0 - /* - * In theory, we could have fall-back behavior here. - * It would probably be incorrect. - */ -#endif - return (error); - } - } - - return (0); -} - -void -mac_execve_transition(struct ucred *old, struct ucred *new, struct vnode *vp) -{ - int error; - - ASSERT_VOP_LOCKED(vp, "mac_execve_transition"); - - error = vn_refreshlabel(vp, old); - if (error) { - printf("mac_execve_transition: vn_refreshlabel returned %d\n", - error); - printf("mac_execve_transition: using old vnode label\n"); - } - - MAC_PERFORM(execve_transition, old, new, vp, &vp->v_label); -} - -int -mac_execve_will_transition(struct ucred *old, struct vnode *vp) -{ - int error, result; - - error = vn_refreshlabel(vp, old); - if (error) - return (error); - - result = 0; - MAC_BOOLEAN(execve_will_transition, ||, old, vp, &vp->v_label); - - return (result); -} - static void mac_init_label(struct label *label) { @@ -1281,14 +1025,6 @@ } static void -mac_init_structmac(struct mac *mac) -{ - - bzero(mac, sizeof(*mac)); - mac->m_macflags = MAC_FLAG_INITIALIZED; -} - -static void mac_destroy_label(struct label *label) { @@ -1299,6 +1035,14 @@ /* implicit: label->l_flags &= ~MAC_FLAG_INITIALIZED; */ } +static void +mac_init_structmac(struct mac *mac) +{ + + bzero(mac, sizeof(*mac)); + mac->m_macflags = MAC_FLAG_INITIALIZED; +} + int mac_init_mbuf(struct mbuf *m, int how) { @@ -1622,6 +1366,291 @@ MAC_PERFORM(create_cred, parent_cred, child_cred); } +void +mac_update_devfsdirent(struct devfs_dirent *de, struct vnode *vp) +{ + + MAC_PERFORM(update_devfsdirent, de, &de->de_label, vp, &vp->v_label); +} + +void +mac_update_procfsvnode(struct vnode *vp, struct ucred *cred) +{ + + MAC_PERFORM(update_procfsvnode, vp, &vp->v_label, cred); +} + +/* + * Support callout for policies that manage their own externalization + * using extended attributes. + */ +static int +mac_update_vnode_from_extattr(struct vnode *vp, struct mount *mp) +{ + int error; + + MAC_CHECK(update_vnode_from_extattr, vp, &vp->v_label, mp, + &mp->mnt_fslabel); + + return (error); +} + +/* + * Given an externalized mac label, internalize it and stamp it on a + * vnode. + */ +static int +mac_update_vnode_from_externalized(struct vnode *vp, struct mac *extmac) +{ + int error; + + MAC_CHECK(update_vnode_from_externalized, vp, &vp->v_label, extmac); + + return (error); +} + +/* + * Call out to individual policies to update the label in a vnode from + * the mountpoint. + */ +void +mac_update_vnode_from_mount(struct vnode *vp, struct mount *mp) +{ + + MAC_PERFORM(update_vnode_from_mount, vp, &vp->v_label, mp, + &mp->mnt_fslabel); + + ASSERT_VOP_LOCKED(vp, "mac_update_vnode_from_mount"); + if (mac_cache_fslabel_in_vnode) + vp->v_vflag |= VV_CACHEDLABEL; +} + +/* + * Implementation of VOP_REFRESHLABEL() that relies on extended attributes + * to store label data. Can be referenced by filesystems supporting + * extended attributes. + */ +int +vop_stdrefreshlabel_ea(struct vop_refreshlabel_args *ap) +{ + struct vnode *vp = ap->a_vp; + struct mac extmac; + int buflen, error; + >>> TRUNCATED FOR MAIL (1000 lines) <<< To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200210051709.g95H9JiU088813>