usr/src/uts/common/c2/audit_kernel.h
author gww
Mon, 11 Feb 2008 08:20:23 -0800
changeset 5992 528b377af3c0
parent 4165 ee5661dd50e2
child 6900 50f0e694522d
permissions -rw-r--r--
6638707 implement the removal of auditsvc(2) as noted in PSARC/2002/665
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
2425
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
     5
 * Common Development and Distribution License (the "License").
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
/*
5992
528b377af3c0 6638707 implement the removal of auditsvc(2) as noted in PSARC/2002/665
gww
parents: 4165
diff changeset
    22
 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
#ifndef _BSM_AUDIT_KERNEL_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
#define	_BSM_AUDIT_KERNEL_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
 * This file contains the basic auditing control structure definitions.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#include <c2/audit_kevents.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
#include <sys/priv_impl.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
#include <sys/taskq.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
#include <sys/zone.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
2425
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
    40
#include <sys/tsol/label.h>
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
    41
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
#ifdef __cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
 * This table contains the mapping from the system call ID to a corresponding
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
 * audit event.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
 *   au_init() is a function called at the beginning of the system call that
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
 *   performs any necessary setup/processing. It maps the call into the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
 *   appropriate event, depending on the system call arguments. It is called
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
 *   by audit_start() from trap.c .
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
 *   au_event is the audit event associated with the system call. Most of the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
 *   time it will map directly from the system call i.e. There is one system
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
 *   call associated with the event. In some cases, such as shmsys, or open,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
 *   the au_start() function will map the system call to more than one event,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
 *   depending on the system call arguments.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
 *   au_start() is a function that provides per system call processing at the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
 *   beginning of a system call. It is mainly concerned with preseving the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
 *   audit record components that may be altered so that we can determine
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
 *   what the original paramater was before as well as after the system call.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
 *   It is possible that au_start() may be taken away. It might be cleaner to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
 *   define flags in au_ctrl to save a designated argument. For the moment we
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
 *   support both mechanisms, however the use of au_start() will be reviewed
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
 *   for 4.1.1 and CMW and ZEUS to see if such a general method is justified.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
 *   au_finish() is a function that provides per system call processing at the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
 *   completion of a system call. In certain circumstances, the type of audit
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
 *   event depends on intermidiate results during the processing of the system
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
 *   call. It is called in audit_finish() from trap.c .
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
 *   au_ctrl is a control vector that indicates what processing might have to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
 *   be performed, even if there is no auditing for this system call. At
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
 *   present this is mostly for path processing for chmod, chroot. We need to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
 *   process the path information in vfs_lookup, even when we are not auditing
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
 *   the system call in the case of chdir and chroot.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
 * Defines for au_ctrl
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
#define	S2E_SP  PAD_SAVPATH	/* save path for later use */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
#define	S2E_MLD PAD_MLD		/* only one lookup per system call */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
#define	S2E_NPT PAD_NOPATH	/* force no path in audit record */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
#define	S2E_PUB PAD_PUBLIC_EV	/* syscall is defined as a public op */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
 * At present, we are using the audit classes imbedded with in the kernel. Each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
 * event has a bit mask determining which classes the event is associated.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
 * The table audit_e2s maps the audit event ID to the audit state.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
 * Note that this may change radically. If we use a bit vector for the audit
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
 * class, we can allow granularity at the event ID for each user. In this
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
 * case, the vector would be determined at user level and passed to the kernel
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
 * via the setaudit system call.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
 * The audit_pad structure holds paths for the current root and directory
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
 * for the process, as well as for open files and directly manipulated objects.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
 * The reference count minimizes data copies since the process's current
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
 * directory changes very seldom.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
struct audit_path {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
	uint_t		audp_ref;	/* reference count */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
	uint_t		audp_size;	/* allocated size of this structure */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
	uint_t		audp_cnt;	/* number of path sections */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
	char		*audp_sect[1];	/* path section pointers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
					/* audp_sect[0] is the path name */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
					/* audp_sect[1+] are attribute paths */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
 * The structure of the terminal ID within the kernel is different from the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
 * terminal ID in user space. It is a combination of port and IP address.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
struct au_termid {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
	dev_t	at_port;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
	uint_t	at_type;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
	uint_t	at_addr[4];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
typedef struct au_termid au_termid_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
 * Attributes for deferring the queuing of an event.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
typedef struct au_defer_info {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
	struct au_defer_info	*audi_next;	/* next on linked list */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
	void	 *audi_ad;		/* audit record */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
	int	audi_e_type;		/* audit event id */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
	int	audi_e_mod;		/* audit event modifier */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
	int	audi_flag;		/* au_close*() flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
	timestruc_t	audi_atime;	/* audit event timestamp */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
} au_defer_info_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
 * The structure p_audit_data hangs off of the process structure. It contains
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
 * all of the audit information necessary to manage the audit record generation
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
 * for each process.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
 * The pad_lock is constructed in the kmem_cache; the rest is combined
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
 * in a sub structure so it can be copied/zeroed in one statement.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
 * The members have been reordered for maximum packing on 64 bit Solaris.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
struct p_audit_data {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
	kmutex_t	pad_lock;	/* lock pad data during changes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
	struct _pad_data {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
		struct audit_path	*pad_root;	/* process root path */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
		struct audit_path	*pad_cwd;	/* process cwd path */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
		au_mask_t		pad_newmask;	/* pending new mask */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
		int			pad_flags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
	} pad_data;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
typedef struct p_audit_data p_audit_data_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
#define	pad_root	pad_data.pad_root
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
#define	pad_cwd		pad_data.pad_cwd
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
#define	pad_newmask	pad_data.pad_newmask
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
#define	pad_flags	pad_data.pad_flags
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
 * Defines for pad_flags
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
#define	PAD_SETMASK 	0x00000001	/* need to complete pending setmask */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
extern kmem_cache_t *au_pad_cache;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
 * Defines for pad_ctrl
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
#define	PAD_SAVPATH 	0x00000001	/* save path for further processing */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
#define	PAD_MLD		0x00000002	/* system call involves MLD */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
#define	PAD_NOPATH  	0x00000004	/* force no paths in audit record */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
#define	PAD_ABSPATH 	0x00000008	/* path from lookup is absolute */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
#define	PAD_NOATTRB 	0x00000010	/* do not automatically add attribute */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
					/* 0x20, 0x40 unused */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
#define	PAD_LFLOAT  	0x00000080	/* Label float */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
#define	PAD_NOAUDIT 	0x00000100	/* discard audit record */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
#define	PAD_PATHFND 	0x00000200	/* found path, don't retry lookup */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
#define	PAD_SPRIV   	0x00000400	/* succ priv use. extra audit_finish */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
#define	PAD_FPRIV   	0x00000800	/* fail priv use. extra audit_finish */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
#define	PAD_SMAC    	0x00001000	/* succ mac use. extra audit_finish */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
#define	PAD_FMAC    	0x00002000	/* fail mac use. extra audit_finish */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
#define	PAD_AUDITME 	0x00004000	/* audit me because of NFS operation */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
#define	PAD_ATPATH  	0x00008000	/* attribute file lookup */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
#define	PAD_TRUE_CREATE 0x00010000	/* true create, file not found */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
#define	PAD_CORE	0x00020000	/* save attribute during core dump */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
#define	PAD_ERRJMP	0x00040000	/* abort record generation on error */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
#define	PAD_PUBLIC_EV	0x00080000	/* syscall is defined as a public op */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
 * The structure t_audit_data hangs off of the thread structure. It contains
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
 * all of the audit information necessary to manage the audit record generation
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
 * for each thread.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
struct t_audit_data {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
	kthread_id_t  tad_thread;	/* DEBUG pointer to parent thread */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
	unsigned int  tad_scid;		/* system call ID for finish */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
	short	tad_event;	/* event for audit record */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
	short	tad_evmod;	/* event modifier for audit record */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
	int	tad_ctrl;	/* audit control/status flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
	void	*tad_errjmp;	/* error longjmp (audit record aborted) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
	int	tad_flag;	/* to audit or not to audit */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
	struct audit_path	*tad_aupath;	/* captured at vfs_lookup */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
	struct audit_path	*tad_atpath;	/* openat prefix, path of fd */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
	struct vnode *tad_vn;	/* saved inode from vfs_lookup */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
	caddr_t tad_ad;		/* base of accumulated audit data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
	au_defer_info_t	*tad_defer_head;	/* queue of records to defer */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
						/* until syscall end: */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
	au_defer_info_t	*tad_defer_tail;	/* tail of defer queue */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
	priv_set_t tad_sprivs;	/* saved (success) used privs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
	priv_set_t tad_fprivs;	/* saved (failed) used privs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
typedef struct t_audit_data t_audit_data_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
 * The f_audit_data structure hangs off of the file structure. It contains
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
 * three fields of data. The audit ID, the audit state, and a path name.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
struct f_audit_data {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
	kthread_id_t	fad_thread;	/* DEBUG creating thread */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
	int		fad_flags;	/* audit control flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
	struct audit_path	*fad_aupath;	/* path from vfs_lookup */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
typedef struct f_audit_data f_audit_data_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
#define	FAD_READ	0x0001		/* read system call seen */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
#define	FAD_WRITE	0x0002		/* write system call seen */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
#define	P2A(p)	(p->p_audit_data)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
#define	T2A(t)	(t->t_audit_data)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
#define	U2A(u)	(curthread->t_audit_data)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
#define	F2A(f)	(f->f_audit_data)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
#define	u_ad    ((U2A(u))->tad_ad)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
#define	ad_ctrl ((U2A(u))->tad_ctrl)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
#define	ad_flag ((U2A(u))->tad_flag)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
#define	AU_BUFSIZE	128		/* buffer size for the buffer pool */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
struct au_buff {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
	char		buf[AU_BUFSIZE];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
	struct au_buff	*next_buf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
	struct au_buff	*next_rec;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
	ushort_t	rec_len;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
	uchar_t		len;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
	uchar_t		flag;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
typedef struct au_buff au_buff_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
 * Kernel audit queue structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
struct audit_queue {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
	au_buff_t *head;	/* head of queue */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
	au_buff_t *tail;	/* tail of queue */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
	ssize_t	cnt;		/* number elements on queue */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
	size_t	hiwater;	/* high water mark to block */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
	size_t	lowater;	/* low water mark to restart */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
	size_t	bufsz;		/* audit trail write buffer size */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
	size_t	buflen;		/* audit trail buffer length in use */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
	clock_t	delay;		/* delay before flushing queue */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
	int	wt_block;	/* writer is blocked (1) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
	int	rd_block;	/* reader is blocked (1) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
	kmutex_t lock;		/* mutex lock for queue modification */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
	kcondvar_t write_cv;	/* sleep structure for write block */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
	kcondvar_t read_cv;	/* sleep structure for read block */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
union rval;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
struct audit_s2e {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
	au_event_t (*au_init)(au_event_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
				/* convert au_event to real audit event ID */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
	int au_event;		/* default audit event for this system call */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
	void (*au_start)(struct t_audit_data *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
				/* pre-system call audit processing */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
	void (*au_finish)(struct t_audit_data *, int, union rval *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
				/* post-system call audit processing */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
	int au_ctrl;		/* control flags for auditing actions */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
extern struct audit_s2e audit_s2e[];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
#define	AUK_VALID	0x5A5A5A5A
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
#define	AUK_INVALID	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
 * per zone audit context
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
struct au_kcontext {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
	uint32_t		auk_valid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
	zoneid_t		auk_zid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
	boolean_t		auk_hostaddr_valid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
	int			auk_sequence;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
	int			auk_auditstate;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
	int			auk_output_active;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
	struct vnode		*auk_current_vp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
	int			auk_policy;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
	struct audit_queue	auk_queue;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
	au_dbuf_t		*auk_dbuffer;	/* auditdoor output */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
	au_stat_t		auk_statistics;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
	struct auditinfo_addr	auk_info;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
	kmutex_t		auk_eagain_mutex; /* door call retry */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
	kcondvar_t		auk_eagain_cv;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
	kmutex_t		auk_fstat_lock;	/* audit file statistics lock */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
	au_fstat_t		auk_file_stat;	/* file statistics */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
	taskq_t			*auk_taskq;	/* output thread */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
	/* Only one audit svc per zone at a time */
5992
528b377af3c0 6638707 implement the removal of auditsvc(2) as noted in PSARC/2002/665
gww
parents: 4165
diff changeset
   325
	/* With the elimination of auditsvc, can this also go? see 6648414 */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
	kmutex_t 		auk_svc_lock;
5992
528b377af3c0 6638707 implement the removal of auditsvc(2) as noted in PSARC/2002/665
gww
parents: 4165
diff changeset
   327
2640
d95c6149fff4 6415535 audit_event TX code review issues
rica
parents: 2425
diff changeset
   328
	au_state_t		auk_ets[MAX_KEVENTS + 1];
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
#ifndef AUK_CONTEXT_T
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
#define	AUK_CONTEXT_T
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
typedef struct au_kcontext au_kcontext_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
extern zone_key_t au_zone_key;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
 * Kernel auditing external variables
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
extern int audit_policy;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
extern int audit_active;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
extern int audit_load;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
extern int au_auditstate;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
extern struct audit_queue au_queue;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
extern struct p_audit_data *pad0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
extern struct t_audit_data *tad0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
 * audit_path support routines
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
void au_pathhold(struct audit_path *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
void au_pathrele(struct audit_path *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
struct audit_path *au_pathdup(const struct audit_path *, int, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
 * Macros to hide asynchronous, non-blocking audit record start and finish
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
 * processing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
 * NOTE: must be used in (void) funcction () { ... }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
#define	AUDIT_ASYNC_START(rp, audit_event, sorf) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
{ \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
	label_t jb; \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
	if (setjmp(&jb)) { \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
		/* cleanup any residual audit data */ \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
		audit_async_drop((caddr_t *)&(rp), 0); \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
		return; \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
	} \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
	/* auditing enabled and we're preselected for this event? */ \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
	if (audit_async_start(&jb, audit_event, sorf)) { \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
		return; \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
	} \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
#define	AUDIT_ASYNC_FINISH(rp, audit_event, event_modifier) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
	audit_async_finish((caddr_t *)&(rp), audit_event, event_modifier);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
#ifdef	_KERNEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
au_buff_t *au_get_buff(void), *au_free_buff(au_buff_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
/*
2425
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
   386
 * Macro for uniform "subject" token(s) generation
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
 */
4165
ee5661dd50e2 6548367 au_to_zonename() and au_zonename_length() should be more generic
tz204579
parents: 2640
diff changeset
   388
#define	AUDIT_SETSUBJ_GENERIC(u, c, a, k, p)   	\
2425
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
   389
	au_write((u),				\
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
   390
	    au_to_subject(crgetuid(c),		\
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
   391
		crgetgid(c), crgetruid(c),	\
4165
ee5661dd50e2 6548367 au_to_zonename() and au_zonename_length() should be more generic
tz204579
parents: 2640
diff changeset
   392
		crgetrgid(c), p,		\
2425
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
   393
		(a)->ai_auid, (a)->ai_asid,	\
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
   394
		&((a)->ai_termid)));		\
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
   395
	if (is_system_labeled())		\
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
   396
		au_write((u),			\
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
   397
		    au_to_label(CR_SL((c)))); 	\
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
   398
	if ((k)->auk_policy & AUDIT_GROUP)	\
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
   399
		au_write((u),			\
9274196fea31 6415509 audit TX code review issues
gww
parents: 0
diff changeset
   400
		    au_to_groups(crgetgroups(c),\
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   401
		    crgetngroups(c)))
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   402
4165
ee5661dd50e2 6548367 au_to_zonename() and au_zonename_length() should be more generic
tz204579
parents: 2640
diff changeset
   403
#define	AUDIT_SETSUBJ(u, c, a, k)      		\
ee5661dd50e2 6548367 au_to_zonename() and au_zonename_length() should be more generic
tz204579
parents: 2640
diff changeset
   404
	AUDIT_SETSUBJ_GENERIC(u, c, a, k, curproc->p_pid)
ee5661dd50e2 6548367 au_to_zonename() and au_zonename_length() should be more generic
tz204579
parents: 2640
diff changeset
   405
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   406
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   407
 * Macros for type conversion
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   408
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   409
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   410
/* au_membuf head, to typed data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   411
#define	memtod(x, t)	((t)x->buf)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   412
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   413
/* au_membuf types */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   414
#define	MT_FREE		0	/* should be on free list */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   415
#define	MT_DATA		1	/* dynamic (data) allocation */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   416
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   417
/* flags to au_memget */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   418
#define	DONTWAIT	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   419
#define	WAIT		1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   420
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   421
#define	AU_PACK	1	/* pack data in au_append_rec() */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   422
#define	AU_LINK 0	/* link data in au_append_rec() */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   423
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   424
/* flags to async routines */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   425
#define	AU_BACKEND	1	/* called from softcall backend */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   426
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   427
#ifdef __cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   428
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   429
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   430
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   431
#endif /* _BSM_AUDIT_KERNEL_H */