[Midnightbsd-cvs] src [9913] trunk/sys/security: sync with freebsd 10-stable
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Fri May 25 08:41:03 EDT 2018
Revision: 9913
http://svnweb.midnightbsd.org/src/?rev=9913
Author: laffer1
Date: 2018-05-25 08:41:03 -0400 (Fri, 25 May 2018)
Log Message:
-----------
sync with freebsd 10-stable
Modified Paths:
--------------
trunk/sys/security/audit/audit.c
trunk/sys/security/audit/audit.h
trunk/sys/security/audit/audit_arg.c
trunk/sys/security/audit/audit_bsm.c
trunk/sys/security/audit/audit_bsm_domain.c
trunk/sys/security/audit/audit_bsm_errno.c
trunk/sys/security/audit/audit_bsm_fcntl.c
trunk/sys/security/audit/audit_bsm_klib.c
trunk/sys/security/audit/audit_bsm_socket_type.c
trunk/sys/security/audit/audit_bsm_token.c
trunk/sys/security/audit/audit_ioctl.h
trunk/sys/security/audit/audit_pipe.c
trunk/sys/security/audit/audit_private.h
trunk/sys/security/audit/audit_syscalls.c
trunk/sys/security/audit/audit_trigger.c
trunk/sys/security/audit/audit_worker.c
trunk/sys/security/mac/mac_atalk.c
trunk/sys/security/mac/mac_audit.c
trunk/sys/security/mac/mac_cred.c
trunk/sys/security/mac/mac_framework.c
trunk/sys/security/mac/mac_framework.h
trunk/sys/security/mac/mac_inet.c
trunk/sys/security/mac/mac_inet6.c
trunk/sys/security/mac/mac_internal.h
trunk/sys/security/mac/mac_label.c
trunk/sys/security/mac/mac_net.c
trunk/sys/security/mac/mac_pipe.c
trunk/sys/security/mac/mac_policy.h
trunk/sys/security/mac/mac_posix_sem.c
trunk/sys/security/mac/mac_posix_shm.c
trunk/sys/security/mac/mac_priv.c
trunk/sys/security/mac/mac_process.c
trunk/sys/security/mac/mac_socket.c
trunk/sys/security/mac/mac_syscalls.c
trunk/sys/security/mac/mac_system.c
trunk/sys/security/mac/mac_sysv_msg.c
trunk/sys/security/mac/mac_sysv_sem.c
trunk/sys/security/mac/mac_sysv_shm.c
trunk/sys/security/mac/mac_vfs.c
trunk/sys/security/mac_biba/mac_biba.c
trunk/sys/security/mac_biba/mac_biba.h
trunk/sys/security/mac_bsdextended/mac_bsdextended.c
trunk/sys/security/mac_bsdextended/mac_bsdextended.h
trunk/sys/security/mac_bsdextended/ugidfw_internal.h
trunk/sys/security/mac_bsdextended/ugidfw_system.c
trunk/sys/security/mac_bsdextended/ugidfw_vnode.c
trunk/sys/security/mac_ifoff/mac_ifoff.c
trunk/sys/security/mac_lomac/mac_lomac.c
trunk/sys/security/mac_lomac/mac_lomac.h
trunk/sys/security/mac_mls/mac_mls.c
trunk/sys/security/mac_mls/mac_mls.h
trunk/sys/security/mac_none/mac_none.c
trunk/sys/security/mac_partition/mac_partition.c
trunk/sys/security/mac_partition/mac_partition.h
trunk/sys/security/mac_portacl/mac_portacl.c
trunk/sys/security/mac_seeotheruids/mac_seeotheruids.c
trunk/sys/security/mac_stub/mac_stub.c
trunk/sys/security/mac_test/mac_test.c
Added Paths:
-----------
trunk/sys/security/audit/bsm_domain.c
trunk/sys/security/audit/bsm_errno.c
trunk/sys/security/audit/bsm_fcntl.c
trunk/sys/security/audit/bsm_socket_type.c
trunk/sys/security/audit/bsm_token.c
Modified: trunk/sys/security/audit/audit.c
===================================================================
--- trunk/sys/security/audit/audit.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2005 Apple Inc.
* Copyright (c) 2006-2007 Robert N. M. Watson
@@ -29,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/audit.c 253078 2013-07-09 09:03:01Z avg $");
#include <sys/param.h>
#include <sys/condvar.h>
@@ -38,6 +39,7 @@
#include <sys/filedesc.h>
#include <sys/fcntl.h>
#include <sys/ipc.h>
+#include <sys/jail.h>
#include <sys/kernel.h>
#include <sys/kthread.h>
#include <sys/malloc.h>
@@ -211,6 +213,7 @@
struct kaudit_record *ar;
struct thread *td;
struct ucred *cred;
+ struct prison *pr;
KASSERT(sizeof(*ar) == size, ("audit_record_ctor: wrong size"));
@@ -233,6 +236,17 @@
ar->k_ar.ar_subj_pid = td->td_proc->p_pid;
ar->k_ar.ar_subj_amask = cred->cr_audit.ai_mask;
ar->k_ar.ar_subj_term_addr = cred->cr_audit.ai_termid;
+ /*
+ * If this process is jailed, make sure we capture the name of the
+ * jail so we can use it to generate a zonename token when we covert
+ * this record to BSM.
+ */
+ if (jailed(cred)) {
+ pr = cred->cr_prison;
+ (void) strlcpy(ar->k_ar.ar_jailname, pr->pr_name,
+ sizeof(ar->k_ar.ar_jailname));
+ } else
+ ar->k_ar.ar_jailname[0] = '\0';
return (0);
}
@@ -688,6 +702,8 @@
* (signal) tokens.
*/
ar = audit_new(AUE_CORE, td);
+ if (ar == NULL)
+ return;
if (path != NULL) {
pathp = &ar->k_ar.ar_arg_upath1;
*pathp = malloc(MAXPATHLEN, M_AUDITPATH, M_WAITOK);
Modified: trunk/sys/security/audit/audit.h
===================================================================
--- trunk/sys/security/audit/audit.h 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit.h 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2005 Apple Inc.
* All rights reserved.
@@ -26,7 +27,7 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/audit/audit.h 255219 2013-09-05 00:09:56Z pjd $
*/
/*
@@ -95,7 +96,7 @@
void audit_arg_process(struct proc *p);
void audit_arg_signum(u_int signum);
void audit_arg_socket(int sodomain, int sotype, int soprotocol);
-void audit_arg_sockaddr(struct thread *td, struct sockaddr *sa);
+void audit_arg_sockaddr(struct thread *td, int dirfd, struct sockaddr *sa);
void audit_arg_auid(uid_t auid);
void audit_arg_auditinfo(struct auditinfo *au_info);
void audit_arg_auditinfo_addr(struct auditinfo_addr *au_info);
@@ -114,7 +115,8 @@
void audit_arg_file(struct proc *p, struct file *fp);
void audit_arg_argv(char *argv, int argc, int length);
void audit_arg_envv(char *envv, int envc, int length);
-void audit_arg_rights(cap_rights_t rights);
+void audit_arg_rights(cap_rights_t *rightsp);
+void audit_arg_fcntl_rights(uint32_t fcntlrights);
void audit_sysclose(struct thread *td, int fd);
void audit_cred_copy(struct ucred *src, struct ucred *dest);
void audit_cred_destroy(struct ucred *cred);
@@ -241,6 +243,11 @@
audit_arg_rights((rights)); \
} while (0)
+#define AUDIT_ARG_FCNTL_RIGHTS(fcntlrights) do { \
+ if (AUDITING_TD(curthread)) \
+ audit_arg_fcntl_rights((fcntlrights)); \
+} while (0)
+
#define AUDIT_ARG_RUID(ruid) do { \
if (AUDITING_TD(curthread)) \
audit_arg_ruid((ruid)); \
@@ -261,6 +268,11 @@
audit_arg_socket((sodomain), (sotype), (soprotocol)); \
} while (0)
+#define AUDIT_ARG_SOCKADDR(td, dirfd, sa) do { \
+ if (AUDITING_TD(curthread)) \
+ audit_arg_sockaddr((td), (dirfd), (sa)); \
+} while (0)
+
#define AUDIT_ARG_SUID(suid) do { \
if (AUDITING_TD(curthread)) \
audit_arg_suid((suid)); \
@@ -349,10 +361,12 @@
#define AUDIT_ARG_PROCESS(p)
#define AUDIT_ARG_RGID(rgid)
#define AUDIT_ARG_RIGHTS(rights)
+#define AUDIT_ARG_FCNTL_RIGHTS(fcntlrights)
#define AUDIT_ARG_RUID(ruid)
#define AUDIT_ARG_SIGNUM(signum)
#define AUDIT_ARG_SGID(sgid)
#define AUDIT_ARG_SOCKET(sodomain, sotype, soprotocol)
+#define AUDIT_ARG_SOCKADDR(td, dirfd, sa)
#define AUDIT_ARG_SUID(suid)
#define AUDIT_ARG_TEXT(text)
#define AUDIT_ARG_UID(uid)
Modified: trunk/sys/security/audit/audit_arg.c
===================================================================
--- trunk/sys/security/audit/audit_arg.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_arg.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2005 Apple Inc.
* All rights reserved.
@@ -28,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/audit_arg.c 255219 2013-09-05 00:09:56Z pjd $");
#include <sys/param.h>
#include <sys/filedesc.h>
@@ -441,7 +442,7 @@
}
void
-audit_arg_sockaddr(struct thread *td, struct sockaddr *sa)
+audit_arg_sockaddr(struct thread *td, int dirfd, struct sockaddr *sa)
{
struct kaudit_record *ar;
@@ -463,7 +464,9 @@
break;
case AF_UNIX:
- audit_arg_upath1(td, AT_FDCWD,
+ if (dirfd != AT_FDCWD)
+ audit_arg_atfd1(dirfd);
+ audit_arg_upath1(td, dirfd,
((struct sockaddr_un *)sa)->sun_path);
ARG_SET_VALID(ar, ARG_SADDRUNIX);
break;
@@ -652,7 +655,6 @@
struct socket *so;
struct inpcb *pcb;
struct vnode *vp;
- int vfslocked;
ar = currecord();
if (ar == NULL)
@@ -665,11 +667,9 @@
* XXXAUDIT: Only possibly to record as first vnode?
*/
vp = fp->f_vnode;
- vfslocked = VFS_LOCK_GIANT(vp->v_mount);
vn_lock(vp, LK_SHARED | LK_RETRY);
audit_arg_vnode1(vp);
VOP_UNLOCK(vp, 0);
- VFS_UNLOCK_GIANT(vfslocked);
break;
case DTYPE_SOCKET:
@@ -769,11 +769,6 @@
struct vattr vattr;
int error;
- /*
- * Assume that if the caller is calling audit_arg_vnode() on a
- * non-MPSAFE vnode, then it will have acquired Giant.
- */
- VFS_ASSERT_GIANT(vp->v_mount);
ASSERT_VOP_LOCKED(vp, "audit_arg_vnode");
error = VOP_GETATTR(vp, &vattr, curthread->td_ucred);
@@ -867,7 +862,7 @@
}
void
-audit_arg_rights(cap_rights_t rights)
+audit_arg_rights(cap_rights_t *rightsp)
{
struct kaudit_record *ar;
@@ -875,10 +870,23 @@
if (ar == NULL)
return;
- ar->k_ar.ar_arg_rights = rights;
+ ar->k_ar.ar_arg_rights = *rightsp;
ARG_SET_VALID(ar, ARG_RIGHTS);
}
+void
+audit_arg_fcntl_rights(uint32_t fcntlrights)
+{
+ struct kaudit_record *ar;
+
+ ar = currecord();
+ if (ar == NULL)
+ return;
+
+ ar->k_ar.ar_arg_fcntl_rights = fcntlrights;
+ ARG_SET_VALID(ar, ARG_FCNTL_RIGHTS);
+}
+
/*
* The close() system call uses it's own audit call to capture the path/vnode
* information because those pieces are not easily obtained within the system
@@ -890,7 +898,6 @@
struct kaudit_record *ar;
struct vnode *vp;
struct file *fp;
- int vfslocked;
KASSERT(td != NULL, ("audit_sysclose: td == NULL"));
@@ -904,10 +911,8 @@
return;
vp = fp->f_vnode;
- vfslocked = VFS_LOCK_GIANT(vp->v_mount);
vn_lock(vp, LK_SHARED | LK_RETRY);
audit_arg_vnode1(vp);
VOP_UNLOCK(vp, 0);
- VFS_UNLOCK_GIANT(vfslocked);
fdrop(fp, td);
}
Modified: trunk/sys/security/audit/audit_bsm.c
===================================================================
--- trunk/sys/security/audit/audit_bsm.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_bsm.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*
* Copyright (c) 1999-2009 Apple Inc.
* All rights reserved.
@@ -28,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/audit_bsm.c 255219 2013-09-05 00:09:56Z pjd $");
#include <sys/param.h>
#include <sys/vnode.h>
@@ -223,9 +224,7 @@
} while (0)
#define UPATH1_VNODE1_TOKENS do { \
- if (ARG_IS_VALID(kar, ARG_UPATH1)) { \
- UPATH1_TOKENS; \
- } \
+ UPATH1_TOKENS; \
if (ARG_IS_VALID(kar, ARG_VNODE1)) { \
tok = au_to_attr32(&ar->ar_arg_vnode1); \
kau_write(rec, tok); \
@@ -462,7 +461,7 @@
int
kaudit_to_bsm(struct kaudit_record *kar, struct au_record **pau)
{
- struct au_token *tok, *subj_tok;
+ struct au_token *tok, *subj_tok, *jail_tok;
struct au_record *rec;
au_tid_t tid;
struct audit_record *ar;
@@ -475,8 +474,13 @@
rec = kau_open();
/*
- * Create the subject token.
+ * Create the subject token. If this credential was jailed be sure to
+ * generate a zonename token.
*/
+ if (ar->ar_jailname[0] != '\0')
+ jail_tok = au_to_zonename(ar->ar_jailname);
+ else
+ jail_tok = NULL;
switch (ar->ar_subj_term_addr.at_type) {
case AU_IPv4:
tid.port = ar->ar_subj_term_addr.at_port;
@@ -551,6 +555,21 @@
/* XXX Need to handle ARG_SADDRINET6 */
break;
+ case AUE_BINDAT:
+ case AUE_CONNECTAT:
+ ATFD1_TOKENS(1);
+ if (ARG_IS_VALID(kar, ARG_FD)) {
+ tok = au_to_arg32(2, "fd", ar->ar_arg_fd);
+ kau_write(rec, tok);
+ }
+ if (ARG_IS_VALID(kar, ARG_SADDRUNIX)) {
+ tok = au_to_sock_unix((struct sockaddr_un *)
+ &ar->ar_arg_sockaddr);
+ kau_write(rec, tok);
+ UPATH1_TOKENS;
+ }
+ break;
+
case AUE_SOCKET:
case AUE_SOCKETPAIR:
if (ARG_IS_VALID(kar, ARG_SOCKINFO)) {
@@ -1593,18 +1612,21 @@
}
break;
- case AUE_CAP_NEW:
+ case AUE_CAP_RIGHTS_LIMIT:
/*
* XXXRW/XXXJA: Would be nice to audit socket/etc information.
*/
FD_VNODE1_TOKENS;
if (ARG_IS_VALID(kar, ARG_RIGHTS)) {
- tok = au_to_arg64(2, "rights", ar->ar_arg_rights);
+ tok = au_to_rights(&ar->ar_arg_rights);
kau_write(rec, tok);
}
break;
- case AUE_CAP_GETRIGHTS:
+ case AUE_CAP_FCNTLS_GET:
+ case AUE_CAP_IOCTLS_GET:
+ case AUE_CAP_IOCTLS_LIMIT:
+ case AUE_CAP_RIGHTS_GET:
if (ARG_IS_VALID(kar, ARG_FD)) {
tok = au_to_arg32(1, "fd", ar->ar_arg_fd);
kau_write(rec, tok);
@@ -1611,6 +1633,15 @@
}
break;
+ case AUE_CAP_FCNTLS_LIMIT:
+ FD_VNODE1_TOKENS;
+ if (ARG_IS_VALID(kar, ARG_FCNTL_RIGHTS)) {
+ tok = au_to_arg32(2, "fcntlrights",
+ ar->ar_arg_fcntl_rights);
+ kau_write(rec, tok);
+ }
+ break;
+
case AUE_CAP_ENTER:
case AUE_CAP_GETMODE:
break;
@@ -1623,11 +1654,15 @@
/*
* Write the subject token so it is properly freed here.
*/
+ if (jail_tok != NULL)
+ kau_write(rec, jail_tok);
kau_write(rec, subj_tok);
kau_free(rec);
return (BSM_NOAUDIT);
}
+ if (jail_tok != NULL)
+ kau_write(rec, jail_tok);
kau_write(rec, subj_tok);
tok = au_to_return32(au_errno_to_bsm(ar->ar_errno), ar->ar_retval);
kau_write(rec, tok); /* Every record gets a return token */
Modified: trunk/sys/security/audit/audit_bsm_domain.c
===================================================================
--- trunk/sys/security/audit/audit_bsm_domain.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_bsm_domain.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2008 Apple Inc.
* All rights reserved.
Modified: trunk/sys/security/audit/audit_bsm_errno.c
===================================================================
--- trunk/sys/security/audit/audit_bsm_errno.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_bsm_errno.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2008 Apple Inc.
* All rights reserved.
Modified: trunk/sys/security/audit/audit_bsm_fcntl.c
===================================================================
--- trunk/sys/security/audit/audit_bsm_fcntl.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_bsm_fcntl.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2008-2009 Apple Inc.
* All rights reserved.
Modified: trunk/sys/security/audit/audit_bsm_klib.c
===================================================================
--- trunk/sys/security/audit/audit_bsm_klib.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_bsm_klib.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*
* Copyright (c) 1999-2009 Apple Inc.
* Copyright (c) 2005 Robert N. M. Watson
@@ -29,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/audit_bsm_klib.c 263960 2014-03-31 02:24:29Z mjg $");
#include <sys/param.h>
#include <sys/fcntl.h>
@@ -273,7 +274,6 @@
case KERN_USRSTACK:
case KERN_LOGSIGEXIT:
case KERN_IOV_MAX:
- case KERN_MAXID:
return ((valid_arg & ARG_VALUE) ?
AUE_SYSCTL : AUE_SYSCTL_NONADMIN);
@@ -468,7 +468,7 @@
char *rbuf, *fbuf, *copy;
struct filedesc *fdp;
struct sbuf sbf;
- int error, needslash, vfslocked;
+ int error, needslash;
WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL, "%s: at %s:%d",
__func__, __FILE__, __LINE__);
@@ -496,8 +496,9 @@
vhold(cvnp);
} else {
/* XXX: fgetvp() that vhold()s vnode instead of vref()ing it would be better */
- error = fgetvp(td, dirfd, 0, &cvnp);
+ error = fgetvp(td, dirfd, NULL, &cvnp);
if (error) {
+ FILEDESC_SUNLOCK(fdp);
cpath[0] = '\0';
if (rvnp != NULL)
vdrop(rvnp);
@@ -504,9 +505,7 @@
return;
}
vhold(cvnp);
- vfslocked = VFS_LOCK_GIANT(cvnp->v_mount);
vrele(cvnp);
- VFS_UNLOCK_GIANT(vfslocked);
}
needslash = (fdp->fd_rdir != cvnp);
} else {
Modified: trunk/sys/security/audit/audit_bsm_socket_type.c
===================================================================
--- trunk/sys/security/audit/audit_bsm_socket_type.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_bsm_socket_type.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2008 Apple Inc.
* All rights reserved.
Modified: trunk/sys/security/audit/audit_bsm_token.c
===================================================================
--- trunk/sys/security/audit/audit_bsm_token.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_bsm_token.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2004-2009 Apple Inc.
* Copyright (c) 2005 SPARTA, Inc.
Modified: trunk/sys/security/audit/audit_ioctl.h
===================================================================
--- trunk/sys/security/audit/audit_ioctl.h 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_ioctl.h 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2006 Robert N. M. Watson
* All rights reserved.
@@ -25,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/audit/audit_ioctl.h 169097 2007-04-29 16:20:32Z rwatson $
*/
#ifndef _SECURITY_AUDIT_AUDIT_IOCTL_H_
Modified: trunk/sys/security/audit/audit_pipe.c
===================================================================
--- trunk/sys/security/audit/audit_pipe.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_pipe.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2006 Robert N. M. Watson
* Copyright (c) 2008-2009 Apple, Inc.
@@ -28,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/audit_pipe.c 255359 2013-09-07 13:45:44Z davide $");
#include <sys/param.h>
#include <sys/condvar.h>
@@ -231,7 +232,7 @@
static struct cdevsw audit_pipe_cdevsw = {
.d_version = D_VERSION,
- .d_flags = D_PSEUDO | D_NEEDMINOR,
+ .d_flags = D_NEEDMINOR,
.d_open = audit_pipe_open,
.d_close = audit_pipe_close,
.d_read = audit_pipe_read,
@@ -672,14 +673,9 @@
return;
i = clone_create(&audit_pipe_clones, &audit_pipe_cdevsw, &u, dev, 0);
- if (i) {
- *dev = make_dev(&audit_pipe_cdevsw, u, UID_ROOT,
- GID_WHEEL, 0600, "%s%d", AUDIT_PIPE_NAME, u);
- if (*dev != NULL) {
- dev_ref(*dev);
- (*dev)->si_flags |= SI_CHEAPCLONE;
- }
- }
+ if (i)
+ *dev = make_dev_credf(MAKEDEV_REF, &audit_pipe_cdevsw, u, cred,
+ UID_ROOT, GID_WHEEL, 0600, "%s%d", AUDIT_PIPE_NAME, u);
}
/*
Modified: trunk/sys/security/audit/audit_private.h
===================================================================
--- trunk/sys/security/audit/audit_private.h 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_private.h 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2009 Apple Inc.
* All rights reserved.
@@ -26,7 +27,7 @@
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/audit/audit_private.h 255219 2013-09-05 00:09:56Z pjd $
*/
/*
@@ -41,6 +42,7 @@
#error "no user-serviceable parts inside"
#endif
+#include <sys/caprights.h>
#include <sys/ipc.h>
#include <sys/socket.h>
#include <sys/ucred.h>
@@ -202,7 +204,7 @@
mode_t ar_arg_mode;
int ar_arg_dev;
long ar_arg_value;
- void * ar_arg_addr;
+ void *ar_arg_addr;
int ar_arg_len;
int ar_arg_mask;
u_int ar_arg_signum;
@@ -219,7 +221,7 @@
int ar_arg_svipc_cmd;
struct ipc_perm ar_arg_svipc_perm;
int ar_arg_svipc_id;
- void * ar_arg_svipc_addr;
+ void *ar_arg_svipc_addr;
struct posix_ipc_perm ar_arg_pipc_perm;
union auditon_udata ar_arg_auditon;
char *ar_arg_argv;
@@ -230,6 +232,8 @@
int ar_arg_exitretval;
struct sockaddr_storage ar_arg_sockaddr;
cap_rights_t ar_arg_rights;
+ uint32_t ar_arg_fcntl_rights;
+ char ar_jailname[MAXHOSTNAMELEN];
};
/*
@@ -290,6 +294,7 @@
#define ARG_ATFD1 0x0004000000000000ULL
#define ARG_ATFD2 0x0008000000000000ULL
#define ARG_RIGHTS 0x0010000000000000ULL
+#define ARG_FCNTL_RIGHTS 0x0020000000000000ULL
#define ARG_NONE 0x0000000000000000ULL
#define ARG_ALL 0xFFFFFFFFFFFFFFFFULL
Modified: trunk/sys/security/audit/audit_syscalls.c
===================================================================
--- trunk/sys/security/audit/audit_syscalls.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_syscalls.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2009 Apple Inc.
* All rights reserved.
@@ -28,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/audit_syscalls.c 302229 2016-06-27 21:25:01Z bdrewery $");
#include <sys/param.h>
#include <sys/mount.h>
@@ -461,7 +462,7 @@
udata.au_aupinfo.ap_mask.am_success;
newcred->cr_audit.ai_mask.am_failure =
udata.au_aupinfo.ap_mask.am_failure;
- td->td_proc->p_ucred = newcred;
+ proc_set_cred(tp, newcred);
PROC_UNLOCK(tp);
crfree(oldcred);
break;
@@ -600,7 +601,7 @@
if (error)
goto fail;
newcred->cr_audit.ai_auid = id;
- td->td_proc->p_ucred = newcred;
+ proc_set_cred(td->td_proc, newcred);
PROC_UNLOCK(td->td_proc);
crfree(oldcred);
return (0);
@@ -671,7 +672,7 @@
newcred->cr_audit.ai_termid.at_addr[0] = ai.ai_termid.machine;
newcred->cr_audit.ai_termid.at_port = ai.ai_termid.port;
newcred->cr_audit.ai_termid.at_type = AU_IPv4;
- td->td_proc->p_ucred = newcred;
+ proc_set_cred(td->td_proc, newcred);
PROC_UNLOCK(td->td_proc);
crfree(oldcred);
return (0);
@@ -728,7 +729,7 @@
if (error)
goto fail;
newcred->cr_audit = aia;
- td->td_proc->p_ucred = newcred;
+ proc_set_cred(td->td_proc, newcred);
PROC_UNLOCK(td->td_proc);
crfree(oldcred);
return (0);
@@ -749,7 +750,7 @@
struct ucred *cred;
struct vnode *vp;
int error = 0;
- int flags, vfslocked;
+ int flags;
if (jailed(td->td_ucred))
return (ENOSYS);
@@ -770,13 +771,12 @@
if (uap->path == NULL)
return (EINVAL);
- NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1,
+ NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF | AUDITVNODE1,
UIO_USERSPACE, uap->path, td);
flags = AUDIT_OPEN_FLAGS;
error = vn_open(&nd, &flags, 0, NULL);
if (error)
return (error);
- vfslocked = NDHASGIANT(&nd);
vp = nd.ni_vp;
#ifdef MAC
error = mac_system_check_auditctl(td->td_ucred, vp);
@@ -783,7 +783,6 @@
VOP_UNLOCK(vp, 0);
if (error) {
vn_close(vp, AUDIT_CLOSE_FLAGS, td->td_ucred, td);
- VFS_UNLOCK_GIANT(vfslocked);
return (error);
}
#else
@@ -792,10 +791,8 @@
NDFREE(&nd, NDF_ONLY_PNBUF);
if (vp->v_type != VREG) {
vn_close(vp, AUDIT_CLOSE_FLAGS, td->td_ucred, td);
- VFS_UNLOCK_GIANT(vfslocked);
return (EINVAL);
}
- VFS_UNLOCK_GIANT(vfslocked);
cred = td->td_ucred;
crhold(cred);
Modified: trunk/sys/security/audit/audit_trigger.c
===================================================================
--- trunk/sys/security/audit/audit_trigger.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_trigger.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2005 Wayne J. Salamon
* All rights reserved.
@@ -27,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/audit_trigger.c 180709 2008-07-22 16:44:48Z rwatson $");
#include <sys/param.h>
#include <sys/conf.h>
Modified: trunk/sys/security/audit/audit_worker.c
===================================================================
--- trunk/sys/security/audit/audit_worker.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/audit/audit_worker.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2008 Apple Inc.
* Copyright (c) 2006-2008 Robert N. M. Watson
@@ -29,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/audit_worker.c 294619 2016-01-23 07:35:29Z kib $");
#include <sys/param.h>
#include <sys/condvar.h>
@@ -71,6 +72,8 @@
#include <vm/uma.h>
+#include <machine/stdarg.h>
+
/*
* Worker thread that will schedule disk I/O, etc.
*/
@@ -98,6 +101,26 @@
#define AUDIT_WORKER_LOCK() sx_xlock(&audit_worker_lock)
#define AUDIT_WORKER_UNLOCK() sx_xunlock(&audit_worker_lock)
+static void
+audit_worker_sync_vp(struct vnode *vp, struct mount *mp, const char *fmt, ...)
+{
+ struct mount *mp1;
+ int error;
+ va_list va;
+
+ va_start(va, fmt);
+ error = vn_start_write(vp, &mp1, 0);
+ if (error == 0) {
+ VOP_LOCK(vp, LK_EXCLUSIVE | LK_RETRY);
+ (void)VOP_FSYNC(vp, MNT_WAIT, curthread);
+ VOP_UNLOCK(vp, 0);
+ vn_finished_write(mp1);
+ }
+ vfs_unbusy(mp);
+ vpanic(fmt, va);
+ va_end(va);
+}
+
/*
* Write an audit record to a file, performed as the last stage after both
* preselection and BSM conversion. Both space management and write failures
@@ -114,7 +137,8 @@
static struct timeval last_fail;
static int cur_lowspace_trigger;
struct statfs *mnt_stat;
- int error, vfslocked;
+ struct mount *mp;
+ int error;
static int cur_fail;
long temp;
@@ -123,8 +147,17 @@
if (vp == NULL)
return;
- mnt_stat = &vp->v_mount->mnt_stat;
- vfslocked = VFS_LOCK_GIANT(vp->v_mount);
+ mp = vp->v_mount;
+ if (mp == NULL) {
+ error = EINVAL;
+ goto fail;
+ }
+ error = vfs_busy(mp, 0);
+ if (error != 0) {
+ mp = NULL;
+ goto fail;
+ }
+ mnt_stat = &mp->mnt_stat;
/*
* First, gather statistics on the audit log file and file system so
@@ -131,8 +164,8 @@
* that we know how we're doing on space. Consider failure of these
* operations to indicate a future inability to write to the file.
*/
- error = VFS_STATFS(vp->v_mount, mnt_stat);
- if (error)
+ error = VFS_STATFS(mp, mnt_stat);
+ if (error != 0)
goto fail;
/*
@@ -247,14 +280,12 @@
*/
if (audit_in_failure) {
if (audit_q_len == 0 && audit_pre_q_len == 0) {
- VOP_LOCK(vp, LK_EXCLUSIVE | LK_RETRY);
- (void)VOP_FSYNC(vp, MNT_WAIT, curthread);
- VOP_UNLOCK(vp, 0);
- panic("Audit store overflow; record queue drained.");
+ audit_worker_sync_vp(vp, mp,
+ "Audit store overflow; record queue drained.");
}
}
- VFS_UNLOCK_GIANT(vfslocked);
+ vfs_unbusy(mp);
return;
fail_enospc:
@@ -264,10 +295,8 @@
* space, or ENOSPC returned by the vnode write call.
*/
if (audit_fail_stop) {
- VOP_LOCK(vp, LK_EXCLUSIVE | LK_RETRY);
- (void)VOP_FSYNC(vp, MNT_WAIT, curthread);
- VOP_UNLOCK(vp, 0);
- panic("Audit log space exhausted and fail-stop set.");
+ audit_worker_sync_vp(vp, mp,
+ "Audit log space exhausted and fail-stop set.");
}
(void)audit_send_trigger(AUDIT_TRIGGER_NO_SPACE);
audit_suspended = 1;
@@ -279,13 +308,12 @@
* lost, which may require an immediate system halt.
*/
if (audit_panic_on_write_fail) {
- VOP_LOCK(vp, LK_EXCLUSIVE | LK_RETRY);
- (void)VOP_FSYNC(vp, MNT_WAIT, curthread);
- VOP_UNLOCK(vp, 0);
- panic("audit_worker: write error %d\n", error);
+ audit_worker_sync_vp(vp, mp,
+ "audit_worker: write error %d\n", error);
} else if (ppsratecheck(&last_fail, &cur_fail, 1))
printf("audit_worker: write error %d\n", error);
- VFS_UNLOCK_GIANT(vfslocked);
+ if (mp != NULL)
+ vfs_unbusy(mp);
}
/*
@@ -447,7 +475,6 @@
{
struct ucred *old_audit_cred;
struct vnode *old_audit_vp;
- int vfslocked;
struct vattr vattr;
KASSERT((cred != NULL && vp != NULL) || (cred == NULL && vp == NULL),
@@ -480,10 +507,8 @@
* If there was an old vnode/credential, close and free.
*/
if (old_audit_vp != NULL) {
- vfslocked = VFS_LOCK_GIANT(old_audit_vp->v_mount);
vn_close(old_audit_vp, AUDIT_CLOSE_FLAGS, old_audit_cred,
curthread);
- VFS_UNLOCK_GIANT(vfslocked);
crfree(old_audit_cred);
}
}
Added: trunk/sys/security/audit/bsm_domain.c
===================================================================
--- trunk/sys/security/audit/bsm_domain.c (rev 0)
+++ trunk/sys/security/audit/bsm_domain.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -0,0 +1,494 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2008 Apple Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/bsm_domain.c 293163 2016-01-04 16:51:56Z brueffer $");
+
+#include <sys/param.h>
+#include <sys/socket.h>
+
+#include <security/audit/audit.h>
+
+#include <bsm/audit_domain.h>
+#include <bsm/audit_record.h>
+
+struct bsm_domain {
+ u_short bd_bsm_domain;
+ int bd_local_domain;
+};
+
+#define PF_NO_LOCAL_MAPPING -600
+
+static const struct bsm_domain bsm_domains[] = {
+ { BSM_PF_UNSPEC, PF_UNSPEC },
+ { BSM_PF_LOCAL, PF_LOCAL },
+ { BSM_PF_INET, PF_INET },
+ { BSM_PF_IMPLINK,
+#ifdef PF_IMPLINK
+ PF_IMPLINK
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_PUP,
+#ifdef PF_PUP
+ PF_PUP
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_CHAOS,
+#ifdef PF_CHAOS
+ PF_CHAOS
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_NS,
+#ifdef PF_NS
+ PF_NS
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_NBS,
+#ifdef PF_NBS
+ PF_NBS
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_ECMA,
+#ifdef PF_ECMA
+ PF_ECMA
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_DATAKIT,
+#ifdef PF_DATAKIT
+ PF_DATAKIT
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_CCITT,
+#ifdef PF_CCITT
+ PF_CCITT
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_SNA, PF_SNA },
+ { BSM_PF_DECnet, PF_DECnet },
+ { BSM_PF_DLI,
+#ifdef PF_DLI
+ PF_DLI
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_LAT,
+#ifdef PF_LAT
+ PF_LAT
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_HYLINK,
+#ifdef PF_HYLINK
+ PF_HYLINK
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_APPLETALK, PF_APPLETALK },
+ { BSM_PF_NIT,
+#ifdef PF_NIT
+ PF_NIT
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_802,
+#ifdef PF_802
+ PF_802
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_OSI,
+#ifdef PF_OSI
+ PF_OSI
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_X25,
+#ifdef PF_X25
+ PF_X25
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_OSINET,
+#ifdef PF_OSINET
+ PF_OSINET
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_GOSIP,
+#ifdef PF_GOSIP
+ PF_GOSIP
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_IPX, PF_IPX },
+ { BSM_PF_ROUTE, PF_ROUTE },
+ { BSM_PF_LINK,
+#ifdef PF_LINK
+ PF_LINK
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_INET6, PF_INET6 },
+ { BSM_PF_KEY, PF_KEY },
+ { BSM_PF_NCA,
+#ifdef PF_NCA
+ PF_NCA
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_POLICY,
+#ifdef PF_POLICY
+ PF_POLICY
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_INET_OFFLOAD,
+#ifdef PF_INET_OFFLOAD
+ PF_INET_OFFLOAD
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_NETBIOS,
+#ifdef PF_NETBIOS
+ PF_NETBIOS
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_ISO,
+#ifdef PF_ISO
+ PF_ISO
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_XTP,
+#ifdef PF_XTP
+ PF_XTP
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_COIP,
+#ifdef PF_COIP
+ PF_COIP
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_CNT,
+#ifdef PF_CNT
+ PF_CNT
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_RTIP,
+#ifdef PF_RTIP
+ PF_RTIP
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_SIP,
+#ifdef PF_SIP
+ PF_SIP
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_PIP,
+#ifdef PF_PIP
+ PF_PIP
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_ISDN,
+#ifdef PF_ISDN
+ PF_ISDN
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_E164,
+#ifdef PF_E164
+ PF_E164
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_NATM,
+#ifdef PF_NATM
+ PF_NATM
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_ATM,
+#ifdef PF_ATM
+ PF_ATM
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_NETGRAPH,
+#ifdef PF_NETGRAPH
+ PF_NETGRAPH
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_SLOW,
+#ifdef PF_SLOW
+ PF_SLOW
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_SCLUSTER,
+#ifdef PF_SCLUSTER
+ PF_SCLUSTER
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_ARP,
+#ifdef PF_ARP
+ PF_ARP
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_BLUETOOTH,
+#ifdef PF_BLUETOOTH
+ PF_BLUETOOTH
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_AX25,
+#ifdef PF_AX25
+ PF_AX25
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_ROSE,
+#ifdef PF_ROSE
+ PF_ROSE
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_NETBEUI,
+#ifdef PF_NETBEUI
+ PF_NETBEUI
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_SECURITY,
+#ifdef PF_SECURITY
+ PF_SECURITY
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_PACKET,
+#ifdef PF_PACKET
+ PF_PACKET
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_ASH,
+#ifdef PF_ASH
+ PF_ASH
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_ECONET,
+#ifdef PF_ECONET
+ PF_ECONET
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_ATMSVC,
+#ifdef PF_ATMSVC
+ PF_ATMSVC
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_IRDA,
+#ifdef PF_IRDA
+ PF_IRDA
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_PPPOX,
+#ifdef PF_PPPOX
+ PF_PPPOX
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_WANPIPE,
+#ifdef PF_WANPIPE
+ PF_WANPIPE
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_LLC,
+#ifdef PF_LLC
+ PF_LLC
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_CAN,
+#ifdef PF_CAN
+ PF_CAN
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_TIPC,
+#ifdef PF_TIPC
+ PF_TIPC
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_IUCV,
+#ifdef PF_IUCV
+ PF_IUCV
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_RXRPC,
+#ifdef PF_RXRPC
+ PF_RXRPC
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+ { BSM_PF_PHONET,
+#ifdef PF_PHONET
+ PF_PHONET
+#else
+ PF_NO_LOCAL_MAPPING
+#endif
+ },
+};
+static const int bsm_domains_count = sizeof(bsm_domains) /
+ sizeof(bsm_domains[0]);
+
+static const struct bsm_domain *
+bsm_lookup_local_domain(int local_domain)
+{
+ int i;
+
+ for (i = 0; i < bsm_domains_count; i++) {
+ if (bsm_domains[i].bd_local_domain == local_domain)
+ return (&bsm_domains[i]);
+ }
+ return (NULL);
+}
+
+u_short
+au_domain_to_bsm(int local_domain)
+{
+ const struct bsm_domain *bstp;
+
+ bstp = bsm_lookup_local_domain(local_domain);
+ if (bstp == NULL)
+ return (BSM_PF_UNKNOWN);
+ return (bstp->bd_bsm_domain);
+}
+
+static const struct bsm_domain *
+bsm_lookup_bsm_domain(u_short bsm_domain)
+{
+ int i;
+
+ for (i = 0; i < bsm_domains_count; i++) {
+ if (bsm_domains[i].bd_bsm_domain == bsm_domain)
+ return (&bsm_domains[i]);
+ }
+ return (NULL);
+}
+
+int
+au_bsm_to_domain(u_short bsm_domain, int *local_domainp)
+{
+ const struct bsm_domain *bstp;
+
+ bstp = bsm_lookup_bsm_domain(bsm_domain);
+ if (bstp == NULL || bstp->bd_local_domain)
+ return (-1);
+ *local_domainp = bstp->bd_local_domain;
+ return (0);
+}
Property changes on: trunk/sys/security/audit/bsm_domain.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/security/audit/bsm_errno.c
===================================================================
--- trunk/sys/security/audit/bsm_errno.c (rev 0)
+++ trunk/sys/security/audit/bsm_errno.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -0,0 +1,774 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2008 Apple Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/bsm_errno.c 293163 2016-01-04 16:51:56Z brueffer $");
+
+#include <sys/param.h>
+
+#include <security/audit/audit.h>
+
+#include <bsm/audit_errno.h>
+#include <bsm/audit_record.h>
+
+#include <sys/errno.h>
+
+/*
+ * Different operating systems use different numeric constants for different
+ * error numbers, and sometimes error numbers don't exist in more than one
+ * operating system. These routines convert between BSM and local error
+ * number spaces, subject to the above realities. BSM error numbers are
+ * stored in a single 8-bit character, so don't have a byte order.
+ *
+ * Don't include string definitions when this code is compiled into a kernel.
+ */
+struct bsm_errno {
+ int be_bsm_errno;
+ int be_local_errno;
+#if !defined(KERNEL) && !defined(_KERNEL)
+ const char *be_strerror;
+#endif
+};
+
+#define ERRNO_NO_LOCAL_MAPPING -600
+
+#if !defined(KERNEL) && !defined(_KERNEL)
+#define ES(x) x
+#else
+#define ES(x)
+#endif
+
+/*
+ * Mapping table -- please maintain in numeric sorted order with respect to
+ * the BSM constant. Today we do a linear lookup, but could switch to a
+ * binary search if it makes sense. We only ifdef errors that aren't
+ * generally available, but it does make the table a lot more ugly.
+ *
+ * XXXRW: It would be nice to have a similar ordered table mapping to BSM
+ * constant from local constant, but the order of local constants varies by
+ * OS. Really we need to build that table at compile-time but don't do that
+ * yet.
+ *
+ * XXXRW: We currently embed English-language error strings here, but should
+ * support catalogues; these are only used if the OS doesn't have an error
+ * string using strerror(3).
+ */
+static const struct bsm_errno bsm_errnos[] = {
+ { BSM_ERRNO_ESUCCESS, 0, ES("Success") },
+ { BSM_ERRNO_EPERM, EPERM, ES("Operation not permitted") },
+ { BSM_ERRNO_ENOENT, ENOENT, ES("No such file or directory") },
+ { BSM_ERRNO_ESRCH, ESRCH, ES("No such process") },
+ { BSM_ERRNO_EINTR, EINTR, ES("Interrupted system call") },
+ { BSM_ERRNO_EIO, EIO, ES("Input/output error") },
+ { BSM_ERRNO_ENXIO, ENXIO, ES("Device not configured") },
+ { BSM_ERRNO_E2BIG, E2BIG, ES("Argument list too long") },
+ { BSM_ERRNO_ENOEXEC, ENOEXEC, ES("Exec format error") },
+ { BSM_ERRNO_EBADF, EBADF, ES("Bad file descriptor") },
+ { BSM_ERRNO_ECHILD, ECHILD, ES("No child processes") },
+ { BSM_ERRNO_EAGAIN, EAGAIN, ES("Resource temporarily unavailable") },
+ { BSM_ERRNO_ENOMEM, ENOMEM, ES("Cannot allocate memory") },
+ { BSM_ERRNO_EACCES, EACCES, ES("Permission denied") },
+ { BSM_ERRNO_EFAULT, EFAULT, ES("Bad address") },
+ { BSM_ERRNO_ENOTBLK, ENOTBLK, ES("Block device required") },
+ { BSM_ERRNO_EBUSY, EBUSY, ES("Device busy") },
+ { BSM_ERRNO_EEXIST, EEXIST, ES("File exists") },
+ { BSM_ERRNO_EXDEV, EXDEV, ES("Cross-device link") },
+ { BSM_ERRNO_ENODEV, ENODEV, ES("Operation not supported by device") },
+ { BSM_ERRNO_ENOTDIR, ENOTDIR, ES("Not a directory") },
+ { BSM_ERRNO_EISDIR, EISDIR, ES("Is a directory") },
+ { BSM_ERRNO_EINVAL, EINVAL, ES("Invalid argument") },
+ { BSM_ERRNO_ENFILE, ENFILE, ES("Too many open files in system") },
+ { BSM_ERRNO_EMFILE, EMFILE, ES("Too many open files") },
+ { BSM_ERRNO_ENOTTY, ENOTTY, ES("Inappropriate ioctl for device") },
+ { BSM_ERRNO_ETXTBSY, ETXTBSY, ES("Text file busy") },
+ { BSM_ERRNO_EFBIG, EFBIG, ES("File too large") },
+ { BSM_ERRNO_ENOSPC, ENOSPC, ES("No space left on device") },
+ { BSM_ERRNO_ESPIPE, ESPIPE, ES("Illegal seek") },
+ { BSM_ERRNO_EROFS, EROFS, ES("Read-only file system") },
+ { BSM_ERRNO_EMLINK, EMLINK, ES("Too many links") },
+ { BSM_ERRNO_EPIPE, EPIPE, ES("Broken pipe") },
+ { BSM_ERRNO_EDOM, EDOM, ES("Numerical argument out of domain") },
+ { BSM_ERRNO_ERANGE, ERANGE, ES("Result too large") },
+ { BSM_ERRNO_ENOMSG, ENOMSG, ES("No message of desired type") },
+ { BSM_ERRNO_EIDRM, EIDRM, ES("Identifier removed") },
+ { BSM_ERRNO_ECHRNG,
+#ifdef ECHRNG
+ ECHRNG,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Channel number out of range") },
+ { BSM_ERRNO_EL2NSYNC,
+#ifdef EL2NSYNC
+ EL2NSYNC,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Level 2 not synchronized") },
+ { BSM_ERRNO_EL3HLT,
+#ifdef EL3HLT
+ EL3HLT,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Level 3 halted") },
+ { BSM_ERRNO_EL3RST,
+#ifdef EL3RST
+ EL3RST,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Level 3 reset") },
+ { BSM_ERRNO_ELNRNG,
+#ifdef ELNRNG
+ ELNRNG,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Link number out of range") },
+ { BSM_ERRNO_EUNATCH,
+#ifdef EUNATCH
+ EUNATCH,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Protocol driver not attached") },
+ { BSM_ERRNO_ENOCSI,
+#ifdef ENOCSI
+ ENOCSI,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("No CSI structure available") },
+ { BSM_ERRNO_EL2HLT,
+#ifdef EL2HLT
+ EL2HLT,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Level 2 halted") },
+ { BSM_ERRNO_EDEADLK, EDEADLK, ES("Resource deadlock avoided") },
+ { BSM_ERRNO_ENOLCK, ENOLCK, ES("No locks available") },
+ { BSM_ERRNO_ECANCELED, ECANCELED, ES("Operation canceled") },
+ { BSM_ERRNO_ENOTSUP, ENOTSUP, ES("Operation not supported") },
+ { BSM_ERRNO_EDQUOT, EDQUOT, ES("Disc quota exceeded") },
+ { BSM_ERRNO_EBADE,
+#ifdef EBADE
+ EBADE,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Invalid exchange") },
+ { BSM_ERRNO_EBADR,
+#ifdef EBADR
+ EBADR,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Invalid request descriptor") },
+ { BSM_ERRNO_EXFULL,
+#ifdef EXFULL
+ EXFULL,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Exchange full") },
+ { BSM_ERRNO_ENOANO,
+#ifdef ENOANO
+ ENOANO,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("No anode") },
+ { BSM_ERRNO_EBADRQC,
+#ifdef EBADRQC
+ EBADRQC,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Invalid request descriptor") },
+ { BSM_ERRNO_EBADSLT,
+#ifdef EBADSLT
+ EBADSLT,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Invalid slot") },
+ { BSM_ERRNO_EDEADLOCK,
+#ifdef EDEADLOCK
+ EDEADLOCK,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Resource deadlock avoided") },
+ { BSM_ERRNO_EBFONT,
+#ifdef EBFONT
+ EBFONT,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Bad font file format") },
+ { BSM_ERRNO_EOWNERDEAD,
+#ifdef EOWNERDEAD
+ EOWNERDEAD,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Process died with the lock") },
+ { BSM_ERRNO_ENOTRECOVERABLE,
+#ifdef ENOTRECOVERABLE
+ ENOTRECOVERABLE,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Lock is not recoverable") },
+ { BSM_ERRNO_ENOSTR,
+#ifdef ENOSTR
+ ENOSTR,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Device not a stream") },
+ { BSM_ERRNO_ENONET,
+#ifdef ENONET
+ ENONET,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Machine is not on the network") },
+ { BSM_ERRNO_ENOPKG,
+#ifdef ENOPKG
+ ENOPKG,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Package not installed") },
+ { BSM_ERRNO_EREMOTE, EREMOTE,
+ ES("Too many levels of remote in path") },
+ { BSM_ERRNO_ENOLINK,
+#ifdef ENOLINK
+ ENOLINK,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Link has been severed") },
+ { BSM_ERRNO_EADV,
+#ifdef EADV
+ EADV,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Advertise error") },
+ { BSM_ERRNO_ESRMNT,
+#ifdef ESRMNT
+ ESRMNT,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("srmount error") },
+ { BSM_ERRNO_ECOMM,
+#ifdef ECOMM
+ ECOMM,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Communication error on send") },
+ { BSM_ERRNO_EPROTO,
+#ifdef EPROTO
+ EPROTO,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Protocol error") },
+ { BSM_ERRNO_ELOCKUNMAPPED,
+#ifdef ELOCKUNMAPPED
+ ELOCKUNMAPPED,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Locked lock was unmapped") },
+ { BSM_ERRNO_ENOTACTIVE,
+#ifdef ENOTACTIVE
+ ENOTACTIVE,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Facility is not active") },
+ { BSM_ERRNO_EMULTIHOP,
+#ifdef EMULTIHOP
+ EMULTIHOP,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Multihop attempted") },
+ { BSM_ERRNO_EBADMSG,
+#ifdef EBADMSG
+ EBADMSG,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Bad message") },
+ { BSM_ERRNO_ENAMETOOLONG, ENAMETOOLONG, ES("File name too long") },
+ { BSM_ERRNO_EOVERFLOW, EOVERFLOW,
+ ES("Value too large to be stored in data type") },
+ { BSM_ERRNO_ENOTUNIQ,
+#ifdef ENOTUNIQ
+ ENOTUNIQ,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Given log name not unique") },
+ { BSM_ERRNO_EBADFD,
+#ifdef EBADFD
+ EBADFD,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Given f.d. invalid for this operation") },
+ { BSM_ERRNO_EREMCHG,
+#ifdef EREMCHG
+ EREMCHG,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Remote address changed") },
+ { BSM_ERRNO_ELIBACC,
+#ifdef ELIBACC
+ ELIBACC,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Can't access a needed shared lib") },
+ { BSM_ERRNO_ELIBBAD,
+#ifdef ELIBBAD
+ ELIBBAD,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Accessing a corrupted shared lib") },
+ { BSM_ERRNO_ELIBSCN,
+#ifdef ELIBSCN
+ ELIBSCN,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES(".lib section in a.out corrupted") },
+ { BSM_ERRNO_ELIBMAX,
+#ifdef ELIBMAX
+ ELIBMAX,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Attempting to link in too many libs") },
+ { BSM_ERRNO_ELIBEXEC,
+#ifdef ELIBEXEC
+ ELIBEXEC,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Attempting to exec a shared library") },
+ { BSM_ERRNO_EILSEQ, EILSEQ, ES("Illegal byte sequence") },
+ { BSM_ERRNO_ENOSYS, ENOSYS, ES("Function not implemented") },
+ { BSM_ERRNO_ELOOP, ELOOP, ES("Too many levels of symbolic links") },
+ { BSM_ERRNO_ERESTART,
+#ifdef ERESTART
+ ERESTART,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Restart syscall") },
+ { BSM_ERRNO_ESTRPIPE,
+#ifdef ESTRPIPE
+ ESTRPIPE,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("If pipe/FIFO, don't sleep in stream head") },
+ { BSM_ERRNO_ENOTEMPTY, ENOTEMPTY, ES("Directory not empty") },
+ { BSM_ERRNO_EUSERS, EUSERS, ES("Too many users") },
+ { BSM_ERRNO_ENOTSOCK, ENOTSOCK,
+ ES("Socket operation on non-socket") },
+ { BSM_ERRNO_EDESTADDRREQ, EDESTADDRREQ,
+ ES("Destination address required") },
+ { BSM_ERRNO_EMSGSIZE, EMSGSIZE, ES("Message too long") },
+ { BSM_ERRNO_EPROTOTYPE, EPROTOTYPE,
+ ES("Protocol wrong type for socket") },
+ { BSM_ERRNO_ENOPROTOOPT, ENOPROTOOPT, ES("Protocol not available") },
+ { BSM_ERRNO_EPROTONOSUPPORT, EPROTONOSUPPORT,
+ ES("Protocol not supported") },
+ { BSM_ERRNO_ESOCKTNOSUPPORT, ESOCKTNOSUPPORT,
+ ES("Socket type not supported") },
+ { BSM_ERRNO_EOPNOTSUPP, EOPNOTSUPP, ES("Operation not supported") },
+ { BSM_ERRNO_EPFNOSUPPORT, EPFNOSUPPORT,
+ ES("Protocol family not supported") },
+ { BSM_ERRNO_EAFNOSUPPORT, EAFNOSUPPORT,
+ ES("Address family not supported by protocol family") },
+ { BSM_ERRNO_EADDRINUSE, EADDRINUSE, ES("Address already in use") },
+ { BSM_ERRNO_EADDRNOTAVAIL, EADDRNOTAVAIL,
+ ES("Can't assign requested address") },
+ { BSM_ERRNO_ENETDOWN, ENETDOWN, ES("Network is down") },
+ { BSM_ERRNO_ENETRESET, ENETRESET,
+ ES("Network dropped connection on reset") },
+ { BSM_ERRNO_ECONNABORTED, ECONNABORTED,
+ ES("Software caused connection abort") },
+ { BSM_ERRNO_ECONNRESET, ECONNRESET, ES("Connection reset by peer") },
+ { BSM_ERRNO_ENOBUFS, ENOBUFS, ES("No buffer space available") },
+ { BSM_ERRNO_EISCONN, EISCONN, ES("Socket is already connected") },
+ { BSM_ERRNO_ENOTCONN, ENOTCONN, ES("Socket is not connected") },
+ { BSM_ERRNO_ESHUTDOWN, ESHUTDOWN,
+ ES("Can't send after socket shutdown") },
+ { BSM_ERRNO_ETOOMANYREFS, ETOOMANYREFS,
+ ES("Too many references: can't splice") },
+ { BSM_ERRNO_ETIMEDOUT, ETIMEDOUT, ES("Operation timed out") },
+ { BSM_ERRNO_ECONNREFUSED, ECONNREFUSED, ES("Connection refused") },
+ { BSM_ERRNO_EHOSTDOWN, EHOSTDOWN, ES("Host is down") },
+ { BSM_ERRNO_EHOSTUNREACH, EHOSTUNREACH, ES("No route to host") },
+ { BSM_ERRNO_EALREADY, EALREADY, ES("Operation already in progress") },
+ { BSM_ERRNO_EINPROGRESS, EINPROGRESS,
+ ES("Operation now in progress") },
+ { BSM_ERRNO_ESTALE, ESTALE, ES("Stale NFS file handle") },
+ { BSM_ERRNO_EPROCLIM,
+#ifdef EPROCLIM
+ EPROCLIM,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Too many processes") },
+ { BSM_ERRNO_EBADRPC,
+#ifdef EBADRPC
+ EBADRPC,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("RPC struct is bad") },
+ { BSM_ERRNO_ERPCMISMATCH,
+#ifdef ERPCMISMATCH
+ ERPCMISMATCH,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("RPC version wrong") },
+ { BSM_ERRNO_EPROGUNAVAIL,
+#ifdef EPROGUNAVAIL
+ EPROGUNAVAIL,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("RPC prog. not avail") },
+ { BSM_ERRNO_EPROGMISMATCH,
+#ifdef EPROGMISMATCH
+ EPROGMISMATCH,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("RPC version wrong") },
+ { BSM_ERRNO_EPROCUNAVAIL,
+#ifdef EPROCUNAVAIL
+ EPROCUNAVAIL,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Bad procedure for program") },
+ { BSM_ERRNO_EFTYPE,
+#ifdef EFTYPE
+ EFTYPE,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Inappropriate file type or format") },
+ { BSM_ERRNO_EAUTH,
+#ifdef EAUTH
+ EAUTH,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Authenticateion error") },
+ { BSM_ERRNO_ENEEDAUTH,
+#ifdef ENEEDAUTH
+ ENEEDAUTH,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Need authenticator") },
+ { BSM_ERRNO_ENOATTR,
+#ifdef ENOATTR
+ ENOATTR,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Attribute not found") },
+ { BSM_ERRNO_EDOOFUS,
+#ifdef EDOOFUS
+ EDOOFUS,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Programming error") },
+ { BSM_ERRNO_EJUSTRETURN,
+#ifdef EJUSTRETURN
+ EJUSTRETURN,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Just return") },
+ { BSM_ERRNO_ENOIOCTL,
+#ifdef ENOIOCTL
+ ENOIOCTL,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("ioctl not handled by this layer") },
+ { BSM_ERRNO_EDIRIOCTL,
+#ifdef EDIRIOCTL
+ EDIRIOCTL,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("do direct ioctl in GEOM") },
+ { BSM_ERRNO_EPWROFF,
+#ifdef EPWROFF
+ EPWROFF,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Device power is off") },
+ { BSM_ERRNO_EDEVERR,
+#ifdef EDEVERR
+ EDEVERR,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Device error") },
+ { BSM_ERRNO_EBADEXEC,
+#ifdef EBADEXEC
+ EBADEXEC,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Bad executable") },
+ { BSM_ERRNO_EBADARCH,
+#ifdef EBADARCH
+ EBADARCH,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Bad CPU type in executable") },
+ { BSM_ERRNO_ESHLIBVERS,
+#ifdef ESHLIBVERS
+ ESHLIBVERS,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Shared library version mismatch") },
+ { BSM_ERRNO_EBADMACHO,
+#ifdef EBADMACHO
+ EBADMACHO,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Malformed Macho file") },
+ { BSM_ERRNO_EPOLICY,
+#ifdef EPOLICY
+ EPOLICY,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Operation failed by policy") },
+ { BSM_ERRNO_EDOTDOT,
+#ifdef EDOTDOT
+ EDOTDOT,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("RFS specific error") },
+ { BSM_ERRNO_EUCLEAN,
+#ifdef EUCLEAN
+ EUCLEAN,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Structure needs cleaning") },
+ { BSM_ERRNO_ENOTNAM,
+#ifdef ENOTNAM
+ ENOTNAM,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Not a XENIX named type file") },
+ { BSM_ERRNO_ENAVAIL,
+#ifdef ENAVAIL
+ ENAVAIL,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("No XENIX semaphores available") },
+ { BSM_ERRNO_EISNAM,
+#ifdef EISNAM
+ EISNAM,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Is a named type file") },
+ { BSM_ERRNO_EREMOTEIO,
+#ifdef EREMOTEIO
+ EREMOTEIO,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Remote I/O error") },
+ { BSM_ERRNO_ENOMEDIUM,
+#ifdef ENOMEDIUM
+ ENOMEDIUM,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("No medium found") },
+ { BSM_ERRNO_EMEDIUMTYPE,
+#ifdef EMEDIUMTYPE
+ EMEDIUMTYPE,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Wrong medium type") },
+ { BSM_ERRNO_ENOKEY,
+#ifdef ENOKEY
+ ENOKEY,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Required key not available") },
+ { BSM_ERRNO_EKEYEXPIRED,
+#ifdef EKEYEXPIRED
+ EKEYEXPIRED,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Key has expired") },
+ { BSM_ERRNO_EKEYREVOKED,
+#ifdef EKEYREVOKED
+ EKEYREVOKED,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Key has been revoked") },
+ { BSM_ERRNO_EKEYREJECTED,
+#ifdef EKEYREJECTED
+ EKEYREJECTED,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Key was rejected by service") },
+ { BSM_ERRNO_ENOTCAPABLE,
+#ifdef ENOTCAPABLE
+ ENOTCAPABLE,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Capabilities insufficient") },
+ { BSM_ERRNO_ECAPMODE,
+#ifdef ECAPMODE
+ ECAPMODE,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Not permitted in capability mode") },
+};
+static const int bsm_errnos_count = sizeof(bsm_errnos) / sizeof(bsm_errnos[0]);
+
+static const struct bsm_errno *
+bsm_lookup_errno_local(int local_errno)
+{
+ int i;
+
+ for (i = 0; i < bsm_errnos_count; i++) {
+ if (bsm_errnos[i].be_local_errno == local_errno)
+ return (&bsm_errnos[i]);
+ }
+ return (NULL);
+}
+
+/*
+ * Conversion to the BSM errno space isn't allowed to fail; we simply map to
+ * BSM_ERRNO_UNKNOWN and let the remote endpoint deal with it.
+ */
+u_char
+au_errno_to_bsm(int local_errno)
+{
+ const struct bsm_errno *bsme;
+
+ bsme = bsm_lookup_errno_local(local_errno);
+ if (bsme == NULL)
+ return (BSM_ERRNO_UNKNOWN);
+ return (bsme->be_bsm_errno);
+}
+
+static const struct bsm_errno *
+bsm_lookup_errno_bsm(u_char bsm_errno)
+{
+ int i;
+
+ for (i = 0; i < bsm_errnos_count; i++) {
+ if (bsm_errnos[i].be_bsm_errno == bsm_errno)
+ return (&bsm_errnos[i]);
+ }
+ return (NULL);
+}
+
+/*
+ * Converstion from a BSM error to a local error number may fail if either
+ * OpenBSM doesn't recognize the error on the wire, or because there is no
+ * appropriate local mapping.
+ */
+int
+au_bsm_to_errno(u_char bsm_errno, int *errorp)
+{
+ const struct bsm_errno *bsme;
+
+ bsme = bsm_lookup_errno_bsm(bsm_errno);
+ if (bsme == NULL || bsme->be_local_errno == ERRNO_NO_LOCAL_MAPPING)
+ return (-1);
+ *errorp = bsme->be_local_errno;
+ return (0);
+}
+
+#if !defined(KERNEL) && !defined(_KERNEL)
+const char *
+au_strerror(u_char bsm_errno)
+{
+ const struct bsm_errno *bsme;
+
+ bsme = bsm_lookup_errno_bsm(bsm_errno);
+ if (bsme == NULL)
+ return ("Unrecognized BSM error");
+ if (bsme->be_local_errno != ERRNO_NO_LOCAL_MAPPING)
+ return (strerror(bsme->be_local_errno));
+ return (bsme->be_strerror);
+}
+#endif
Property changes on: trunk/sys/security/audit/bsm_errno.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/security/audit/bsm_fcntl.c
===================================================================
--- trunk/sys/security/audit/bsm_fcntl.c (rev 0)
+++ trunk/sys/security/audit/bsm_fcntl.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -0,0 +1,291 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2008-2009 Apple Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/bsm_fcntl.c 293163 2016-01-04 16:51:56Z brueffer $");
+
+#include <sys/param.h>
+#include <sys/fcntl.h>
+
+#include <security/audit/audit.h>
+
+#include <bsm/audit_fcntl.h>
+#include <bsm/audit_record.h>
+
+struct bsm_fcntl_cmd {
+ u_short bfc_bsm_fcntl_cmd;
+ int bfc_local_fcntl_cmd;
+};
+typedef struct bsm_fcntl_cmd bsm_fcntl_cmd_t;
+
+static const bsm_fcntl_cmd_t bsm_fcntl_cmdtab[] = {
+ { BSM_F_DUPFD, F_DUPFD },
+ { BSM_F_GETFD, F_GETFD },
+ { BSM_F_SETFD, F_SETFD },
+ { BSM_F_GETFL, F_GETFL },
+ { BSM_F_SETFL, F_SETFL },
+#ifdef F_O_GETLK
+ { BSM_F_O_GETLK, F_O_GETLK },
+#endif
+ { BSM_F_SETLK, F_SETLK },
+ { BSM_F_SETLKW, F_SETLK },
+#ifdef F_CHFL
+ { BSM_F_CHKFL, F_CHKFL },
+#endif
+#ifdef F_DUP2FD
+ { BSM_F_DUP2FD, F_DUP2FD },
+#endif
+#ifdef F_ALLOCSP
+ { BSM_F_ALLOCSP, F_ALLOCSP },
+#endif
+#ifdef F_FREESP
+ { BSM_F_FREESP, F_FREESP },
+#endif
+#ifdef F_ISSTREAM
+ { BSM_F_ISSTREAM, F_ISSTREAM},
+#endif
+ { BSM_F_GETLK, F_GETLK },
+#ifdef F_PRIV
+ { BSM_F_PRIV, F_PRIV },
+#endif
+#ifdef F_NPRIV
+ { BSM_F_NPRIV, F_NPRIV },
+#endif
+#ifdef F_QUOTACTL
+ { BSM_F_QUOTACTL, F_QUOTACTL },
+#endif
+#ifdef F_BLOCKS
+ { BSM_F_BLOCKS, F_BLOCKS },
+#endif
+#ifdef F_BLKSIZE
+ { BSM_F_BLKSIZE, F_BLKSIZE },
+#endif
+ { BSM_F_GETOWN, F_GETOWN },
+ { BSM_F_SETOWN, F_SETOWN },
+#ifdef F_REVOKE
+ { BSM_F_REVOKE, F_REVOKE },
+#endif
+#ifdef F_HASREMOTEBLOCKS
+ { BSM_F_HASREMOTEBLOCKS,
+ F_HASREMOTEBLOCKS },
+#endif
+#ifdef F_FREESP
+ { BSM_F_FREESP, F_FREESP },
+#endif
+#ifdef F_ALLOCSP
+ { BSM_F_ALLOCSP, F_ALLOCSP },
+#endif
+#ifdef F_FREESP64
+ { BSM_F_FREESP64, F_FREESP64 },
+#endif
+#ifdef F_ALLOCSP64
+ { BSM_F_ALLOCSP64, F_ALLOCSP64 },
+#endif
+#ifdef F_GETLK64
+ { BSM_F_GETLK64, F_GETLK64 },
+#endif
+#ifdef F_SETLK64
+ { BSM_F_SETLK64, F_SETLK64 },
+#endif
+#ifdef F_SETLKW64
+ { BSM_F_SETLKW64, F_SETLKW64 },
+#endif
+#ifdef F_SHARE
+ { BSM_F_SHARE, F_SHARE },
+#endif
+#ifdef F_UNSHARE
+ { BSM_F_UNSHARE, F_UNSHARE },
+#endif
+#ifdef F_SETLK_NBMAND
+ { BSM_F_SETLK_NBMAND, F_SETLK_NBMAND },
+#endif
+#ifdef F_SHARE_NBMAND
+ { BSM_F_SHARE_NBMAND, F_SHARE_NBMAND },
+#endif
+#ifdef F_SETLK64_NBMAND
+ { BSM_F_SETLK64_NBMAND, F_SETLK64_NBMAND },
+#endif
+#ifdef F_GETXFL
+ { BSM_F_GETXFL, F_GETXFL },
+#endif
+#ifdef F_BADFD
+ { BSM_F_BADFD, F_BADFD },
+#endif
+#ifdef F_OGETLK
+ { BSM_F_OGETLK, F_OGETLK },
+#endif
+#ifdef F_OSETLK
+ { BSM_F_OSETLK, F_OSETLK },
+#endif
+#ifdef F_OSETLKW
+ { BSM_F_OSETLKW, F_OSETLKW },
+#endif
+#ifdef F_SETLK_REMOTE
+ { BSM_F_SETLK_REMOTE, F_SETLK_REMOTE },
+#endif
+
+#ifdef F_SETSIG
+ { BSM_F_SETSIG, F_SETSIG },
+#endif
+#ifdef F_GETSIG
+ { BSM_F_GETSIG, F_GETSIG },
+#endif
+
+#ifdef F_CHKCLEAN
+ { BSM_F_CHKCLEAN, F_CHKCLEAN },
+#endif
+#ifdef F_PREALLOCATE
+ { BSM_F_PREALLOCATE, F_PREALLOCATE },
+#endif
+#ifdef F_SETSIZE
+ { BSM_F_SETSIZE, F_SETSIZE },
+#endif
+#ifdef F_RDADVISE
+ { BSM_F_RDADVISE, F_RDADVISE },
+#endif
+#ifdef F_RDAHEAD
+ { BSM_F_RDAHEAD, F_RDAHEAD },
+#endif
+#ifdef F_READBOOTSTRAP
+ { BSM_F_READBOOTSTRAP, F_READBOOTSTRAP },
+#endif
+#ifdef F_WRITEBOOTSTRAP
+ { BSM_F_WRITEBOOTSTRAP, F_WRITEBOOTSTRAP },
+#endif
+#ifdef F_NOCACHE
+ { BSM_F_NOCACHE, F_NOCACHE },
+#endif
+#ifdef F_LOG2PHYS
+ { BSM_F_LOG2PHYS, F_LOG2PHYS },
+#endif
+#ifdef F_GETPATH
+ { BSM_F_GETPATH, F_GETPATH },
+#endif
+#ifdef F_FULLFSYNC
+ { BSM_F_FULLFSYNC, F_FULLFSYNC },
+#endif
+#ifdef F_PATHPKG_CHECK
+ { BSM_F_PATHPKG_CHECK, F_PATHPKG_CHECK },
+#endif
+#ifdef F_FREEZE_FS
+ { BSM_F_FREEZE_FS, F_FREEZE_FS },
+#endif
+#ifdef F_THAW_FS
+ { BSM_F_THAW_FS, F_THAW_FS },
+#endif
+#ifdef F_GLOBAL_NOCACHE
+ { BSM_F_GLOBAL_NOCACHE, F_GLOBAL_NOCACHE },
+#endif
+#ifdef F_OPENFROM
+ { BSM_F_OPENFROM, F_OPENFROM },
+#endif
+#ifdef F_UNLINKFROM
+ { BSM_F_UNLINKFROM, F_UNLINKFROM },
+#endif
+#ifdef F_CHECK_OPENEVT
+ { BSM_F_CHECK_OPENEVT, F_CHECK_OPENEVT },
+#endif
+#ifdef F_ADDSIGS
+ { BSM_F_ADDSIGS, F_ADDSIGS },
+#endif
+#ifdef F_MARKDEPENDENCY
+ { BSM_F_MARKDEPENDENCY, F_MARKDEPENDENCY },
+#endif
+
+#ifdef FCNTL_FS_SPECIFIC_BASE
+ { BSM_F_FS_SPECIFIC_0, FCNTL_FS_SPECIFIC_BASE},
+ { BSM_F_FS_SPECIFIC_1, FCNTL_FS_SPECIFIC_BASE + 1},
+ { BSM_F_FS_SPECIFIC_2, FCNTL_FS_SPECIFIC_BASE + 2},
+ { BSM_F_FS_SPECIFIC_3, FCNTL_FS_SPECIFIC_BASE + 3},
+ { BSM_F_FS_SPECIFIC_4, FCNTL_FS_SPECIFIC_BASE + 4},
+ { BSM_F_FS_SPECIFIC_5, FCNTL_FS_SPECIFIC_BASE + 5},
+ { BSM_F_FS_SPECIFIC_6, FCNTL_FS_SPECIFIC_BASE + 6},
+ { BSM_F_FS_SPECIFIC_7, FCNTL_FS_SPECIFIC_BASE + 7},
+ { BSM_F_FS_SPECIFIC_8, FCNTL_FS_SPECIFIC_BASE + 8},
+ { BSM_F_FS_SPECIFIC_9, FCNTL_FS_SPECIFIC_BASE + 9},
+ { BSM_F_FS_SPECIFIC_10, FCNTL_FS_SPECIFIC_BASE + 10},
+ { BSM_F_FS_SPECIFIC_11, FCNTL_FS_SPECIFIC_BASE + 11},
+ { BSM_F_FS_SPECIFIC_12, FCNTL_FS_SPECIFIC_BASE + 12},
+ { BSM_F_FS_SPECIFIC_13, FCNTL_FS_SPECIFIC_BASE + 13},
+ { BSM_F_FS_SPECIFIC_14, FCNTL_FS_SPECIFIC_BASE + 14},
+ { BSM_F_FS_SPECIFIC_15, FCNTL_FS_SPECIFIC_BASE + 15},
+#endif /* FCNTL_FS_SPECIFIC_BASE */
+};
+static const int bsm_fcntl_cmd_count = sizeof(bsm_fcntl_cmdtab) /
+ sizeof(bsm_fcntl_cmdtab[0]);
+
+static const bsm_fcntl_cmd_t *
+bsm_lookup_local_fcntl_cmd(int local_fcntl_cmd)
+{
+ int i;
+
+ for (i = 0; i < bsm_fcntl_cmd_count; i++) {
+ if (bsm_fcntl_cmdtab[i].bfc_local_fcntl_cmd ==
+ local_fcntl_cmd)
+ return (&bsm_fcntl_cmdtab[i]);
+ }
+ return (NULL);
+}
+
+u_short
+au_fcntl_cmd_to_bsm(int local_fcntl_cmd)
+{
+ const bsm_fcntl_cmd_t *bfcp;
+
+ bfcp = bsm_lookup_local_fcntl_cmd(local_fcntl_cmd);
+ if (bfcp == NULL)
+ return (BSM_F_UNKNOWN);
+ return (bfcp->bfc_bsm_fcntl_cmd);
+}
+
+static const bsm_fcntl_cmd_t *
+bsm_lookup_bsm_fcntl_cmd(u_short bsm_fcntl_cmd)
+{
+ int i;
+
+ for (i = 0; i < bsm_fcntl_cmd_count; i++) {
+ if (bsm_fcntl_cmdtab[i].bfc_bsm_fcntl_cmd ==
+ bsm_fcntl_cmd)
+ return (&bsm_fcntl_cmdtab[i]);
+ }
+ return (NULL);
+}
+
+int
+au_bsm_to_fcntl_cmd(u_short bsm_fcntl_cmd, int *local_fcntl_cmdp)
+{
+ const bsm_fcntl_cmd_t *bfcp;
+
+ bfcp = bsm_lookup_bsm_fcntl_cmd(bsm_fcntl_cmd);
+ if (bfcp == NULL || bfcp->bfc_local_fcntl_cmd)
+ return (-1);
+ *local_fcntl_cmdp = bfcp->bfc_local_fcntl_cmd;
+ return (0);
+}
Property changes on: trunk/sys/security/audit/bsm_fcntl.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/security/audit/bsm_socket_type.c
===================================================================
--- trunk/sys/security/audit/bsm_socket_type.c (rev 0)
+++ trunk/sys/security/audit/bsm_socket_type.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -0,0 +1,106 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2008 Apple Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/bsm_socket_type.c 293163 2016-01-04 16:51:56Z brueffer $");
+
+#include <sys/param.h>
+#include <sys/socket.h>
+
+#include <security/audit/audit.h>
+
+#include <bsm/audit_record.h>
+#include <bsm/audit_socket_type.h>
+
+struct bsm_socket_type {
+ u_short bst_bsm_socket_type;
+ int bst_local_socket_type;
+};
+
+#define ST_NO_LOCAL_MAPPING -600
+
+static const struct bsm_socket_type bsm_socket_types[] = {
+ { BSM_SOCK_DGRAM, SOCK_DGRAM },
+ { BSM_SOCK_STREAM, SOCK_STREAM },
+ { BSM_SOCK_RAW, SOCK_RAW },
+ { BSM_SOCK_RDM, SOCK_RDM },
+ { BSM_SOCK_SEQPACKET, SOCK_SEQPACKET },
+};
+static const int bsm_socket_types_count = sizeof(bsm_socket_types) /
+ sizeof(bsm_socket_types[0]);
+
+static const struct bsm_socket_type *
+bsm_lookup_local_socket_type(int local_socket_type)
+{
+ int i;
+
+ for (i = 0; i < bsm_socket_types_count; i++) {
+ if (bsm_socket_types[i].bst_local_socket_type ==
+ local_socket_type)
+ return (&bsm_socket_types[i]);
+ }
+ return (NULL);
+}
+
+u_short
+au_socket_type_to_bsm(int local_socket_type)
+{
+ const struct bsm_socket_type *bstp;
+
+ bstp = bsm_lookup_local_socket_type(local_socket_type);
+ if (bstp == NULL)
+ return (BSM_SOCK_UNKNOWN);
+ return (bstp->bst_bsm_socket_type);
+}
+
+static const struct bsm_socket_type *
+bsm_lookup_bsm_socket_type(u_short bsm_socket_type)
+{
+ int i;
+
+ for (i = 0; i < bsm_socket_types_count; i++) {
+ if (bsm_socket_types[i].bst_bsm_socket_type ==
+ bsm_socket_type)
+ return (&bsm_socket_types[i]);
+ }
+ return (NULL);
+}
+
+int
+au_bsm_to_socket_type(u_short bsm_socket_type, int *local_socket_typep)
+{
+ const struct bsm_socket_type *bstp;
+
+ bstp = bsm_lookup_bsm_socket_type(bsm_socket_type);
+ if (bstp == NULL || bstp->bst_local_socket_type)
+ return (-1);
+ *local_socket_typep = bstp->bst_local_socket_type;
+ return (0);
+}
Property changes on: trunk/sys/security/audit/bsm_socket_type.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/security/audit/bsm_token.c
===================================================================
--- trunk/sys/security/audit/bsm_token.c (rev 0)
+++ trunk/sys/security/audit/bsm_token.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -0,0 +1,1612 @@
+/* $MidnightBSD$ */
+/*-
+ * Copyright (c) 2004-2009 Apple Inc.
+ * Copyright (c) 2005 SPARTA, Inc.
+ * All rights reserved.
+ *
+ * This code was developed in part by Robert N. M. Watson, Senior Principal
+ * Scientist, SPARTA, Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD: stable/10/sys/security/audit/bsm_token.c 293163 2016-01-04 16:51:56Z brueffer $");
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/endian.h>
+#include <sys/queue.h>
+#include <sys/socket.h>
+#include <sys/time.h>
+
+#include <sys/ipc.h>
+#include <sys/libkern.h>
+#include <sys/malloc.h>
+#include <sys/un.h>
+
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/ip.h>
+
+
+#include <bsm/audit.h>
+#include <bsm/audit_internal.h>
+#include <bsm/audit_record.h>
+#include <security/audit/audit.h>
+#include <security/audit/audit_private.h>
+
+#define GET_TOKEN_AREA(t, dptr, length) do { \
+ t = malloc(sizeof(token_t), M_AUDITBSM, M_WAITOK); \
+ t->t_data = malloc(length, M_AUDITBSM, M_WAITOK | M_ZERO); \
+ t->len = length; \
+ dptr = t->t_data; \
+} while (0)
+
+/*
+ * token ID 1 byte
+ * success/failure 1 byte
+ * privstrlen 2 bytes
+ * privstr N bytes + 1 (\0 byte)
+ */
+token_t *
+au_to_upriv(char sorf, char *priv)
+{
+ u_int16_t textlen;
+ u_char *dptr;
+ token_t *t;
+
+ textlen = strlen(priv) + 1;
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_char) +
+ sizeof(u_int16_t) + textlen);
+
+ ADD_U_CHAR(dptr, AUT_UPRIV);
+ ADD_U_CHAR(dptr, sorf);
+ ADD_U_INT16(dptr, textlen);
+ ADD_STRING(dptr, priv, textlen);
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * privtstrlen 2 bytes
+ * privtstr N bytes + 1
+ * privstrlen 2 bytes
+ * privstr N bytes + 1
+ */
+token_t *
+au_to_privset(char *privtypestr, char *privstr)
+{
+ u_int16_t type_len, priv_len;
+ u_char *dptr;
+ token_t *t;
+
+ type_len = strlen(privtypestr) + 1;
+ priv_len = strlen(privstr) + 1;
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t) +
+ sizeof(u_int16_t) + type_len + priv_len);
+
+ ADD_U_CHAR(dptr, AUT_PRIV);
+ ADD_U_INT16(dptr, type_len);
+ ADD_STRING(dptr, privtypestr, type_len);
+ ADD_U_INT16(dptr, priv_len);
+ ADD_STRING(dptr, privstr, priv_len);
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * argument # 1 byte
+ * argument value 4 bytes/8 bytes (32-bit/64-bit value)
+ * text length 2 bytes
+ * text N bytes + 1 terminating NULL byte
+ */
+token_t *
+au_to_arg32(char n, const char *text, u_int32_t v)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int16_t textlen;
+
+ textlen = strlen(text);
+ textlen += 1;
+
+ GET_TOKEN_AREA(t, dptr, 2 * sizeof(u_char) + sizeof(u_int32_t) +
+ sizeof(u_int16_t) + textlen);
+
+ ADD_U_CHAR(dptr, AUT_ARG32);
+ ADD_U_CHAR(dptr, n);
+ ADD_U_INT32(dptr, v);
+ ADD_U_INT16(dptr, textlen);
+ ADD_STRING(dptr, text, textlen);
+
+ return (t);
+}
+
+token_t *
+au_to_arg64(char n, const char *text, u_int64_t v)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int16_t textlen;
+
+ textlen = strlen(text);
+ textlen += 1;
+
+ GET_TOKEN_AREA(t, dptr, 2 * sizeof(u_char) + sizeof(u_int64_t) +
+ sizeof(u_int16_t) + textlen);
+
+ ADD_U_CHAR(dptr, AUT_ARG64);
+ ADD_U_CHAR(dptr, n);
+ ADD_U_INT64(dptr, v);
+ ADD_U_INT16(dptr, textlen);
+ ADD_STRING(dptr, text, textlen);
+
+ return (t);
+}
+
+token_t *
+au_to_arg(char n, const char *text, u_int32_t v)
+{
+
+ return (au_to_arg32(n, text, v));
+}
+
+#if defined(_KERNEL) || defined(KERNEL)
+/*
+ * token ID 1 byte
+ * file access mode 4 bytes
+ * owner user ID 4 bytes
+ * owner group ID 4 bytes
+ * file system ID 4 bytes
+ * node ID 8 bytes
+ * device 4 bytes/8 bytes (32-bit/64-bit)
+ */
+token_t *
+au_to_attr32(struct vnode_au_info *vni)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int16_t pad0_16 = 0;
+ u_int32_t pad0_32 = 0;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 2 * sizeof(u_int16_t) +
+ 3 * sizeof(u_int32_t) + sizeof(u_int64_t) + sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_ATTR32);
+
+ /*
+ * BSD defines the size for the file mode as 2 bytes; BSM defines 4
+ * so pad with 0.
+ *
+ * XXXRW: Possibly should be conditionally compiled.
+ *
+ * XXXRW: Should any conversions take place on the mode?
+ */
+ ADD_U_INT16(dptr, pad0_16);
+ ADD_U_INT16(dptr, vni->vn_mode);
+
+ ADD_U_INT32(dptr, vni->vn_uid);
+ ADD_U_INT32(dptr, vni->vn_gid);
+ ADD_U_INT32(dptr, vni->vn_fsid);
+
+ /*
+ * Some systems use 32-bit file ID's, others use 64-bit file IDs.
+ * Attempt to handle both, and let the compiler sort it out. If we
+ * could pick this out at compile-time, it would be better, so as to
+ * avoid the else case below.
+ */
+ if (sizeof(vni->vn_fileid) == sizeof(uint32_t)) {
+ ADD_U_INT32(dptr, pad0_32);
+ ADD_U_INT32(dptr, vni->vn_fileid);
+ } else if (sizeof(vni->vn_fileid) == sizeof(uint64_t))
+ ADD_U_INT64(dptr, vni->vn_fileid);
+ else
+ ADD_U_INT64(dptr, 0LL);
+
+ ADD_U_INT32(dptr, vni->vn_dev);
+
+ return (t);
+}
+
+token_t *
+au_to_attr64(struct vnode_au_info *vni)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int16_t pad0_16 = 0;
+ u_int32_t pad0_32 = 0;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 2 * sizeof(u_int16_t) +
+ 3 * sizeof(u_int32_t) + sizeof(u_int64_t) * 2);
+
+ ADD_U_CHAR(dptr, AUT_ATTR64);
+
+ /*
+ * BSD defines the size for the file mode as 2 bytes; BSM defines 4
+ * so pad with 0.
+ *
+ * XXXRW: Possibly should be conditionally compiled.
+ *
+ * XXXRW: Should any conversions take place on the mode?
+ */
+ ADD_U_INT16(dptr, pad0_16);
+ ADD_U_INT16(dptr, vni->vn_mode);
+
+ ADD_U_INT32(dptr, vni->vn_uid);
+ ADD_U_INT32(dptr, vni->vn_gid);
+ ADD_U_INT32(dptr, vni->vn_fsid);
+
+ /*
+ * Some systems use 32-bit file ID's, other's use 64-bit file IDs.
+ * Attempt to handle both, and let the compiler sort it out. If we
+ * could pick this out at compile-time, it would be better, so as to
+ * avoid the else case below.
+ */
+ if (sizeof(vni->vn_fileid) == sizeof(uint32_t)) {
+ ADD_U_INT32(dptr, pad0_32);
+ ADD_U_INT32(dptr, vni->vn_fileid);
+ } else if (sizeof(vni->vn_fileid) == sizeof(uint64_t))
+ ADD_U_INT64(dptr, vni->vn_fileid);
+ else
+ ADD_U_INT64(dptr, 0LL);
+
+ ADD_U_INT64(dptr, vni->vn_dev);
+
+ return (t);
+}
+
+token_t *
+au_to_attr(struct vnode_au_info *vni)
+{
+
+ return (au_to_attr32(vni));
+}
+#endif /* !(defined(_KERNEL) || defined(KERNEL) */
+
+/*
+ * token ID 1 byte
+ * how to print 1 byte
+ * basic unit 1 byte
+ * unit count 1 byte
+ * data items (depends on basic unit)
+ */
+token_t *
+au_to_data(char unit_print, char unit_type, char unit_count, const char *p)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ size_t datasize, totdata;
+
+ /* Determine the size of the basic unit. */
+ switch (unit_type) {
+ case AUR_BYTE:
+ /* case AUR_CHAR: */
+ datasize = AUR_BYTE_SIZE;
+ break;
+
+ case AUR_SHORT:
+ datasize = AUR_SHORT_SIZE;
+ break;
+
+ case AUR_INT32:
+ /* case AUR_INT: */
+ datasize = AUR_INT32_SIZE;
+ break;
+
+ case AUR_INT64:
+ datasize = AUR_INT64_SIZE;
+ break;
+
+ default:
+ return (NULL);
+ }
+
+ totdata = datasize * unit_count;
+
+ GET_TOKEN_AREA(t, dptr, 4 * sizeof(u_char) + totdata);
+
+ /*
+ * XXXRW: We should be byte-swapping each data item for multi-byte
+ * types.
+ */
+ ADD_U_CHAR(dptr, AUT_DATA);
+ ADD_U_CHAR(dptr, unit_print);
+ ADD_U_CHAR(dptr, unit_type);
+ ADD_U_CHAR(dptr, unit_count);
+ ADD_MEM(dptr, p, totdata);
+
+ return (t);
+}
+
+
+/*
+ * token ID 1 byte
+ * status 4 bytes
+ * return value 4 bytes
+ */
+token_t *
+au_to_exit(int retval, int err)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 2 * sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_EXIT);
+ ADD_U_INT32(dptr, err);
+ ADD_U_INT32(dptr, retval);
+
+ return (t);
+}
+
+/*
+ */
+token_t *
+au_to_groups(int *groups)
+{
+
+ return (au_to_newgroups(AUDIT_MAX_GROUPS, (gid_t *)groups));
+}
+
+/*
+ * token ID 1 byte
+ * number groups 2 bytes
+ * group list count * 4 bytes
+ */
+token_t *
+au_to_newgroups(u_int16_t n, gid_t *groups)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ int i;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t) +
+ n * sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_NEWGROUPS);
+ ADD_U_INT16(dptr, n);
+ for (i = 0; i < n; i++)
+ ADD_U_INT32(dptr, groups[i]);
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * internet address 4 bytes
+ */
+token_t *
+au_to_in_addr(struct in_addr *internet_addr)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(uint32_t));
+
+ ADD_U_CHAR(dptr, AUT_IN_ADDR);
+ ADD_MEM(dptr, &internet_addr->s_addr, sizeof(uint32_t));
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * address type/length 4 bytes
+ * address 16 bytes
+ */
+token_t *
+au_to_in_addr_ex(struct in6_addr *internet_addr)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int32_t type = AU_IPv6;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 5 * sizeof(uint32_t));
+
+ ADD_U_CHAR(dptr, AUT_IN_ADDR_EX);
+ ADD_U_INT32(dptr, type);
+ ADD_MEM(dptr, internet_addr, 4 * sizeof(uint32_t));
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * ip header 20 bytes
+ *
+ * The IP header should be submitted in network byte order.
+ */
+token_t *
+au_to_ip(struct ip *ip)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(struct ip));
+
+ ADD_U_CHAR(dptr, AUT_IP);
+ ADD_MEM(dptr, ip, sizeof(struct ip));
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * object ID type 1 byte
+ * object ID 4 bytes
+ */
+token_t *
+au_to_ipc(char type, int id)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, 2 * sizeof(u_char) + sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_IPC);
+ ADD_U_CHAR(dptr, type);
+ ADD_U_INT32(dptr, id);
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * owner user ID 4 bytes
+ * owner group ID 4 bytes
+ * creator user ID 4 bytes
+ * creator group ID 4 bytes
+ * access mode 4 bytes
+ * slot sequence # 4 bytes
+ * key 4 bytes
+ */
+token_t *
+au_to_ipc_perm(struct ipc_perm *perm)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int16_t pad0 = 0;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 12 * sizeof(u_int16_t) +
+ sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_IPC_PERM);
+
+ /*
+ * Systems vary significantly in what types they use in struct
+ * ipc_perm; at least a few still use 16-bit uid's and gid's, so
+ * allow for that, as BSM define 32-bit values here.
+ * Some systems define the sizes for ipc_perm members as 2 bytes;
+ * BSM defines 4 so pad with 0.
+ *
+ * XXXRW: Possibly shoulid be conditionally compiled, and more cases
+ * need to be handled.
+ */
+ if (sizeof(perm->uid) != sizeof(u_int32_t)) {
+ ADD_U_INT16(dptr, pad0);
+ ADD_U_INT16(dptr, perm->uid);
+ ADD_U_INT16(dptr, pad0);
+ ADD_U_INT16(dptr, perm->gid);
+ ADD_U_INT16(dptr, pad0);
+ ADD_U_INT16(dptr, perm->cuid);
+ ADD_U_INT16(dptr, pad0);
+ ADD_U_INT16(dptr, perm->cgid);
+ } else {
+ ADD_U_INT32(dptr, perm->uid);
+ ADD_U_INT32(dptr, perm->gid);
+ ADD_U_INT32(dptr, perm->cuid);
+ ADD_U_INT32(dptr, perm->cgid);
+ }
+
+ ADD_U_INT16(dptr, pad0);
+ ADD_U_INT16(dptr, perm->mode);
+
+ ADD_U_INT16(dptr, pad0);
+
+ ADD_U_INT16(dptr, perm->seq);
+
+ ADD_U_INT32(dptr, perm->key);
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * port IP address 2 bytes
+ */
+token_t *
+au_to_iport(u_int16_t iport)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t));
+
+ ADD_U_CHAR(dptr, AUT_IPORT);
+ ADD_U_INT16(dptr, iport);
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * size 2 bytes
+ * data size bytes
+ */
+token_t *
+au_to_opaque(const char *data, u_int16_t bytes)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t) + bytes);
+
+ ADD_U_CHAR(dptr, AUT_OPAQUE);
+ ADD_U_INT16(dptr, bytes);
+ ADD_MEM(dptr, data, bytes);
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * seconds of time 4 bytes
+ * milliseconds of time 4 bytes
+ * file name len 2 bytes
+ * file pathname N bytes + 1 terminating NULL byte
+ */
+token_t *
+au_to_file(const char *file, struct timeval tm)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int16_t filelen;
+ u_int32_t timems;
+
+ filelen = strlen(file);
+ filelen += 1;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 2 * sizeof(u_int32_t) +
+ sizeof(u_int16_t) + filelen);
+
+ timems = tm.tv_usec/1000;
+
+ ADD_U_CHAR(dptr, AUT_OTHER_FILE32);
+ ADD_U_INT32(dptr, tm.tv_sec);
+ ADD_U_INT32(dptr, timems); /* We need time in ms. */
+ ADD_U_INT16(dptr, filelen);
+ ADD_STRING(dptr, file, filelen);
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * text length 2 bytes
+ * text N bytes + 1 terminating NULL byte
+ */
+token_t *
+au_to_text(const char *text)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int16_t textlen;
+
+ textlen = strlen(text);
+ textlen += 1;
+
+ /* XXXRW: Should validate length against token size limit. */
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t) + textlen);
+
+ ADD_U_CHAR(dptr, AUT_TEXT);
+ ADD_U_INT16(dptr, textlen);
+ ADD_STRING(dptr, text, textlen);
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * path length 2 bytes
+ * path N bytes + 1 terminating NULL byte
+ */
+token_t *
+au_to_path(const char *text)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int16_t textlen;
+
+ textlen = strlen(text);
+ textlen += 1;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t) + textlen);
+
+ ADD_U_CHAR(dptr, AUT_PATH);
+ ADD_U_INT16(dptr, textlen);
+ ADD_STRING(dptr, text, textlen);
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * audit ID 4 bytes
+ * effective user ID 4 bytes
+ * effective group ID 4 bytes
+ * real user ID 4 bytes
+ * real group ID 4 bytes
+ * process ID 4 bytes
+ * session ID 4 bytes
+ * terminal ID
+ * port ID 4 bytes/8 bytes (32-bit/64-bit value)
+ * machine address 4 bytes
+ */
+token_t *
+au_to_process32(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid,
+ pid_t pid, au_asid_t sid, au_tid_t *tid)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 9 * sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_PROCESS32);
+ ADD_U_INT32(dptr, auid);
+ ADD_U_INT32(dptr, euid);
+ ADD_U_INT32(dptr, egid);
+ ADD_U_INT32(dptr, ruid);
+ ADD_U_INT32(dptr, rgid);
+ ADD_U_INT32(dptr, pid);
+ ADD_U_INT32(dptr, sid);
+ ADD_U_INT32(dptr, tid->port);
+
+ /*
+ * Note: Solaris will write out IPv6 addresses here as a 32-bit
+ * address type and 16 bytes of address, but for IPv4 addresses it
+ * simply writes the 4-byte address directly. We support only IPv4
+ * addresses for process32 tokens.
+ */
+ ADD_MEM(dptr, &tid->machine, sizeof(u_int32_t));
+
+ return (t);
+}
+
+token_t *
+au_to_process64(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid,
+ pid_t pid, au_asid_t sid, au_tid_t *tid)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 8 * sizeof(u_int32_t) +
+ sizeof(u_int64_t));
+
+ ADD_U_CHAR(dptr, AUT_PROCESS64);
+ ADD_U_INT32(dptr, auid);
+ ADD_U_INT32(dptr, euid);
+ ADD_U_INT32(dptr, egid);
+ ADD_U_INT32(dptr, ruid);
+ ADD_U_INT32(dptr, rgid);
+ ADD_U_INT32(dptr, pid);
+ ADD_U_INT32(dptr, sid);
+ ADD_U_INT64(dptr, tid->port);
+
+ /*
+ * Note: Solaris will write out IPv6 addresses here as a 32-bit
+ * address type and 16 bytes of address, but for IPv4 addresses it
+ * simply writes the 4-byte address directly. We support only IPv4
+ * addresses for process64 tokens.
+ */
+ ADD_MEM(dptr, &tid->machine, sizeof(u_int32_t));
+
+ return (t);
+}
+
+token_t *
+au_to_process(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid,
+ pid_t pid, au_asid_t sid, au_tid_t *tid)
+{
+
+ return (au_to_process32(auid, euid, egid, ruid, rgid, pid, sid,
+ tid));
+}
+
+/*
+ * token ID 1 byte
+ * audit ID 4 bytes
+ * effective user ID 4 bytes
+ * effective group ID 4 bytes
+ * real user ID 4 bytes
+ * real group ID 4 bytes
+ * process ID 4 bytes
+ * session ID 4 bytes
+ * terminal ID
+ * port ID 4 bytes/8 bytes (32-bit/64-bit value)
+ * address type-len 4 bytes
+ * machine address 16 bytes
+ */
+token_t *
+au_to_process32_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid,
+ gid_t rgid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ KASSERT((tid->at_type == AU_IPv4) || (tid->at_type == AU_IPv6),
+ ("au_to_process32_ex: type %u", (unsigned int)tid->at_type));
+ if (tid->at_type == AU_IPv4)
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) +
+ 10 * sizeof(u_int32_t));
+ else
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) +
+ 13 * sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_PROCESS32_EX);
+ ADD_U_INT32(dptr, auid);
+ ADD_U_INT32(dptr, euid);
+ ADD_U_INT32(dptr, egid);
+ ADD_U_INT32(dptr, ruid);
+ ADD_U_INT32(dptr, rgid);
+ ADD_U_INT32(dptr, pid);
+ ADD_U_INT32(dptr, sid);
+ ADD_U_INT32(dptr, tid->at_port);
+ ADD_U_INT32(dptr, tid->at_type);
+ ADD_MEM(dptr, &tid->at_addr[0], sizeof(u_int32_t));
+ if (tid->at_type == AU_IPv6) {
+ ADD_MEM(dptr, &tid->at_addr[1], sizeof(u_int32_t));
+ ADD_MEM(dptr, &tid->at_addr[2], sizeof(u_int32_t));
+ ADD_MEM(dptr, &tid->at_addr[3], sizeof(u_int32_t));
+ }
+
+ return (t);
+}
+
+token_t *
+au_to_process64_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid,
+ gid_t rgid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ if (tid->at_type == AU_IPv4)
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) +
+ 7 * sizeof(u_int32_t) + sizeof(u_int64_t) +
+ 2 * sizeof(u_int32_t));
+ else if (tid->at_type == AU_IPv6)
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) +
+ 7 * sizeof(u_int32_t) + sizeof(u_int64_t) +
+ 5 * sizeof(u_int32_t));
+ else
+ panic("au_to_process64_ex: invalidate at_type (%d)",
+ tid->at_type);
+
+ ADD_U_CHAR(dptr, AUT_PROCESS64_EX);
+ ADD_U_INT32(dptr, auid);
+ ADD_U_INT32(dptr, euid);
+ ADD_U_INT32(dptr, egid);
+ ADD_U_INT32(dptr, ruid);
+ ADD_U_INT32(dptr, rgid);
+ ADD_U_INT32(dptr, pid);
+ ADD_U_INT32(dptr, sid);
+ ADD_U_INT64(dptr, tid->at_port);
+ ADD_U_INT32(dptr, tid->at_type);
+ ADD_MEM(dptr, &tid->at_addr[0], sizeof(u_int32_t));
+ if (tid->at_type == AU_IPv6) {
+ ADD_MEM(dptr, &tid->at_addr[1], sizeof(u_int32_t));
+ ADD_MEM(dptr, &tid->at_addr[2], sizeof(u_int32_t));
+ ADD_MEM(dptr, &tid->at_addr[3], sizeof(u_int32_t));
+ }
+
+ return (t);
+}
+
+token_t *
+au_to_process_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid,
+ gid_t rgid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid)
+{
+
+ return (au_to_process32_ex(auid, euid, egid, ruid, rgid, pid, sid,
+ tid));
+}
+
+token_t *
+au_to_rights(cap_rights_t *rightsp)
+{
+ token_t *t;
+ u_char *dptr;
+ int i;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(*rightsp));
+
+ ADD_U_CHAR(dptr, AUT_RIGHTS);
+ for (i = 0; i < nitems(rightsp->cr_rights); i++)
+ ADD_U_INT64(dptr, rightsp->cr_rights[i]);
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * error status 1 byte
+ * return value 4 bytes/8 bytes (32-bit/64-bit value)
+ */
+token_t *
+au_to_return32(char status, u_int32_t ret)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, 2 * sizeof(u_char) + sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_RETURN32);
+ ADD_U_CHAR(dptr, status);
+ ADD_U_INT32(dptr, ret);
+
+ return (t);
+}
+
+token_t *
+au_to_return64(char status, u_int64_t ret)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, 2 * sizeof(u_char) + sizeof(u_int64_t));
+
+ ADD_U_CHAR(dptr, AUT_RETURN64);
+ ADD_U_CHAR(dptr, status);
+ ADD_U_INT64(dptr, ret);
+
+ return (t);
+}
+
+token_t *
+au_to_return(char status, u_int32_t ret)
+{
+
+ return (au_to_return32(status, ret));
+}
+
+/*
+ * token ID 1 byte
+ * sequence number 4 bytes
+ */
+token_t *
+au_to_seq(long audit_count)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_SEQ);
+ ADD_U_INT32(dptr, audit_count);
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * socket domain 2 bytes
+ * socket type 2 bytes
+ * address type 2 byte
+ * local port 2 bytes
+ * local address 4 bytes/16 bytes (IPv4/IPv6 address)
+ * remote port 2 bytes
+ * remote address 4 bytes/16 bytes (IPv4/IPv6 address)
+ *
+ * Domain and type arguments to this routine are assumed to already have been
+ * converted to the BSM constant space, so we don't do that here.
+ */
+token_t *
+au_to_socket_ex(u_short so_domain, u_short so_type,
+ struct sockaddr *sa_local, struct sockaddr *sa_remote)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ struct sockaddr_in *sin;
+ struct sockaddr_in6 *sin6;
+
+ if (so_domain == AF_INET)
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) +
+ 5 * sizeof(u_int16_t) + 2 * sizeof(u_int32_t));
+ else if (so_domain == AF_INET6)
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) +
+ 5 * sizeof(u_int16_t) + 8 * sizeof(u_int32_t));
+ else
+ return (NULL);
+
+ ADD_U_CHAR(dptr, AUT_SOCKET_EX);
+ ADD_U_INT16(dptr, au_domain_to_bsm(so_domain));
+ ADD_U_INT16(dptr, au_socket_type_to_bsm(so_type));
+ if (so_domain == AF_INET) {
+ ADD_U_INT16(dptr, AU_IPv4);
+ sin = (struct sockaddr_in *)sa_local;
+ ADD_MEM(dptr, &sin->sin_port, sizeof(uint16_t));
+ ADD_MEM(dptr, &sin->sin_addr.s_addr, sizeof(uint32_t));
+ sin = (struct sockaddr_in *)sa_remote;
+ ADD_MEM(dptr, &sin->sin_port, sizeof(uint16_t));
+ ADD_MEM(dptr, &sin->sin_addr.s_addr, sizeof(uint32_t));
+ } else {
+ ADD_U_INT16(dptr, AU_IPv6);
+ sin6 = (struct sockaddr_in6 *)sa_local;
+ ADD_MEM(dptr, &sin6->sin6_port, sizeof(uint16_t));
+ ADD_MEM(dptr, &sin6->sin6_addr, 4 * sizeof(uint32_t));
+ sin6 = (struct sockaddr_in6 *)sa_remote;
+ ADD_MEM(dptr, &sin6->sin6_port, sizeof(uint16_t));
+ ADD_MEM(dptr, &sin6->sin6_addr, 4 * sizeof(uint32_t));
+ }
+
+ return (t);
+}
+
+/*
+ * Kernel-specific version of the above function.
+ *
+ * XXXRW: Should now use au_to_socket_ex() here.
+ */
+#ifdef _KERNEL
+token_t *
+kau_to_socket(struct socket_au_info *soi)
+{
+ token_t *t;
+ u_char *dptr;
+ u_int16_t so_type;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 2 * sizeof(u_int16_t) +
+ sizeof(u_int32_t) + sizeof(u_int16_t) + sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_SOCKET);
+ /* Coerce the socket type into a short value */
+ so_type = soi->so_type;
+ ADD_U_INT16(dptr, so_type);
+ ADD_U_INT16(dptr, soi->so_lport);
+ ADD_U_INT32(dptr, soi->so_laddr);
+ ADD_U_INT16(dptr, soi->so_rport);
+ ADD_U_INT32(dptr, soi->so_raddr);
+
+ return (t);
+}
+#endif
+
+/*
+ * token ID 1 byte
+ * socket family 2 bytes
+ * path (up to) 104 bytes + NULL (NULL terminated string)
+ */
+token_t *
+au_to_sock_unix(struct sockaddr_un *so)
+{
+ token_t *t;
+ u_char *dptr;
+
+ GET_TOKEN_AREA(t, dptr, 3 * sizeof(u_char) + strlen(so->sun_path) + 1);
+
+ ADD_U_CHAR(dptr, AUT_SOCKUNIX);
+ /* BSM token has two bytes for family */
+ ADD_U_CHAR(dptr, 0);
+ ADD_U_CHAR(dptr, so->sun_family);
+ ADD_STRING(dptr, so->sun_path, strlen(so->sun_path) + 1);
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * socket family 2 bytes
+ * local port 2 bytes
+ * socket address 4 bytes
+ */
+token_t *
+au_to_sock_inet32(struct sockaddr_in *so)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ uint16_t family;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 2 * sizeof(uint16_t) +
+ sizeof(uint32_t));
+
+ ADD_U_CHAR(dptr, AUT_SOCKINET32);
+ /*
+ * BSM defines the family field as 16 bits, but many operating
+ * systems have an 8-bit sin_family field. Extend to 16 bits before
+ * writing into the token. Assume that both the port and the address
+ * in the sockaddr_in are already in network byte order, but family
+ * is in local byte order.
+ *
+ * XXXRW: Should a name space conversion be taking place on the value
+ * of sin_family?
+ */
+ family = so->sin_family;
+ ADD_U_INT16(dptr, family);
+ ADD_MEM(dptr, &so->sin_port, sizeof(uint16_t));
+ ADD_MEM(dptr, &so->sin_addr.s_addr, sizeof(uint32_t));
+
+ return (t);
+}
+
+token_t *
+au_to_sock_inet128(struct sockaddr_in6 *so)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, 3 * sizeof(u_char) + sizeof(u_int16_t) +
+ 4 * sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_SOCKINET128);
+ /*
+ * In BSD, sin6_family is one octet, but BSM defines the token to
+ * store two. So we copy in a 0 first. XXXRW: Possibly should be
+ * conditionally compiled.
+ */
+ ADD_U_CHAR(dptr, 0);
+ ADD_U_CHAR(dptr, so->sin6_family);
+
+ ADD_U_INT16(dptr, so->sin6_port);
+ ADD_MEM(dptr, &so->sin6_addr, 4 * sizeof(uint32_t));
+
+ return (t);
+}
+
+token_t *
+au_to_sock_inet(struct sockaddr_in *so)
+{
+
+ return (au_to_sock_inet32(so));
+}
+
+/*
+ * token ID 1 byte
+ * audit ID 4 bytes
+ * effective user ID 4 bytes
+ * effective group ID 4 bytes
+ * real user ID 4 bytes
+ * real group ID 4 bytes
+ * process ID 4 bytes
+ * session ID 4 bytes
+ * terminal ID
+ * port ID 4 bytes/8 bytes (32-bit/64-bit value)
+ * machine address 4 bytes
+ */
+token_t *
+au_to_subject32(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid,
+ pid_t pid, au_asid_t sid, au_tid_t *tid)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 9 * sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_SUBJECT32);
+ ADD_U_INT32(dptr, auid);
+ ADD_U_INT32(dptr, euid);
+ ADD_U_INT32(dptr, egid);
+ ADD_U_INT32(dptr, ruid);
+ ADD_U_INT32(dptr, rgid);
+ ADD_U_INT32(dptr, pid);
+ ADD_U_INT32(dptr, sid);
+ ADD_U_INT32(dptr, tid->port);
+ ADD_MEM(dptr, &tid->machine, sizeof(u_int32_t));
+
+ return (t);
+}
+
+token_t *
+au_to_subject64(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid,
+ pid_t pid, au_asid_t sid, au_tid_t *tid)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 7 * sizeof(u_int32_t) +
+ sizeof(u_int64_t) + sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_SUBJECT64);
+ ADD_U_INT32(dptr, auid);
+ ADD_U_INT32(dptr, euid);
+ ADD_U_INT32(dptr, egid);
+ ADD_U_INT32(dptr, ruid);
+ ADD_U_INT32(dptr, rgid);
+ ADD_U_INT32(dptr, pid);
+ ADD_U_INT32(dptr, sid);
+ ADD_U_INT64(dptr, tid->port);
+ ADD_MEM(dptr, &tid->machine, sizeof(u_int32_t));
+
+ return (t);
+}
+
+token_t *
+au_to_subject(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid, gid_t rgid,
+ pid_t pid, au_asid_t sid, au_tid_t *tid)
+{
+
+ return (au_to_subject32(auid, euid, egid, ruid, rgid, pid, sid,
+ tid));
+}
+
+/*
+ * token ID 1 byte
+ * audit ID 4 bytes
+ * effective user ID 4 bytes
+ * effective group ID 4 bytes
+ * real user ID 4 bytes
+ * real group ID 4 bytes
+ * process ID 4 bytes
+ * session ID 4 bytes
+ * terminal ID
+ * port ID 4 bytes/8 bytes (32-bit/64-bit value)
+ * address type/length 4 bytes
+ * machine address 16 bytes
+ */
+token_t *
+au_to_subject32_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid,
+ gid_t rgid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ KASSERT((tid->at_type == AU_IPv4) || (tid->at_type == AU_IPv6),
+ ("au_to_subject32_ex: type %u", (unsigned int)tid->at_type));
+
+ if (tid->at_type == AU_IPv4)
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 10 *
+ sizeof(u_int32_t));
+ else
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + 13 *
+ sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_SUBJECT32_EX);
+ ADD_U_INT32(dptr, auid);
+ ADD_U_INT32(dptr, euid);
+ ADD_U_INT32(dptr, egid);
+ ADD_U_INT32(dptr, ruid);
+ ADD_U_INT32(dptr, rgid);
+ ADD_U_INT32(dptr, pid);
+ ADD_U_INT32(dptr, sid);
+ ADD_U_INT32(dptr, tid->at_port);
+ ADD_U_INT32(dptr, tid->at_type);
+ if (tid->at_type == AU_IPv6)
+ ADD_MEM(dptr, &tid->at_addr[0], 4 * sizeof(u_int32_t));
+ else
+ ADD_MEM(dptr, &tid->at_addr[0], sizeof(u_int32_t));
+
+ return (t);
+}
+
+token_t *
+au_to_subject64_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid,
+ gid_t rgid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+
+ KASSERT((tid->at_type == AU_IPv4) || (tid->at_type == AU_IPv6),
+ ("au_to_subject64_ex: type %u", (unsigned int)tid->at_type));
+
+ if (tid->at_type == AU_IPv4)
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) +
+ 7 * sizeof(u_int32_t) + sizeof(u_int64_t) +
+ 2 * sizeof(u_int32_t));
+ else
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) +
+ 7 * sizeof(u_int32_t) + sizeof(u_int64_t) +
+ 5 * sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_SUBJECT64_EX);
+ ADD_U_INT32(dptr, auid);
+ ADD_U_INT32(dptr, euid);
+ ADD_U_INT32(dptr, egid);
+ ADD_U_INT32(dptr, ruid);
+ ADD_U_INT32(dptr, rgid);
+ ADD_U_INT32(dptr, pid);
+ ADD_U_INT32(dptr, sid);
+ ADD_U_INT64(dptr, tid->at_port);
+ ADD_U_INT32(dptr, tid->at_type);
+ if (tid->at_type == AU_IPv6)
+ ADD_MEM(dptr, &tid->at_addr[0], 4 * sizeof(u_int32_t));
+ else
+ ADD_MEM(dptr, &tid->at_addr[0], sizeof(u_int32_t));
+
+ return (t);
+}
+
+token_t *
+au_to_subject_ex(au_id_t auid, uid_t euid, gid_t egid, uid_t ruid,
+ gid_t rgid, pid_t pid, au_asid_t sid, au_tid_addr_t *tid)
+{
+
+ return (au_to_subject32_ex(auid, euid, egid, ruid, rgid, pid, sid,
+ tid));
+}
+
+#if !defined(_KERNEL) && !defined(KERNEL) && defined(HAVE_AUDIT_SYSCALLS)
+/*
+ * Collects audit information for the current process and creates a subject
+ * token from it.
+ */
+token_t *
+au_to_me(void)
+{
+ auditinfo_t auinfo;
+ auditinfo_addr_t aia;
+
+ /*
+ * Try to use getaudit_addr(2) first. If this kernel does not support
+ * it, then fall back on to getaudit(2).
+ */
+ if (getaudit_addr(&aia, sizeof(aia)) != 0) {
+ if (errno == ENOSYS) {
+ if (getaudit(&auinfo) != 0)
+ return (NULL);
+ return (au_to_subject32(auinfo.ai_auid, geteuid(),
+ getegid(), getuid(), getgid(), getpid(),
+ auinfo.ai_asid, &auinfo.ai_termid));
+ } else {
+ /* getaudit_addr(2) failed for some other reason. */
+ return (NULL);
+ }
+ }
+
+ return (au_to_subject32_ex(aia.ai_auid, geteuid(), getegid(), getuid(),
+ getgid(), getpid(), aia.ai_asid, &aia.ai_termid));
+}
+#endif
+
+#if defined(_KERNEL) || defined(KERNEL)
+static token_t *
+au_to_exec_strings(char *strs, int count, u_char type)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int32_t totlen;
+ int ctr;
+ char *p;
+
+ totlen = 0;
+ ctr = count;
+ p = strs;
+ while (ctr-- > 0) {
+ totlen += strlen(p) + 1;
+ p = strs + totlen;
+ }
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int32_t) + totlen);
+ ADD_U_CHAR(dptr, type);
+ ADD_U_INT32(dptr, count);
+ ADD_STRING(dptr, strs, totlen);
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * count 4 bytes
+ * text count null-terminated strings
+ */
+token_t *
+au_to_exec_args(char *args, int argc)
+{
+
+ return (au_to_exec_strings(args, argc, AUT_EXEC_ARGS));
+}
+
+/*
+ * token ID 1 byte
+ * count 4 bytes
+ * text count null-terminated strings
+ */
+token_t *
+au_to_exec_env(char *envs, int envc)
+{
+
+ return (au_to_exec_strings(envs, envc, AUT_EXEC_ENV));
+}
+#else
+/*
+ * token ID 1 byte
+ * count 4 bytes
+ * text count null-terminated strings
+ */
+token_t *
+au_to_exec_args(char **argv)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ const char *nextarg;
+ int i, count = 0;
+ size_t totlen = 0;
+
+ nextarg = *argv;
+
+ while (nextarg != NULL) {
+ int nextlen;
+
+ nextlen = strlen(nextarg);
+ totlen += nextlen + 1;
+ count++;
+ nextarg = *(argv + count);
+ }
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int32_t) + totlen);
+
+ ADD_U_CHAR(dptr, AUT_EXEC_ARGS);
+ ADD_U_INT32(dptr, count);
+
+ for (i = 0; i < count; i++) {
+ nextarg = *(argv + i);
+ ADD_MEM(dptr, nextarg, strlen(nextarg) + 1);
+ }
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * count 4 bytes
+ * text count null-terminated strings
+ */
+token_t *
+au_to_exec_env(char **envp)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ int i, count = 0;
+ size_t totlen = 0;
+ const char *nextenv;
+
+ nextenv = *envp;
+
+ while (nextenv != NULL) {
+ int nextlen;
+
+ nextlen = strlen(nextenv);
+ totlen += nextlen + 1;
+ count++;
+ nextenv = *(envp + count);
+ }
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int32_t) + totlen);
+
+ ADD_U_CHAR(dptr, AUT_EXEC_ENV);
+ ADD_U_INT32(dptr, count);
+
+ for (i = 0; i < count; i++) {
+ nextenv = *(envp + i);
+ ADD_MEM(dptr, nextenv, strlen(nextenv) + 1);
+ }
+
+ return (t);
+}
+#endif
+
+/*
+ * token ID 1 byte
+ * zonename length 2 bytes
+ * zonename N bytes + 1 terminating NULL byte
+ */
+token_t *
+au_to_zonename(const char *zonename)
+{
+ u_char *dptr = NULL;
+ u_int16_t textlen;
+ token_t *t;
+
+ textlen = strlen(zonename) + 1;
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t) + textlen);
+
+ ADD_U_CHAR(dptr, AUT_ZONENAME);
+ ADD_U_INT16(dptr, textlen);
+ ADD_STRING(dptr, zonename, textlen);
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * record byte count 4 bytes
+ * version # 1 byte [2]
+ * event type 2 bytes
+ * event modifier 2 bytes
+ * seconds of time 4 bytes/8 bytes (32-bit/64-bit value)
+ * milliseconds of time 4 bytes/8 bytes (32-bit/64-bit value)
+ */
+token_t *
+au_to_header32_tm(int rec_size, au_event_t e_type, au_emod_t e_mod,
+ struct timeval tm)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int32_t timems;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int32_t) +
+ sizeof(u_char) + 2 * sizeof(u_int16_t) + 2 * sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_HEADER32);
+ ADD_U_INT32(dptr, rec_size);
+ ADD_U_CHAR(dptr, AUDIT_HEADER_VERSION_OPENBSM);
+ ADD_U_INT16(dptr, e_type);
+ ADD_U_INT16(dptr, e_mod);
+
+ timems = tm.tv_usec/1000;
+ /* Add the timestamp */
+ ADD_U_INT32(dptr, tm.tv_sec);
+ ADD_U_INT32(dptr, timems); /* We need time in ms. */
+
+ return (t);
+}
+
+/*
+ * token ID 1 byte
+ * record byte count 4 bytes
+ * version # 1 byte [2]
+ * event type 2 bytes
+ * event modifier 2 bytes
+ * address type/length 4 bytes
+ * machine address 4 bytes/16 bytes (IPv4/IPv6 address)
+ * seconds of time 4 bytes/8 bytes (32-bit/64-bit value)
+ * milliseconds of time 4 bytes/8 bytes (32-bit/64-bit value)
+ */
+token_t *
+au_to_header32_ex_tm(int rec_size, au_event_t e_type, au_emod_t e_mod,
+ struct timeval tm, struct auditinfo_addr *aia)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int32_t timems;
+ au_tid_addr_t *tid;
+
+ tid = &aia->ai_termid;
+ KASSERT(tid->at_type == AU_IPv4 || tid->at_type == AU_IPv6,
+ ("au_to_header32_ex_tm: invalid address family"));
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int32_t) +
+ sizeof(u_char) + 2 * sizeof(u_int16_t) + 3 *
+ sizeof(u_int32_t) + tid->at_type);
+
+ ADD_U_CHAR(dptr, AUT_HEADER32_EX);
+ ADD_U_INT32(dptr, rec_size);
+ ADD_U_CHAR(dptr, AUDIT_HEADER_VERSION_OPENBSM);
+ ADD_U_INT16(dptr, e_type);
+ ADD_U_INT16(dptr, e_mod);
+
+ ADD_U_INT32(dptr, tid->at_type);
+ if (tid->at_type == AU_IPv6)
+ ADD_MEM(dptr, &tid->at_addr[0], 4 * sizeof(u_int32_t));
+ else
+ ADD_MEM(dptr, &tid->at_addr[0], sizeof(u_int32_t));
+ timems = tm.tv_usec/1000;
+ /* Add the timestamp */
+ ADD_U_INT32(dptr, tm.tv_sec);
+ ADD_U_INT32(dptr, timems); /* We need time in ms. */
+
+ return (t);
+}
+
+token_t *
+au_to_header64_tm(int rec_size, au_event_t e_type, au_emod_t e_mod,
+ struct timeval tm)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int32_t timems;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int32_t) +
+ sizeof(u_char) + 2 * sizeof(u_int16_t) + 2 * sizeof(u_int64_t));
+
+ ADD_U_CHAR(dptr, AUT_HEADER64);
+ ADD_U_INT32(dptr, rec_size);
+ ADD_U_CHAR(dptr, AUDIT_HEADER_VERSION_OPENBSM);
+ ADD_U_INT16(dptr, e_type);
+ ADD_U_INT16(dptr, e_mod);
+
+ timems = tm.tv_usec/1000;
+ /* Add the timestamp */
+ ADD_U_INT64(dptr, tm.tv_sec);
+ ADD_U_INT64(dptr, timems); /* We need time in ms. */
+
+ return (t);
+}
+
+#if !defined(KERNEL) && !defined(_KERNEL)
+#ifdef HAVE_AUDIT_SYSCALLS
+token_t *
+au_to_header32_ex(int rec_size, au_event_t e_type, au_emod_t e_mod)
+{
+ struct timeval tm;
+ struct auditinfo_addr aia;
+
+ if (gettimeofday(&tm, NULL) == -1)
+ return (NULL);
+ if (audit_get_kaudit(&aia, sizeof(aia)) != 0) {
+ if (errno != ENOSYS)
+ return (NULL);
+ return (au_to_header32_tm(rec_size, e_type, e_mod, tm));
+ }
+ return (au_to_header32_ex_tm(rec_size, e_type, e_mod, tm, &aia));
+}
+#endif /* HAVE_AUDIT_SYSCALLS */
+
+token_t *
+au_to_header32(int rec_size, au_event_t e_type, au_emod_t e_mod)
+{
+ struct timeval tm;
+
+ if (gettimeofday(&tm, NULL) == -1)
+ return (NULL);
+ return (au_to_header32_tm(rec_size, e_type, e_mod, tm));
+}
+
+token_t *
+au_to_header64(__unused int rec_size, __unused au_event_t e_type,
+ __unused au_emod_t e_mod)
+{
+ struct timeval tm;
+
+ if (gettimeofday(&tm, NULL) == -1)
+ return (NULL);
+ return (au_to_header64_tm(rec_size, e_type, e_mod, tm));
+}
+
+token_t *
+au_to_header(int rec_size, au_event_t e_type, au_emod_t e_mod)
+{
+
+ return (au_to_header32(rec_size, e_type, e_mod));
+}
+
+#ifdef HAVE_AUDIT_SYSCALLS
+token_t *
+au_to_header_ex(int rec_size, au_event_t e_type, au_emod_t e_mod)
+{
+
+ return (au_to_header32_ex(rec_size, e_type, e_mod));
+}
+#endif /* HAVE_AUDIT_SYSCALLS */
+#endif /* !defined(KERNEL) && !defined(_KERNEL) */
+
+/*
+ * token ID 1 byte
+ * trailer magic number 2 bytes
+ * record byte count 4 bytes
+ */
+token_t *
+au_to_trailer(int rec_size)
+{
+ token_t *t;
+ u_char *dptr = NULL;
+ u_int16_t magic = AUT_TRAILER_MAGIC;
+
+ GET_TOKEN_AREA(t, dptr, sizeof(u_char) + sizeof(u_int16_t) +
+ sizeof(u_int32_t));
+
+ ADD_U_CHAR(dptr, AUT_TRAILER);
+ ADD_U_INT16(dptr, magic);
+ ADD_U_INT32(dptr, rec_size);
+
+ return (t);
+}
Property changes on: trunk/sys/security/audit/bsm_token.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Modified: trunk/sys/security/mac/mac_atalk.c
===================================================================
--- trunk/sys/security/mac/mac_atalk.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_atalk.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2007-2009 Robert N. M. Watson
* All rights reserved.
@@ -30,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_atalk.c 193391 2009-06-03 18:46:28Z rwatson $");
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_audit.c
===================================================================
--- trunk/sys/security/mac/mac_audit.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_audit.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2009 Robert N. M. Watson
* Copyright (c) 2001 Ilmar S. Habibulin
@@ -41,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_audit.c 191731 2009-05-01 21:05:40Z rwatson $");
#include "opt_kdtrace.h"
Modified: trunk/sys/security/mac/mac_cred.c
===================================================================
--- trunk/sys/security/mac/mac_cred.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_cred.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2008-2009 Robert N. M. Watson
* Copyright (c) 2001 Ilmar S. Habibulin
@@ -44,7 +45,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_cred.c 191731 2009-05-01 21:05:40Z rwatson $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_framework.c
===================================================================
--- trunk/sys/security/mac/mac_framework.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_framework.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2006, 2009 Robert N. M. Watson
* Copyright (c) 2001 Ilmar S. Habibulin
@@ -70,7 +71,7 @@
#include "opt_mac.h"
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_framework.c 302237 2016-06-27 22:10:07Z bdrewery $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -94,12 +95,12 @@
SDT_PROVIDER_DEFINE(mac);
SDT_PROVIDER_DEFINE(mac_framework);
-SDT_PROBE_DEFINE2(mac, kernel, policy, modevent, modevent, "int",
- "struct mac_policy_conf *mpc");
-SDT_PROBE_DEFINE1(mac, kernel, policy, register, register,
+SDT_PROBE_DEFINE2(mac, , policy, modevent, "int",
"struct mac_policy_conf *");
-SDT_PROBE_DEFINE1(mac, kernel, policy, unregister, unregister,
+SDT_PROBE_DEFINE1(mac, , policy, register,
"struct mac_policy_conf *");
+SDT_PROBE_DEFINE1(mac, , policy, unregister,
+ "struct mac_policy_conf *");
/*
* Root sysctl node for all MAC and MAC policy controls.
@@ -292,7 +293,8 @@
mac_labelzone_init();
#ifndef MAC_STATIC
- rm_init_flags(&mac_policy_rm, "mac_policy_rm", RM_NOWITNESS);
+ rm_init_flags(&mac_policy_rm, "mac_policy_rm", RM_NOWITNESS |
+ RM_RECURSE);
sx_init_flags(&mac_policy_sx, "mac_policy_sx", SX_NOWITNESS);
#endif
}
@@ -444,7 +446,7 @@
(*(mpc->mpc_ops->mpo_init))(mpc);
mac_policy_update();
- SDT_PROBE(mac, kernel, policy, register, mpc, 0, 0, 0, 0);
+ SDT_PROBE1(mac, , policy, register, mpc);
printf("Security policy loaded: %s (%s)\n", mpc->mpc_fullname,
mpc->mpc_name);
@@ -491,7 +493,7 @@
mac_policy_update();
mac_policy_xunlock();
- SDT_PROBE(mac, kernel, policy, unregister, mpc, 0, 0, 0, 0);
+ SDT_PROBE1(mac, , policy, unregister, mpc);
printf("Security policy unload: %s (%s)\n", mpc->mpc_fullname,
mpc->mpc_name);
@@ -517,7 +519,7 @@
}
#endif
- SDT_PROBE(mac, kernel, policy, modevent, type, mpc, 0, 0, 0);
+ SDT_PROBE2(mac, , policy, modevent, type, mpc);
switch (type) {
case MOD_LOAD:
if (mpc->mpc_loadtime_flags & MPC_LOADTIME_FLAG_NOTLATE &&
@@ -586,8 +588,7 @@
mac_check_structmac_consistent(struct mac *mac)
{
- if (mac->m_buflen < 0 ||
- mac->m_buflen > MAC_MAX_LABEL_BUF_LEN)
+ if (mac->m_buflen > MAC_MAX_LABEL_BUF_LEN)
return (EINVAL);
return (0);
Modified: trunk/sys/security/mac/mac_framework.h
===================================================================
--- trunk/sys/security/mac/mac_framework.h 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_framework.h 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007-2011 Robert N. M. Watson
* Copyright (c) 2001-2005 Networks Associates Technology, Inc.
@@ -38,7 +39,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac/mac_framework.h 254603 2013-08-21 17:45:00Z kib $
*/
/*
@@ -243,6 +244,8 @@
int prot, int flags);
int mac_posixshm_check_open(struct ucred *cred, struct shmfd *shmfd,
accmode_t accmode);
+int mac_posixshm_check_read(struct ucred *active_cred,
+ struct ucred *file_cred, struct shmfd *shmfd);
int mac_posixshm_check_setmode(struct ucred *cred, struct shmfd *shmfd,
mode_t mode);
int mac_posixshm_check_setowner(struct ucred *cred, struct shmfd *shmfd,
@@ -252,6 +255,8 @@
int mac_posixshm_check_truncate(struct ucred *active_cred,
struct ucred *file_cred, struct shmfd *shmfd);
int mac_posixshm_check_unlink(struct ucred *cred, struct shmfd *shmfd);
+int mac_posixshm_check_write(struct ucred *active_cred,
+ struct ucred *file_cred, struct shmfd *shmfd);
void mac_posixshm_create(struct ucred *cred, struct shmfd *shmfd);
void mac_posixshm_destroy(struct shmfd *);
void mac_posixshm_init(struct shmfd *);
Modified: trunk/sys/security/mac/mac_inet.c
===================================================================
--- trunk/sys/security/mac/mac_inet.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_inet.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007, 2009 Robert N. M. Watson
* Copyright (c) 2001 Ilmar S. Habibulin
@@ -43,7 +44,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_inet.c 193391 2009-06-03 18:46:28Z rwatson $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_inet6.c
===================================================================
--- trunk/sys/security/mac/mac_inet6.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_inet6.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2007-2009 Robert N. M. Watson
* All rights reserved.
@@ -30,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_inet6.c 193391 2009-06-03 18:46:28Z rwatson $");
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_internal.h
===================================================================
--- trunk/sys/security/mac/mac_internal.h 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_internal.h 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2006, 2009 Robert N. M. Watson
* Copyright (c) 2001 Ilmar S. Habibulin
@@ -45,7 +46,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac/mac_internal.h 302237 2016-06-27 22:10:07Z bdrewery $
*/
#ifndef _SECURITY_MAC_MAC_INTERNAL_H_
@@ -74,35 +75,35 @@
SDT_PROVIDER_DECLARE(mac_framework); /* Entry points to MAC. */
#define MAC_CHECK_PROBE_DEFINE4(name, arg0, arg1, arg2, arg3) \
- SDT_PROBE_DEFINE5(mac_framework, kernel, name, mac_check_err, \
- mac-check-ok, "int", arg0, arg1, arg2, arg3); \
- SDT_PROBE_DEFINE5(mac_framework, kernel, name, mac_check_ok, \
- mac-check-ok, "int", arg0, arg1, arg2, arg3);
+ SDT_PROBE_DEFINE5(mac_framework, , name, mac__check__err, \
+ "int", arg0, arg1, arg2, arg3); \
+ SDT_PROBE_DEFINE5(mac_framework, , name, mac__check__ok, \
+ "int", arg0, arg1, arg2, arg3);
#define MAC_CHECK_PROBE_DEFINE3(name, arg0, arg1, arg2) \
- SDT_PROBE_DEFINE4(mac_framework, kernel, name, mac_check_err, \
- mac-check-err, "int", arg0, arg1, arg2); \
- SDT_PROBE_DEFINE4(mac_framework, kernel, name, mac_check_ok, \
- mac-check-ok, "int", arg0, arg1, arg2);
+ SDT_PROBE_DEFINE4(mac_framework, , name, mac__check__err, \
+ "int", arg0, arg1, arg2); \
+ SDT_PROBE_DEFINE4(mac_framework, , name, mac__check__ok, \
+ "int", arg0, arg1, arg2);
#define MAC_CHECK_PROBE_DEFINE2(name, arg0, arg1) \
- SDT_PROBE_DEFINE3(mac_framework, kernel, name, mac_check_err, \
- mac-check-err, "int", arg0, arg1); \
- SDT_PROBE_DEFINE3(mac_framework, kernel, name, mac_check_ok, \
- mac-check-ok, "int", arg0, arg1);
+ SDT_PROBE_DEFINE3(mac_framework, , name, mac__check__err, \
+ "int", arg0, arg1); \
+ SDT_PROBE_DEFINE3(mac_framework, , name, mac__check__ok, \
+ "int", arg0, arg1);
#define MAC_CHECK_PROBE_DEFINE1(name, arg0) \
- SDT_PROBE_DEFINE2(mac_framework, kernel, name, mac_check_err, \
- mac-check-err, "int", arg0); \
- SDT_PROBE_DEFINE2(mac_framework, kernel, name, mac_check_ok, \
- mac-check-ok, "int", arg0);
+ SDT_PROBE_DEFINE2(mac_framework, , name, mac__check__err, \
+ "int", arg0); \
+ SDT_PROBE_DEFINE2(mac_framework, , name, mac__check__ok, \
+ "int", arg0);
#define MAC_CHECK_PROBE4(name, error, arg0, arg1, arg2, arg3) do { \
if (error) { \
- SDT_PROBE(mac_framework, kernel, name, mac_check_err, \
+ SDT_PROBE5(mac_framework, , name, mac__check__err, \
error, arg0, arg1, arg2, arg3); \
} else { \
- SDT_PROBE(mac_framework, kernel, name, mac_check_ok, \
+ SDT_PROBE5(mac_framework, , name, mac__check__ok, \
0, arg0, arg1, arg2, arg3); \
} \
} while (0)
@@ -116,18 +117,18 @@
#endif
#define MAC_GRANT_PROBE_DEFINE2(name, arg0, arg1) \
- SDT_PROBE_DEFINE3(mac_framework, kernel, name, mac_grant_err, \
- mac-grant-err, "int", arg0, arg1); \
- SDT_PROBE_DEFINE3(mac_framework, kernel, name, mac_grant_ok, \
- mac-grant-ok, "INT", arg0, arg1);
+ SDT_PROBE_DEFINE3(mac_framework, , name, mac__grant__err, \
+ "int", arg0, arg1); \
+ SDT_PROBE_DEFINE3(mac_framework, , name, mac__grant__ok, \
+ "int", arg0, arg1);
#define MAC_GRANT_PROBE2(name, error, arg0, arg1) do { \
if (error) { \
- SDT_PROBE(mac_framework, kernel, name, mac_grant_err, \
- error, arg0, arg1, 0, 0); \
+ SDT_PROBE3(mac_framework, , name, mac__grant__err, \
+ error, arg0, arg1); \
} else { \
- SDT_PROBE(mac_framework, kernel, name, mac_grant_ok, \
- error, arg0, arg1, 0, 0); \
+ SDT_PROBE3(mac_framework, , name, mac__grant__ok, \
+ error, arg0, arg1); \
} \
} while (0)
Modified: trunk/sys/security/mac/mac_label.c
===================================================================
--- trunk/sys/security/mac/mac_label.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_label.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2003-2004 Networks Associates Technology, Inc.
* Copyright (c) 2007 Robert N. M. Watson
@@ -31,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_label.c 166533 2007-02-06 14:19:25Z rwatson $");
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_net.c
===================================================================
--- trunk/sys/security/mac/mac_net.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_net.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2009 Robert N. M. Watson
* Copyright (c) 2001 Ilmar S. Habibulin
@@ -43,7 +44,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_net.c 233937 2012-04-06 06:53:58Z melifaro $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_pipe.c
===================================================================
--- trunk/sys/security/mac/mac_pipe.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_pipe.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2002-2003 Networks Associates Technology, Inc.
* Copyright (c) 2006 SPARTA, Inc.
@@ -38,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_pipe.c 191731 2009-05-01 21:05:40Z rwatson $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_policy.h
===================================================================
--- trunk/sys/security/mac/mac_policy.h 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_policy.h 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007-2011 Robert N. M. Watson
* Copyright (c) 2001-2005 Networks Associates Technology, Inc.
@@ -39,7 +40,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac/mac_policy.h 254603 2013-08-21 17:45:00Z kib $
*/
/*
* Kernel interface for MAC policy modules.
@@ -363,6 +364,9 @@
typedef int (*mpo_posixshm_check_open_t)(struct ucred *cred,
struct shmfd *shmfd, struct label *shmlabel,
accmode_t accmode);
+typedef int (*mpo_posixshm_check_read_t)(struct ucred *active_cred,
+ struct ucred *file_cred, struct shmfd *shmfd,
+ struct label *shmlabel);
typedef int (*mpo_posixshm_check_setmode_t)(struct ucred *cred,
struct shmfd *shmfd, struct label *shmlabel,
mode_t mode);
@@ -377,6 +381,9 @@
struct label *shmlabel);
typedef int (*mpo_posixshm_check_unlink_t)(struct ucred *cred,
struct shmfd *shmfd, struct label *shmlabel);
+typedef int (*mpo_posixshm_check_write_t)(struct ucred *active_cred,
+ struct ucred *file_cred, struct shmfd *shmfd,
+ struct label *shmlabel);
typedef void (*mpo_posixshm_create_t)(struct ucred *cred,
struct shmfd *shmfd, struct label *shmlabel);
typedef void (*mpo_posixshm_destroy_label_t)(struct label *label);
@@ -818,11 +825,13 @@
mpo_posixshm_check_create_t mpo_posixshm_check_create;
mpo_posixshm_check_mmap_t mpo_posixshm_check_mmap;
mpo_posixshm_check_open_t mpo_posixshm_check_open;
+ mpo_posixshm_check_read_t mpo_posixshm_check_read;
mpo_posixshm_check_setmode_t mpo_posixshm_check_setmode;
mpo_posixshm_check_setowner_t mpo_posixshm_check_setowner;
mpo_posixshm_check_stat_t mpo_posixshm_check_stat;
mpo_posixshm_check_truncate_t mpo_posixshm_check_truncate;
mpo_posixshm_check_unlink_t mpo_posixshm_check_unlink;
+ mpo_posixshm_check_write_t mpo_posixshm_check_write;
mpo_posixshm_create_t mpo_posixshm_create;
mpo_posixshm_destroy_label_t mpo_posixshm_destroy_label;
mpo_posixshm_init_label_t mpo_posixshm_init_label;
Modified: trunk/sys/security/mac/mac_posix_sem.c
===================================================================
--- trunk/sys/security/mac/mac_posix_sem.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_posix_sem.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2003-2006 SPARTA, Inc.
* Copyright (c) 2009 Robert N. M. Watson
@@ -37,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_posix_sem.c 224914 2011-08-16 20:07:47Z kib $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_posix_shm.c
===================================================================
--- trunk/sys/security/mac/mac_posix_shm.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_posix_shm.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2003-2006 SPARTA, Inc.
* Copyright (c) 2009-2011 Robert N. M. Watson
@@ -37,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_posix_shm.c 255971 2013-10-01 15:40:27Z markj $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
@@ -133,7 +134,7 @@
}
MAC_CHECK_PROBE_DEFINE3(posixshm_check_open, "struct ucred *",
- "struct shmfd *", "accmode_t accmode");
+ "struct shmfd *", "accmode_t");
int
mac_posixshm_check_open(struct ucred *cred, struct shmfd *shmfd,
@@ -228,3 +229,37 @@
return (error);
}
+
+MAC_CHECK_PROBE_DEFINE3(posixshm_check_read, "struct ucred *",
+ "struct ucred *", "struct shmfd *");
+
+int
+mac_posixshm_check_read(struct ucred *active_cred, struct ucred *file_cred,
+ struct shmfd *shmfd)
+{
+ int error;
+
+ MAC_POLICY_CHECK_NOSLEEP(posixshm_check_read, active_cred,
+ file_cred, shmfd, shmfd->shm_label);
+ MAC_CHECK_PROBE3(posixshm_check_read, error, active_cred,
+ file_cred, shmfd);
+
+ return (error);
+}
+
+MAC_CHECK_PROBE_DEFINE3(posixshm_check_write, "struct ucred *",
+ "struct ucred *", "struct shmfd *");
+
+int
+mac_posixshm_check_write(struct ucred *active_cred, struct ucred *file_cred,
+ struct shmfd *shmfd)
+{
+ int error;
+
+ MAC_POLICY_CHECK_NOSLEEP(posixshm_check_write, active_cred,
+ file_cred, shmfd, shmfd->shm_label);
+ MAC_CHECK_PROBE3(posixshm_check_write, error, active_cred,
+ file_cred, shmfd);
+
+ return (error);
+}
Modified: trunk/sys/security/mac/mac_priv.c
===================================================================
--- trunk/sys/security/mac/mac_priv.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_priv.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2006 nCircle Network Security, Inc.
* Copyright (c) 2009 Robert N. M. Watson
@@ -36,7 +37,7 @@
*/
#include "sys/cdefs.h"
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_priv.c 228448 2011-12-12 23:29:32Z attilio $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_process.c
===================================================================
--- trunk/sys/security/mac/mac_process.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_process.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2008-2009 Robert N. M. Watson
* Copyright (c) 2001 Ilmar S. Habibulin
@@ -43,7 +44,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_process.c 251391 2013-06-04 17:23:09Z alc $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
@@ -54,9 +55,9 @@
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/malloc.h>
-#include <sys/mutex.h>
#include <sys/mac.h>
#include <sys/proc.h>
+#include <sys/rwlock.h>
#include <sys/sbuf.h>
#include <sys/sdt.h>
#include <sys/systm.h>
@@ -254,7 +255,7 @@
struct vm_map *map)
{
vm_map_entry_t vme;
- int vfslocked, result;
+ int result;
vm_prot_t revokeperms;
vm_object_t backing_object, object;
vm_ooffset_t offset;
@@ -284,14 +285,14 @@
object = vme->object.vm_object;
if (object == NULL)
continue;
- VM_OBJECT_LOCK(object);
+ VM_OBJECT_RLOCK(object);
while ((backing_object = object->backing_object) != NULL) {
- VM_OBJECT_LOCK(backing_object);
+ VM_OBJECT_RLOCK(backing_object);
offset += object->backing_object_offset;
- VM_OBJECT_UNLOCK(object);
+ VM_OBJECT_RUNLOCK(object);
object = backing_object;
}
- VM_OBJECT_UNLOCK(object);
+ VM_OBJECT_RUNLOCK(object);
/*
* At the moment, vm_maps and objects aren't considered by
* the MAC system, so only things with backing by a normal
@@ -300,7 +301,6 @@
if (object->type != OBJT_VNODE)
continue;
vp = (struct vnode *)object->handle;
- vfslocked = VFS_LOCK_GIANT(vp->v_mount);
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
result = vme->max_protection;
mac_vnode_check_mmap_downgrade(cred, vp, &result);
@@ -310,10 +310,8 @@
* but a policy needs to get removed.
*/
revokeperms = vme->max_protection & ~result;
- if (!revokeperms) {
- VFS_UNLOCK_GIANT(vfslocked);
+ if (!revokeperms)
continue;
- }
printf("pid %ld: revoking %s perms from %#lx:%ld "
"(max %s/cur %s)\n", (long)td->td_proc->p_pid,
prot2str(revokeperms), (u_long)vme->start,
@@ -337,10 +335,10 @@
vm_object_reference(object);
(void) vn_start_write(vp, &mp, V_WAIT);
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
- VM_OBJECT_LOCK(object);
+ VM_OBJECT_WLOCK(object);
vm_object_page_clean(object, offset, offset +
vme->end - vme->start, OBJPC_SYNC);
- VM_OBJECT_UNLOCK(object);
+ VM_OBJECT_WUNLOCK(object);
VOP_UNLOCK(vp, 0);
vn_finished_write(mp);
vm_object_deallocate(object);
@@ -369,7 +367,6 @@
vme->protection & ~revokeperms);
vm_map_simplify_entry(map, vme);
}
- VFS_UNLOCK_GIANT(vfslocked);
}
vm_map_unlock(map);
}
Modified: trunk/sys/security/mac/mac_socket.c
===================================================================
--- trunk/sys/security/mac/mac_socket.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_socket.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2009 Robert N. M. Watson
* Copyright (c) 2001 Ilmar S. Habibulin
@@ -43,7 +44,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_socket.c 193391 2009-06-03 18:46:28Z rwatson $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_syscalls.c
===================================================================
--- trunk/sys/security/mac/mac_syscalls.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_syscalls.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2006, 2009 Robert N. M. Watson
* Copyright (c) 2001 Ilmar S. Habibulin
@@ -43,12 +44,12 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_syscalls.c 302229 2016-06-27 21:25:01Z bdrewery $");
#include "opt_mac.h"
#include <sys/param.h>
-#include <sys/capability.h>
+#include <sys/capsicum.h>
#include <sys/fcntl.h>
#include <sys/kernel.h>
#include <sys/lock.h>
@@ -208,7 +209,7 @@
setsugid(p);
crcopy(newcred, oldcred);
mac_cred_relabel(newcred, intlabel);
- p->p_ucred = newcred;
+ proc_set_cred(p, newcred);
PROC_UNLOCK(p);
crfree(oldcred);
@@ -229,8 +230,9 @@
struct vnode *vp;
struct pipe *pipe;
struct socket *so;
+ cap_rights_t rights;
short label_type;
- int vfslocked, error;
+ int error;
error = copyin(uap->mac_p, &mac, sizeof(mac));
if (error)
@@ -248,7 +250,7 @@
}
buffer = malloc(mac.m_buflen, M_MACTEMP, M_WAITOK | M_ZERO);
- error = fget(td, uap->fd, CAP_MAC_GET, &fp);
+ error = fget(td, uap->fd, cap_rights_init(&rights, CAP_MAC_GET), &fp);
if (error)
goto out;
@@ -262,11 +264,9 @@
}
vp = fp->f_vnode;
intlabel = mac_vnode_label_alloc();
- vfslocked = VFS_LOCK_GIANT(vp->v_mount);
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
mac_vnode_copy_label(vp->v_label, intlabel);
VOP_UNLOCK(vp, 0);
- VFS_UNLOCK_GIANT(vfslocked);
error = mac_vnode_externalize_label(intlabel, elements,
buffer, mac.m_buflen);
mac_vnode_label_free(intlabel);
@@ -322,7 +322,7 @@
struct nameidata nd;
struct label *intlabel;
struct mac mac;
- int vfslocked, error;
+ int error;
if (!(mac_labeled & MPC_OBJECT_VNODE))
return (EINVAL);
@@ -343,7 +343,7 @@
}
buffer = malloc(mac.m_buflen, M_MACTEMP, M_WAITOK | M_ZERO);
- NDINIT(&nd, LOOKUP, MPSAFE | LOCKLEAF | FOLLOW, UIO_USERSPACE,
+ NDINIT(&nd, LOOKUP, LOCKLEAF | FOLLOW, UIO_USERSPACE,
uap->path_p, td);
error = namei(&nd);
if (error)
@@ -350,13 +350,11 @@
goto out;
intlabel = mac_vnode_label_alloc();
- vfslocked = NDHASGIANT(&nd);
mac_vnode_copy_label(nd.ni_vp->v_label, intlabel);
error = mac_vnode_externalize_label(intlabel, elements, buffer,
mac.m_buflen);
NDFREE(&nd, 0);
- VFS_UNLOCK_GIANT(vfslocked);
mac_vnode_label_free(intlabel);
if (error == 0)
error = copyout(buffer, mac.m_string, strlen(buffer)+1);
@@ -375,7 +373,7 @@
struct nameidata nd;
struct label *intlabel;
struct mac mac;
- int vfslocked, error;
+ int error;
if (!(mac_labeled & MPC_OBJECT_VNODE))
return (EINVAL);
@@ -396,7 +394,7 @@
}
buffer = malloc(mac.m_buflen, M_MACTEMP, M_WAITOK | M_ZERO);
- NDINIT(&nd, LOOKUP, MPSAFE | LOCKLEAF | NOFOLLOW, UIO_USERSPACE,
+ NDINIT(&nd, LOOKUP, LOCKLEAF | NOFOLLOW, UIO_USERSPACE,
uap->path_p, td);
error = namei(&nd);
if (error)
@@ -403,12 +401,10 @@
goto out;
intlabel = mac_vnode_label_alloc();
- vfslocked = NDHASGIANT(&nd);
mac_vnode_copy_label(nd.ni_vp->v_label, intlabel);
error = mac_vnode_externalize_label(intlabel, elements, buffer,
mac.m_buflen);
NDFREE(&nd, 0);
- VFS_UNLOCK_GIANT(vfslocked);
mac_vnode_label_free(intlabel);
if (error == 0)
@@ -431,8 +427,9 @@
struct mount *mp;
struct vnode *vp;
struct mac mac;
+ cap_rights_t rights;
char *buffer;
- int error, vfslocked;
+ int error;
error = copyin(uap->mac_p, &mac, sizeof(mac));
if (error)
@@ -449,7 +446,7 @@
return (error);
}
- error = fget(td, uap->fd, CAP_MAC_SET, &fp);
+ error = fget(td, uap->fd, cap_rights_init(&rights, CAP_MAC_SET), &fp);
if (error)
goto out;
@@ -467,10 +464,8 @@
break;
}
vp = fp->f_vnode;
- vfslocked = VFS_LOCK_GIANT(vp->v_mount);
error = vn_start_write(vp, &mp, V_WAIT | PCATCH);
if (error != 0) {
- VFS_UNLOCK_GIANT(vfslocked);
mac_vnode_label_free(intlabel);
break;
}
@@ -478,7 +473,6 @@
error = vn_setlabel(vp, intlabel, td->td_ucred);
VOP_UNLOCK(vp, 0);
vn_finished_write(mp);
- VFS_UNLOCK_GIANT(vfslocked);
mac_vnode_label_free(intlabel);
break;
@@ -532,7 +526,7 @@
struct mount *mp;
struct mac mac;
char *buffer;
- int vfslocked, error;
+ int error;
if (!(mac_labeled & MPC_OBJECT_VNODE))
return (EINVAL);
@@ -558,10 +552,9 @@
if (error)
goto out;
- NDINIT(&nd, LOOKUP, MPSAFE | LOCKLEAF | FOLLOW, UIO_USERSPACE,
+ NDINIT(&nd, LOOKUP, LOCKLEAF | FOLLOW, UIO_USERSPACE,
uap->path_p, td);
error = namei(&nd);
- vfslocked = NDHASGIANT(&nd);
if (error == 0) {
error = vn_start_write(nd.ni_vp, &mp, V_WAIT | PCATCH);
if (error == 0) {
@@ -572,7 +565,6 @@
}
NDFREE(&nd, 0);
- VFS_UNLOCK_GIANT(vfslocked);
out:
mac_vnode_label_free(intlabel);
return (error);
@@ -586,7 +578,7 @@
struct mount *mp;
struct mac mac;
char *buffer;
- int vfslocked, error;
+ int error;
if (!(mac_labeled & MPC_OBJECT_VNODE))
return (EINVAL);
@@ -612,10 +604,9 @@
if (error)
goto out;
- NDINIT(&nd, LOOKUP, MPSAFE | LOCKLEAF | NOFOLLOW, UIO_USERSPACE,
+ NDINIT(&nd, LOOKUP, LOCKLEAF | NOFOLLOW, UIO_USERSPACE,
uap->path_p, td);
error = namei(&nd);
- vfslocked = NDHASGIANT(&nd);
if (error == 0) {
error = vn_start_write(nd.ni_vp, &mp, V_WAIT | PCATCH);
if (error == 0) {
@@ -626,7 +617,6 @@
}
NDFREE(&nd, 0);
- VFS_UNLOCK_GIANT(vfslocked);
out:
mac_vnode_label_free(intlabel);
return (error);
Modified: trunk/sys/security/mac/mac_system.c
===================================================================
--- trunk/sys/security/mac/mac_system.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_system.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2002-2003 Networks Associates Technology, Inc.
* Copyright (c) 2006 SPARTA, Inc.
@@ -51,7 +52,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_system.c 191731 2009-05-01 21:05:40Z rwatson $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_sysv_msg.c
===================================================================
--- trunk/sys/security/mac/mac_sysv_msg.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_sysv_msg.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2003-2004 Networks Associates Technology, Inc.
* Copyright (c) 2006 SPARTA, Inc.
@@ -39,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_sysv_msg.c 191731 2009-05-01 21:05:40Z rwatson $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_sysv_sem.c
===================================================================
--- trunk/sys/security/mac/mac_sysv_sem.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_sysv_sem.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2003-2004 Networks Associates Technology, Inc.
* Copyright (c) 2006 SPARTA, Inc.
@@ -38,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_sysv_sem.c 191731 2009-05-01 21:05:40Z rwatson $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_sysv_shm.c
===================================================================
--- trunk/sys/security/mac/mac_sysv_shm.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_sysv_shm.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2003-2004 Networks Associates Technology, Inc.
* Copyright (c) 2006 SPARTA, Inc.
@@ -38,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_sysv_shm.c 191731 2009-05-01 21:05:40Z rwatson $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
Modified: trunk/sys/security/mac/mac_vfs.c
===================================================================
--- trunk/sys/security/mac/mac_vfs.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac/mac_vfs.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2009 Robert N. M. Watson
* Copyright (c) 2001 Ilmar S. Habibulin
@@ -43,7 +44,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: stable/10/sys/security/mac/mac_vfs.c 255971 2013-10-01 15:40:27Z markj $");
#include "opt_kdtrace.h"
#include "opt_mac.h"
@@ -783,7 +784,7 @@
}
MAC_CHECK_PROBE_DEFINE4(vnode_check_setacl, "struct ucred *",
- "struct vnode *", "acl_tpe_t", "struct acl *");
+ "struct vnode *", "acl_type_t", "struct acl *");
int
mac_vnode_check_setacl(struct ucred *cred, struct vnode *vp, acl_type_t type,
Modified: trunk/sys/security/mac_biba/mac_biba.c
===================================================================
--- trunk/sys/security/mac_biba/mac_biba.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_biba/mac_biba.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007-2011 Robert N. M. Watson
* Copyright (c) 2001-2005 McAfee, Inc.
@@ -38,7 +39,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_biba/mac_biba.c 254603 2013-08-21 17:45:00Z kib $
*/
/*
@@ -1759,6 +1760,24 @@
}
static int
+biba_posixshm_check_read(struct ucred *active_cred, struct ucred *file_cred,
+ struct shmfd *vp, struct label *shmlabel)
+{
+ struct mac_biba *subj, *obj;
+
+ if (!biba_enabled || !revocation_enabled)
+ return (0);
+
+ subj = SLOT(active_cred->cr_label);
+ obj = SLOT(shmlabel);
+
+ if (!biba_dominate_effective(obj, subj))
+ return (EACCES);
+
+ return (0);
+}
+
+static int
biba_posixshm_check_setmode(struct ucred *cred, struct shmfd *shmfd,
struct label *shmlabel, mode_t mode)
{
@@ -1848,6 +1867,24 @@
return (0);
}
+static int
+biba_posixshm_check_write(struct ucred *active_cred, struct ucred *file_cred,
+ struct shmfd *vp, struct label *shmlabel)
+{
+ struct mac_biba *subj, *obj;
+
+ if (!biba_enabled || !revocation_enabled)
+ return (0);
+
+ subj = SLOT(active_cred->cr_label);
+ obj = SLOT(shmlabel);
+
+ if (!biba_dominate_effective(obj, subj))
+ return (EACCES);
+
+ return (0);
+}
+
static void
biba_posixshm_create(struct ucred *cred, struct shmfd *shmfd,
struct label *shmlabel)
@@ -3657,11 +3694,13 @@
.mpo_posixshm_check_mmap = biba_posixshm_check_mmap,
.mpo_posixshm_check_open = biba_posixshm_check_open,
+ .mpo_posixshm_check_read = biba_posixshm_check_read,
.mpo_posixshm_check_setmode = biba_posixshm_check_setmode,
.mpo_posixshm_check_setowner = biba_posixshm_check_setowner,
.mpo_posixshm_check_stat = biba_posixshm_check_stat,
.mpo_posixshm_check_truncate = biba_posixshm_check_truncate,
.mpo_posixshm_check_unlink = biba_posixshm_check_unlink,
+ .mpo_posixshm_check_write = biba_posixshm_check_write,
.mpo_posixshm_create = biba_posixshm_create,
.mpo_posixshm_destroy_label = biba_destroy_label,
.mpo_posixshm_init_label = biba_init_label,
Modified: trunk/sys/security/mac_biba/mac_biba.h
===================================================================
--- trunk/sys/security/mac_biba/mac_biba.h 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_biba/mac_biba.h 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002 Robert N. M. Watson
* Copyright (c) 2001-2004 Networks Associates Technology, Inc.
@@ -31,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_biba/mac_biba.h 132232 2004-07-16 02:03:50Z rwatson $
*/
/*
* Definitions for the TrustedBSD Biba integrity policy module.
Modified: trunk/sys/security/mac_bsdextended/mac_bsdextended.c
===================================================================
--- trunk/sys/security/mac_bsdextended/mac_bsdextended.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_bsdextended/mac_bsdextended.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007-2008 Robert N. M. Watson
* Copyright (c) 2001-2005 Networks Associates Technology, Inc.
@@ -37,7 +38,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_bsdextended/mac_bsdextended.c 321056 2017-07-16 19:25:18Z emaste $
*/
/*
@@ -126,7 +127,7 @@
return (EINVAL);
if ((rule->mbr_object.mbo_neg | MBO_ALL_FLAGS) != MBO_ALL_FLAGS)
return (EINVAL);
- if ((rule->mbr_object.mbo_neg | MBO_TYPE_DEFINED) &&
+ if (((rule->mbr_object.mbo_flags & MBO_TYPE_DEFINED) != 0) &&
(rule->mbr_object.mbo_type | MBO_ALL_TYPE) != MBO_ALL_TYPE)
return (EINVAL);
if ((rule->mbr_mode | MBI_ALLPERM) != MBI_ALLPERM)
Modified: trunk/sys/security/mac_bsdextended/mac_bsdextended.h
===================================================================
--- trunk/sys/security/mac_bsdextended/mac_bsdextended.h 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_bsdextended/mac_bsdextended.h 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002 Robert N. M. Watson
* Copyright (c) 2001-2004 Networks Associates Technology, Inc.
@@ -31,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_bsdextended/mac_bsdextended.h 171253 2007-07-05 13:16:04Z rwatson $
*/
#ifndef _SYS_SECURITY_MAC_BSDEXTENDED_H
Modified: trunk/sys/security/mac_bsdextended/ugidfw_internal.h
===================================================================
--- trunk/sys/security/mac_bsdextended/ugidfw_internal.h 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_bsdextended/ugidfw_internal.h 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2008 Robert N. M. Watson
* All rights reserved.
@@ -25,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_bsdextended/ugidfw_internal.h 189533 2009-03-08 12:32:06Z rwatson $
*/
#ifndef _SYS_SECURITY_MAC_BSDEXTENDED_UGIDFW_INTERNAL_H
Modified: trunk/sys/security/mac_bsdextended/ugidfw_system.c
===================================================================
--- trunk/sys/security/mac_bsdextended/ugidfw_system.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_bsdextended/ugidfw_system.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007 Robert N. M. Watson
* Copyright (c) 2001-2005 Networks Associates Technology, Inc.
@@ -37,7 +38,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_bsdextended/ugidfw_system.c 185539 2008-12-02 02:26:15Z peter $
*/
#include <sys/param.h>
Modified: trunk/sys/security/mac_bsdextended/ugidfw_vnode.c
===================================================================
--- trunk/sys/security/mac_bsdextended/ugidfw_vnode.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_bsdextended/ugidfw_vnode.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007-2008 Robert N. M. Watson
* Copyright (c) 2001-2005 Networks Associates Technology, Inc.
@@ -37,7 +38,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_bsdextended/ugidfw_vnode.c 189533 2009-03-08 12:32:06Z rwatson $
*/
#include <sys/param.h>
Modified: trunk/sys/security/mac_ifoff/mac_ifoff.c
===================================================================
--- trunk/sys/security/mac_ifoff/mac_ifoff.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_ifoff/mac_ifoff.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007 Robert N. M. Watson
* Copyright (c) 2001-2002 Networks Associates Technology, Inc.
@@ -35,7 +36,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_ifoff/mac_ifoff.c 227309 2011-11-07 15:43:11Z ed $
*/
/*
Modified: trunk/sys/security/mac_lomac/mac_lomac.c
===================================================================
--- trunk/sys/security/mac_lomac/mac_lomac.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_lomac/mac_lomac.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007-2009 Robert N. M. Watson
* Copyright (c) 2001-2005 Networks Associates Technology, Inc.
@@ -35,7 +36,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_lomac/mac_lomac.c 302229 2016-06-27 21:25:01Z bdrewery $
*/
/*
@@ -762,10 +763,10 @@
/* Do we have a range? */
single = string;
- range = index(string, '(');
+ range = strchr(string, '(');
if (range == single)
single = NULL;
- auxsingle = index(string, '[');
+ auxsingle = strchr(string, '[');
if (auxsingle == single)
single = NULL;
if (range != NULL && auxsingle != NULL)
@@ -776,13 +777,13 @@
*range = '\0';
range++;
rangelow = range;
- rangehigh = index(rangelow, '-');
+ rangehigh = strchr(rangelow, '-');
if (rangehigh == NULL)
return (EINVAL);
rangehigh++;
if (*rangelow == '\0' || *rangehigh == '\0')
return (EINVAL);
- rangeend = index(rangehigh, ')');
+ rangeend = strchr(rangehigh, ')');
if (rangeend == NULL)
return (EINVAL);
if (*(rangeend + 1) != '\0')
@@ -798,7 +799,7 @@
/* Nul terminate the end of the single string. */
*auxsingle = '\0';
auxsingle++;
- auxsingleend = index(auxsingle, ']');
+ auxsingleend = strchr(auxsingle, ']');
if (auxsingleend == NULL)
return (EINVAL);
if (*(auxsingleend + 1) != '\0')
@@ -2275,7 +2276,7 @@
crcopy(newcred, oldcred);
crhold(newcred);
lomac_copy(&subj->mac_lomac, SLOT(newcred->cr_label));
- p->p_ucred = newcred;
+ proc_set_cred(p, newcred);
crfree(oldcred);
dodrop = 1;
out:
Modified: trunk/sys/security/mac_lomac/mac_lomac.h
===================================================================
--- trunk/sys/security/mac_lomac/mac_lomac.h 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_lomac/mac_lomac.h 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002 Robert N. M. Watson
* Copyright (c) 2001-2002 Networks Associates Technology, Inc.
@@ -31,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_lomac/mac_lomac.h 140661 2005-01-23 14:26:09Z rwatson $
*/
/*
* Definitions for the TrustedBSD LOMAC integrity policy module.
Modified: trunk/sys/security/mac_mls/mac_mls.c
===================================================================
--- trunk/sys/security/mac_mls/mac_mls.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_mls/mac_mls.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007-2011 Robert N. M. Watson
* Copyright (c) 2001-2005 McAfee, Inc.
@@ -38,7 +39,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_mls/mac_mls.c 254603 2013-08-21 17:45:00Z kib $
*/
/*
@@ -1651,6 +1652,24 @@
}
static int
+mls_posixshm_check_read(struct ucred *active_cred, struct ucred *file_cred,
+ struct shmfd *shm, struct label *shmlabel)
+{
+ struct mac_mls *subj, *obj;
+
+ if (!mls_enabled || !revocation_enabled)
+ return (0);
+
+ subj = SLOT(active_cred->cr_label);
+ obj = SLOT(shmlabel);
+
+ if (!mls_dominate_effective(subj, obj))
+ return (EACCES);
+
+ return (0);
+}
+
+static int
mls_posixshm_check_setmode(struct ucred *cred, struct shmfd *shmfd,
struct label *shmlabel, mode_t mode)
{
@@ -1740,6 +1759,24 @@
return (0);
}
+static int
+mls_posixshm_check_write(struct ucred *active_cred, struct ucred *file_cred,
+ struct shmfd *shm, struct label *shmlabel)
+{
+ struct mac_mls *subj, *obj;
+
+ if (!mls_enabled || !revocation_enabled)
+ return (0);
+
+ subj = SLOT(active_cred->cr_label);
+ obj = SLOT(shmlabel);
+
+ if (!mls_dominate_effective(subj, obj))
+ return (EACCES);
+
+ return (0);
+}
+
static void
mls_posixshm_create(struct ucred *cred, struct shmfd *shmfd,
struct label *shmlabel)
@@ -3280,11 +3317,13 @@
.mpo_posixshm_check_mmap = mls_posixshm_check_mmap,
.mpo_posixshm_check_open = mls_posixshm_check_open,
+ .mpo_posixshm_check_read = mls_posixshm_check_read,
.mpo_posixshm_check_setmode = mls_posixshm_check_setmode,
.mpo_posixshm_check_setowner = mls_posixshm_check_setowner,
.mpo_posixshm_check_stat = mls_posixshm_check_stat,
.mpo_posixshm_check_truncate = mls_posixshm_check_truncate,
.mpo_posixshm_check_unlink = mls_posixshm_check_unlink,
+ .mpo_posixshm_check_write = mls_posixshm_check_write,
.mpo_posixshm_create = mls_posixshm_create,
.mpo_posixshm_destroy_label = mls_destroy_label,
.mpo_posixshm_init_label = mls_init_label,
Modified: trunk/sys/security/mac_mls/mac_mls.h
===================================================================
--- trunk/sys/security/mac_mls/mac_mls.h 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_mls/mac_mls.h 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002 Robert N. M. Watson
* Copyright (c) 2001-2004 Networks Associates Technology, Inc.
@@ -31,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_mls/mac_mls.h 132232 2004-07-16 02:03:50Z rwatson $
*/
/*
* Definitions for the TrustedBSD MLS confidentiality policy module.
Modified: trunk/sys/security/mac_none/mac_none.c
===================================================================
--- trunk/sys/security/mac_none/mac_none.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_none/mac_none.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007 Robert N. M. Watson
* Copyright (c) 2001-2003 Networks Associates Technology, Inc.
@@ -31,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_none/mac_none.c 187016 2009-01-10 10:58:41Z rwatson $
*/
/*
Modified: trunk/sys/security/mac_partition/mac_partition.c
===================================================================
--- trunk/sys/security/mac_partition/mac_partition.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_partition/mac_partition.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007-2008 Robert N. M. Watson
* Copyright (c) 2001-2002 Networks Associates Technology, Inc.
@@ -36,7 +37,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_partition/mac_partition.c 227309 2011-11-07 15:43:11Z ed $
*/
/*
Modified: trunk/sys/security/mac_partition/mac_partition.h
===================================================================
--- trunk/sys/security/mac_partition/mac_partition.h 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_partition/mac_partition.h 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002 Robert N. M. Watson
* Copyright (c) 2001-2002 Networks Associates Technology, Inc.
@@ -31,7 +32,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_partition/mac_partition.h 126097 2004-02-22 00:33:12Z rwatson $
*/
/*
Modified: trunk/sys/security/mac_portacl/mac_portacl.c
===================================================================
--- trunk/sys/security/mac_portacl/mac_portacl.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_portacl/mac_portacl.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 2003-2004 Networks Associates Technology, Inc.
* Copyright (c) 2006 SPARTA, Inc.
@@ -32,7 +33,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_portacl/mac_portacl.c 330500 2018-03-05 12:21:36Z eugen $
*/
/*
@@ -493,3 +494,4 @@
MAC_POLICY_SET(&portacl_ops, mac_portacl, "TrustedBSD MAC/portacl",
MPC_LOADTIME_FLAG_UNLOADOK, NULL);
+MODULE_VERSION(mac_portacl, 1);
Modified: trunk/sys/security/mac_seeotheruids/mac_seeotheruids.c
===================================================================
--- trunk/sys/security/mac_seeotheruids/mac_seeotheruids.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_seeotheruids/mac_seeotheruids.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007 Robert N. M. Watson
* Copyright (c) 2001-2002 Networks Associates Technology, Inc.
@@ -35,7 +36,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_seeotheruids/mac_seeotheruids.c 227309 2011-11-07 15:43:11Z ed $
*/
/*
Modified: trunk/sys/security/mac_stub/mac_stub.c
===================================================================
--- trunk/sys/security/mac_stub/mac_stub.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_stub/mac_stub.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007-2011 Robert N. M. Watson
* Copyright (c) 2001-2005 McAfee, Inc.
@@ -39,7 +40,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_stub/mac_stub.c 254603 2013-08-21 17:45:00Z kib $
*/
/*
@@ -757,6 +758,14 @@
}
static int
+stub_posixshm_check_read(struct ucred *active_cred, struct ucred *file_cred,
+ struct shmfd *shm, struct label *shmlabel)
+{
+
+ return (0);
+}
+
+static int
stub_posixshm_check_setmode(struct ucred *cred, struct shmfd *shmfd,
struct label *shmlabel, mode_t mode)
{
@@ -796,6 +805,14 @@
return (0);
}
+static int
+stub_posixshm_check_write(struct ucred *active_cred, struct ucred *file_cred,
+ struct shmfd *shm, struct label *shmlabel)
+{
+
+ return (0);
+}
+
static void
stub_posixshm_create(struct ucred *cred, struct shmfd *shmfd,
struct label *shmlabel)
@@ -1782,11 +1799,13 @@
.mpo_posixshm_check_create = stub_posixshm_check_create,
.mpo_posixshm_check_mmap = stub_posixshm_check_mmap,
.mpo_posixshm_check_open = stub_posixshm_check_open,
+ .mpo_posixshm_check_read = stub_posixshm_check_read,
.mpo_posixshm_check_setmode = stub_posixshm_check_setmode,
.mpo_posixshm_check_setowner = stub_posixshm_check_setowner,
.mpo_posixshm_check_stat = stub_posixshm_check_stat,
.mpo_posixshm_check_truncate = stub_posixshm_check_truncate,
.mpo_posixshm_check_unlink = stub_posixshm_check_unlink,
+ .mpo_posixshm_check_write = stub_posixshm_check_write,
.mpo_posixshm_create = stub_posixshm_create,
.mpo_posixshm_destroy_label = stub_destroy_label,
.mpo_posixshm_init_label = stub_init_label,
Modified: trunk/sys/security/mac_test/mac_test.c
===================================================================
--- trunk/sys/security/mac_test/mac_test.c 2018-05-25 12:38:16 UTC (rev 9912)
+++ trunk/sys/security/mac_test/mac_test.c 2018-05-25 12:41:03 UTC (rev 9913)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1999-2002, 2007-2011 Robert N. M. Watson
* Copyright (c) 2001-2005 McAfee, Inc.
@@ -39,7 +40,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $FreeBSD$
+ * $FreeBSD: stable/10/sys/security/mac_test/mac_test.c 254603 2013-08-21 17:45:00Z kib $
*/
/*
@@ -1423,6 +1424,21 @@
return (0);
}
+COUNTER_DECL(posixshm_check_read);
+static int
+test_posixshm_check_read(struct ucred *active_cred,
+ struct ucred *file_cred, struct shmfd *shm, struct label *shmlabel)
+{
+
+ LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
+ if (file_cred != NULL)
+ LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
+ LABEL_CHECK(shmlabel, MAGIC_POSIX_SHM);
+ COUNTER_INC(posixshm_check_read);
+
+ return (0);
+}
+
COUNTER_DECL(posixshm_check_setmode);
static int
test_posixshm_check_setmode(struct ucred *cred, struct shmfd *shmfd,
@@ -1485,6 +1501,21 @@
return (0);
}
+COUNTER_DECL(posixshm_check_write);
+static int
+test_posixshm_check_write(struct ucred *active_cred,
+ struct ucred *file_cred, struct shmfd *shm, struct label *shmlabel)
+{
+
+ LABEL_CHECK(active_cred->cr_label, MAGIC_CRED);
+ if (file_cred != NULL)
+ LABEL_CHECK(file_cred->cr_label, MAGIC_CRED);
+ LABEL_CHECK(shmlabel, MAGIC_POSIX_SHM);
+ COUNTER_INC(posixshm_check_write);
+
+ return (0);
+}
+
COUNTER_DECL(posixshm_create);
static void
test_posixshm_create(struct ucred *cred, struct shmfd *shmfd,
@@ -3114,11 +3145,13 @@
.mpo_posixshm_check_create = test_posixshm_check_create,
.mpo_posixshm_check_mmap = test_posixshm_check_mmap,
.mpo_posixshm_check_open = test_posixshm_check_open,
+ .mpo_posixshm_check_read = test_posixshm_check_read,
.mpo_posixshm_check_setmode = test_posixshm_check_setmode,
.mpo_posixshm_check_setowner = test_posixshm_check_setowner,
.mpo_posixshm_check_stat = test_posixshm_check_stat,
.mpo_posixshm_check_truncate = test_posixshm_check_truncate,
.mpo_posixshm_check_unlink = test_posixshm_check_unlink,
+ .mpo_posixshm_check_write = test_posixshm_check_write,
.mpo_posixshm_create = test_posixshm_create,
.mpo_posixshm_destroy_label = test_posixshm_destroy_label,
.mpo_posixshm_init_label = test_posixshm_init_label,
More information about the Midnightbsd-cvs
mailing list