From de5b19526b7350b9c608ae4bf0bd80b91e51a5df Mon Sep 17 00:00:00 2001 From: Alexander Leidinger Date: Fri, 25 Feb 2011 10:11:01 +0000 Subject: [PATCH] Add some FEATURE macros for various features (AUDIT/CAM/IPC/KTR/MAC/NFS/NTP/ PMC/SYSV/...). No FreeBSD version bump, the userland application to query the features will be committed last and can serve as an indication of the availablility if needed. Sponsored by: Google Summer of Code 2010 Submitted by: kibab Reviewed by: arch@ (parts by rwatson, trasz, jhb) X-MFC after: to be determined in last commit with code from this project --- sys/cam/cam.c | 3 +++ sys/fs/nfsclient/nfs_clvfsops.c | 2 ++ sys/fs/nfsserver/nfs_nfsdport.c | 2 ++ sys/kern/kern_dtrace.c | 4 ++++ sys/kern/kern_ktr.c | 2 ++ sys/kern/kern_ktrace.c | 2 ++ sys/kern/kern_lock.c | 4 ++++ sys/kern/kern_ntptime.c | 4 ++++ sys/kern/kern_pmc.c | 2 ++ sys/kern/kern_prot.c | 5 +++++ sys/kern/ksched.c | 4 ++++ sys/kern/subr_mchain.c | 3 +++ sys/kern/subr_stack.c | 3 +++ sys/kern/sysv_msg.c | 2 ++ sys/kern/sysv_sem.c | 2 ++ sys/kern/sysv_shm.c | 2 ++ sys/kern/uipc_cow.c | 2 ++ sys/kern/uipc_mqueue.c | 2 ++ sys/kern/uipc_sem.c | 1 + sys/nfsclient/nfs_vfsops.c | 2 ++ sys/nfsserver/nfs_serv.c | 2 ++ sys/security/audit/audit.c | 2 ++ sys/security/mac/mac_syscalls.c | 3 +++ 23 files changed, 60 insertions(+) diff --git a/sys/cam/cam.c b/sys/cam/cam.c index b3c9023acafa..4445d03e9980 100644 --- a/sys/cam/cam.c +++ b/sys/cam/cam.c @@ -51,6 +51,9 @@ __FBSDID("$FreeBSD$"); #include #include #include + +FEATURE(scbus, "SCSI devices support"); + #endif static int camstatusentrycomp(const void *key, const void *member); diff --git a/sys/fs/nfsclient/nfs_clvfsops.c b/sys/fs/nfsclient/nfs_clvfsops.c index b2d4864c6c55..d819527b87e4 100644 --- a/sys/fs/nfsclient/nfs_clvfsops.c +++ b/sys/fs/nfsclient/nfs_clvfsops.c @@ -73,6 +73,8 @@ __FBSDID("$FreeBSD$"); #include #include +FEATURE(nfscl, "NFSv4 client"); + extern int nfscl_ticks; extern struct timeval nfsboottime; extern struct nfsstats newnfsstats; diff --git a/sys/fs/nfsserver/nfs_nfsdport.c b/sys/fs/nfsserver/nfs_nfsdport.c index ab04ff069983..9b9cd06ee5b9 100644 --- a/sys/fs/nfsserver/nfs_nfsdport.c +++ b/sys/fs/nfsserver/nfs_nfsdport.c @@ -46,6 +46,8 @@ __FBSDID("$FreeBSD$"); #include #include +FEATURE(nfsd, "NFSv4 server"); + extern u_int32_t newnfs_true, newnfs_false, newnfs_xdrneg1; extern int nfsrv_useacl; extern int newnfs_numnfsd; diff --git a/sys/kern/kern_dtrace.c b/sys/kern/kern_dtrace.c index 603b4cf8c4e6..2082fed442b6 100644 --- a/sys/kern/kern_dtrace.c +++ b/sys/kern/kern_dtrace.c @@ -37,10 +37,14 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #define KDTRACE_PROC_SIZE 64 #define KDTRACE_THREAD_SIZE 256 +FEATURE(kdtrace_hooks, + "Kernel DTrace hooks which are required to load DTrace kernel modules"); + MALLOC_DEFINE(M_KDTRACE, "kdtrace", "DTrace hooks"); /* Return the DTrace process data size compiled in the kernel hooks. */ diff --git a/sys/kern/kern_ktr.c b/sys/kern/kern_ktr.c index 2fc2acc7730d..2e5e06f671b2 100644 --- a/sys/kern/kern_ktr.c +++ b/sys/kern/kern_ktr.c @@ -80,6 +80,8 @@ __FBSDID("$FreeBSD$"); #define KTR_CPU PCPU_GET(cpuid) #endif +FEATURE(ktr, "Kernel support for KTR kernel tracing facility"); + SYSCTL_NODE(_debug, OID_AUTO, ktr, CTLFLAG_RD, 0, "KTR options"); int ktr_cpumask = KTR_CPUMASK; diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c index 6e2285b391ce..5ff96c3b14b5 100644 --- a/sys/kern/kern_ktrace.c +++ b/sys/kern/kern_ktrace.c @@ -83,6 +83,8 @@ static MALLOC_DEFINE(M_KTRACE, "KTRACE", "KTRACE"); #ifdef KTRACE +FEATURE(ktrace, "Kernel support for system-call tracing"); + #ifndef KTRACE_REQUEST_POOL #define KTRACE_REQUEST_POOL 100 #endif diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c index 290da0510f84..8e5546ee3071 100644 --- a/sys/kern/kern_lock.c +++ b/sys/kern/kern_lock.c @@ -1299,6 +1299,10 @@ lockstatus(struct lock *lk) } #ifdef INVARIANT_SUPPORT + +FEATURE(invariant_support, + "Support for modules compiled with INVARIANTS option"); + #ifndef INVARIANTS #undef _lockmgr_assert #endif diff --git a/sys/kern/kern_ntptime.c b/sys/kern/kern_ntptime.c index 4050bafa809e..9ca3690f989b 100644 --- a/sys/kern/kern_ntptime.c +++ b/sys/kern/kern_ntptime.c @@ -51,6 +51,10 @@ __FBSDID("$FreeBSD$"); #include #include +#ifdef PPS_SYNC +FEATURE(pps_sync, "Support usage of external PPS signal by kernel PLL"); +#endif + /* * Single-precision macros for 64-bit machines */ diff --git a/sys/kern/kern_pmc.c b/sys/kern/kern_pmc.c index 4e3fe75e490e..7532378c7a2d 100644 --- a/sys/kern/kern_pmc.c +++ b/sys/kern/kern_pmc.c @@ -37,8 +37,10 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #ifdef HWPMC_HOOKS +FEATURE(hwpmc_hooks, "Kernel support for HW PMC"); #define PMC_KERNEL_VERSION PMC_VERSION #else #define PMC_KERNEL_VERSION 0 diff --git a/sys/kern/kern_prot.c b/sys/kern/kern_prot.c index 16b0f37ae914..4506034ab8cf 100644 --- a/sys/kern/kern_prot.c +++ b/sys/kern/kern_prot.c @@ -69,6 +69,11 @@ __FBSDID("$FreeBSD$"); #include #include +#ifdef REGRESSION +FEATURE(regression, + "Kernel support for interfaces nessesary for regression testing (SECURITY RISK!)"); +#endif + #if defined(INET) || defined(INET6) #include #include diff --git a/sys/kern/ksched.c b/sys/kern/ksched.c index 2d11363c94a0..7ee56d50b13b 100644 --- a/sys/kern/ksched.c +++ b/sys/kern/ksched.c @@ -41,12 +41,16 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include +#include #include #include #include #include #include +FEATURE(kposix_priority_scheduling, "POSIX P1003.1B realtime extensions"); + /* ksched: Real-time extension to support POSIX priority scheduling. */ diff --git a/sys/kern/subr_mchain.c b/sys/kern/subr_mchain.c index 5989cbf68b00..e40e5ff7d823 100644 --- a/sys/kern/subr_mchain.c +++ b/sys/kern/subr_mchain.c @@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -40,6 +41,8 @@ __FBSDID("$FreeBSD$"); #include +FEATURE(libmchain, "mchain library"); + MODULE_VERSION(libmchain, 1); #define MBERROR(format, ...) printf("%s(%d): "format, __func__ , \ diff --git a/sys/kern/subr_stack.c b/sys/kern/subr_stack.c index b719b71e27be..c26dad84fe71 100644 --- a/sys/kern/subr_stack.c +++ b/sys/kern/subr_stack.c @@ -39,6 +39,9 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include + +FEATURE(stack, "Support for capturing kernel stack"); static MALLOC_DEFINE(M_STACK, "stack", "Stack Traces"); diff --git a/sys/kern/sysv_msg.c b/sys/kern/sysv_msg.c index a5291dbce941..ace2eab349a7 100644 --- a/sys/kern/sysv_msg.c +++ b/sys/kern/sysv_msg.c @@ -72,6 +72,8 @@ __FBSDID("$FreeBSD$"); #include +FEATURE(sysv_msg, "System V message queues support"); + static MALLOC_DEFINE(M_MSG, "msg", "SVID compatible message queues"); static int msginit(void); diff --git a/sys/kern/sysv_sem.c b/sys/kern/sysv_sem.c index 9678f93402d6..d51fbee578e6 100644 --- a/sys/kern/sysv_sem.c +++ b/sys/kern/sysv_sem.c @@ -62,6 +62,8 @@ __FBSDID("$FreeBSD$"); #include +FEATURE(sysv_sem, "System V semaphores support"); + static MALLOC_DEFINE(M_SEM, "sem", "SVID compatible semaphores"); #ifdef SEM_DEBUG diff --git a/sys/kern/sysv_shm.c b/sys/kern/sysv_shm.c index 11d050e4a758..5ea9e5d2e37e 100644 --- a/sys/kern/sysv_shm.c +++ b/sys/kern/sysv_shm.c @@ -95,6 +95,8 @@ __FBSDID("$FreeBSD$"); #include #include +FEATURE(sysv_shm, "System V shared memory segments support"); + static MALLOC_DEFINE(M_SHM, "shm", "SVID compatible shared memory segments"); static int shmget_allocate_segment(struct thread *td, diff --git a/sys/kern/uipc_cow.c b/sys/kern/uipc_cow.c index 12404b5621ed..654b6d7095cf 100644 --- a/sys/kern/uipc_cow.c +++ b/sys/kern/uipc_cow.c @@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -57,6 +58,7 @@ __FBSDID("$FreeBSD$"); #include #include +FEATURE(zero_copy_sockets, "Zero copy sockets support"); struct netsend_cow_stats { int attempted; diff --git a/sys/kern/uipc_mqueue.c b/sys/kern/uipc_mqueue.c index 30c1aa93a86b..f757cc56aaee 100644 --- a/sys/kern/uipc_mqueue.c +++ b/sys/kern/uipc_mqueue.c @@ -82,6 +82,8 @@ __FBSDID("$FreeBSD$"); #include #include +FEATURE(p1003_1b_mqueue, "POSIX P1003.1B message queues support"); + /* * Limits and constants */ diff --git a/sys/kern/uipc_sem.c b/sys/kern/uipc_sem.c index 52700784149c..cef2fac80ada 100644 --- a/sys/kern/uipc_sem.c +++ b/sys/kern/uipc_sem.c @@ -65,6 +65,7 @@ __FBSDID("$FreeBSD$"); #include +FEATURE(p1003_1b_semaphores, "POSIX1003.1B semaphores support"); /* * TODO * diff --git a/sys/nfsclient/nfs_vfsops.c b/sys/nfsclient/nfs_vfsops.c index 3700708a28f5..1f6ba8c2954b 100644 --- a/sys/nfsclient/nfs_vfsops.c +++ b/sys/nfsclient/nfs_vfsops.c @@ -78,6 +78,8 @@ __FBSDID("$FreeBSD$"); #include #include +FEATURE(nfsclient, "NFS client"); + MALLOC_DEFINE(M_NFSREQ, "nfsclient_req", "NFS request header"); MALLOC_DEFINE(M_NFSBIGFH, "nfsclient_bigfh", "NFS version 3 file handle"); MALLOC_DEFINE(M_NFSDIROFF, "nfsclient_diroff", "NFS directory offset data"); diff --git a/sys/nfsserver/nfs_serv.c b/sys/nfsserver/nfs_serv.c index 5614ea48337c..1b9dd987bab9 100644 --- a/sys/nfsserver/nfs_serv.c +++ b/sys/nfsserver/nfs_serv.c @@ -97,6 +97,8 @@ __FBSDID("$FreeBSD$"); #include #include +FEATURE(nfsserver, "NFS server"); + #ifdef NFSRV_DEBUG #define nfsdbprintf(info) printf info #else diff --git a/sys/security/audit/audit.c b/sys/security/audit/audit.c index 40daaa9730c7..1799f16c6515 100644 --- a/sys/security/audit/audit.c +++ b/sys/security/audit/audit.c @@ -72,6 +72,8 @@ __FBSDID("$FreeBSD$"); #include +FEATURE(audit, "BSM audit support"); + static uma_zone_t audit_record_zone; static MALLOC_DEFINE(M_AUDITCRED, "audit_cred", "Audit cred storage"); MALLOC_DEFINE(M_AUDITDATA, "audit_data", "Audit data storage"); diff --git a/sys/security/mac/mac_syscalls.c b/sys/security/mac/mac_syscalls.c index 905c43bae2c9..6376c1b4d350 100644 --- a/sys/security/mac/mac_syscalls.c +++ b/sys/security/mac/mac_syscalls.c @@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -72,6 +73,8 @@ __FBSDID("$FreeBSD$"); #ifdef MAC +FEATURE(mac, "Mandatory Access Control Framework support"); + int __mac_get_pid(struct thread *td, struct __mac_get_pid_args *uap) {