Blame view

kernel/audit.h 5.81 KB
fe7752bab   David Woodhouse   [PATCH] Fix audit...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
  /* audit -- definition of audit_context structure and supporting types 
   *
   * Copyright 2003-2004 Red Hat, Inc.
   * Copyright 2005 Hewlett-Packard Development Company, L.P.
   * Copyright 2005 IBM Corporation
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation; either version 2 of the License, or
   * (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this program; if not, write to the Free Software
   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   */
  
  #include <linux/fs.h>
  #include <linux/audit.h>
9044e6bca   Al Viro   [PATCH] fix deadl...
24
  #include <linux/skbuff.h>
fe7752bab   David Woodhouse   [PATCH] Fix audit...
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
  
  /* 0 = no checking
     1 = put_count checking
     2 = verbose put_count checking
  */
  #define AUDIT_DEBUG 0
  
  /* At task start time, the audit_state is set in the audit_context using
     a per-task filter.  At syscall entry, the audit_state is augmented by
     the syscall filter. */
  enum audit_state {
  	AUDIT_DISABLED,		/* Do not create per-task audit_context.
  				 * No syscall-specific audit records can
  				 * be generated. */
  	AUDIT_SETUP_CONTEXT,	/* Create the per-task audit_context,
  				 * but don't necessarily fill it in at
  				 * syscall entry time (i.e., filter
  				 * instead). */
  	AUDIT_BUILD_CONTEXT,	/* Create the per-task audit_context,
  				 * and always fill it in at syscall
  				 * entry time.  This makes a full
  				 * syscall record available if some
  				 * other part of the kernel decides it
  				 * should be recorded. */
  	AUDIT_RECORD_CONTEXT	/* Create the per-task audit_context,
  				 * always fill it in at syscall entry
  				 * time, and always write out the audit
  				 * record at syscall exit time.  */
  };
  
  /* Rule lists */
cfcad62c7   Eric Paris   audit: seperate a...
56
  struct audit_watch;
74c3cbe33   Al Viro   [PATCH] audit: wa...
57
58
  struct audit_tree;
  struct audit_chunk;
fe7752bab   David Woodhouse   [PATCH] Fix audit...
59
  struct audit_entry {
93315ed6d   Amy Griffis   [PATCH] audit str...
60
61
62
  	struct list_head	list;
  	struct rcu_head		rcu;
  	struct audit_krule	rule;
fe7752bab   David Woodhouse   [PATCH] Fix audit...
63
  };
c782f242f   Harvey Harrison   [PATCH 1/2] audit...
64
65
66
67
  #ifdef CONFIG_AUDIT
  extern int audit_enabled;
  extern int audit_ever_enabled;
  #endif
fe7752bab   David Woodhouse   [PATCH] Fix audit...
68
  extern int audit_pid;
fe7752bab   David Woodhouse   [PATCH] Fix audit...
69

f368c07d7   Amy Griffis   [PATCH] audit: pa...
70
71
72
73
74
75
76
  #define AUDIT_INODE_BUCKETS	32
  extern struct list_head audit_inode_hash[AUDIT_INODE_BUCKETS];
  
  static inline int audit_hash_ino(u32 ino)
  {
  	return (ino & (AUDIT_INODE_BUCKETS-1));
  }
55669bfa1   Al Viro   [PATCH] audit: AU...
77
  extern int audit_match_class(int class, unsigned syscall);
f368c07d7   Amy Griffis   [PATCH] audit: pa...
78
  extern int audit_comparator(const u32 left, const u32 op, const u32 right);
9c937dcc7   Amy Griffis   [PATCH] log more ...
79
80
  extern int audit_compare_dname_path(const char *dname, const char *path,
  				    int *dirlen);
9044e6bca   Al Viro   [PATCH] fix deadl...
81
82
83
  extern struct sk_buff *	    audit_make_reply(int pid, int seq, int type,
  					     int done, int multi,
  					     void *payload, int size);
fe7752bab   David Woodhouse   [PATCH] Fix audit...
84
85
86
  extern void		    audit_send_reply(int pid, int seq, int type,
  					     int done, int multi,
  					     void *payload, int size);
fe7752bab   David Woodhouse   [PATCH] Fix audit...
87
  extern void		    audit_panic(const char *message);
3dc7e3153   Darrel Goeddel   [PATCH] support f...
88

9044e6bca   Al Viro   [PATCH] fix deadl...
89
90
91
92
93
94
  struct audit_netlink_list {
  	int pid;
  	struct sk_buff_head q;
  };
  
  int audit_send_list(void *);
3dc7e3153   Darrel Goeddel   [PATCH] support f...
95
  extern int selinux_audit_rule_update(void);
e1396065e   Al Viro   [PATCH] collect s...
96

74c3cbe33   Al Viro   [PATCH] audit: wa...
97
98
  extern struct mutex audit_filter_mutex;
  extern void audit_free_rule_rcu(struct rcu_head *);
c782f242f   Harvey Harrison   [PATCH 1/2] audit...
99
  extern struct list_head audit_filter_list[];
74c3cbe33   Al Viro   [PATCH] audit: wa...
100

939a67fc4   Eric Paris   Audit: split audi...
101
  extern struct audit_entry *audit_dupe_rule(struct audit_krule *old);
cfcad62c7   Eric Paris   audit: seperate a...
102
  /* audit watch functions */
939a67fc4   Eric Paris   Audit: split audi...
103
  #ifdef CONFIG_AUDIT_WATCH
cfcad62c7   Eric Paris   audit: seperate a...
104
105
106
  extern void audit_put_watch(struct audit_watch *watch);
  extern void audit_get_watch(struct audit_watch *watch);
  extern int audit_to_watch(struct audit_krule *krule, char *path, int len, u32 op);
ae7b8f410   Eric Paris   Audit: clean up t...
107
  extern int audit_add_watch(struct audit_krule *krule, struct list_head **list);
a05fb6cc5   Eric Paris   audit: do not get...
108
  extern void audit_remove_watch_rule(struct audit_krule *krule);
cfcad62c7   Eric Paris   audit: seperate a...
109
  extern char *audit_watch_path(struct audit_watch *watch);
ae7b8f410   Eric Paris   Audit: clean up t...
110
  extern int audit_watch_compare(struct audit_watch *watch, unsigned long ino, dev_t dev);
939a67fc4   Eric Paris   Audit: split audi...
111
112
113
114
115
116
117
118
119
120
  #else
  #define audit_put_watch(w) {}
  #define audit_get_watch(w) {}
  #define audit_to_watch(k, p, l, o) (-EINVAL)
  #define audit_add_watch(k, l) (-EINVAL)
  #define audit_remove_watch_rule(k) BUG()
  #define audit_watch_path(w) ""
  #define audit_watch_compare(w, i, d) 0
  
  #endif /* CONFIG_AUDIT_WATCH */
cfcad62c7   Eric Paris   audit: seperate a...
121

74c3cbe33   Al Viro   [PATCH] audit: wa...
122
123
124
125
126
127
128
129
130
  #ifdef CONFIG_AUDIT_TREE
  extern struct audit_chunk *audit_tree_lookup(const struct inode *);
  extern void audit_put_chunk(struct audit_chunk *);
  extern int audit_tree_match(struct audit_chunk *, struct audit_tree *);
  extern int audit_make_tree(struct audit_krule *, char *, u32);
  extern int audit_add_tree_rule(struct audit_krule *);
  extern int audit_remove_tree_rule(struct audit_krule *);
  extern void audit_trim_trees(void);
  extern int audit_tag_tree(char *old, char *new);
74c3cbe33   Al Viro   [PATCH] audit: wa...
131
132
  extern const char *audit_tree_path(struct audit_tree *);
  extern void audit_put_tree(struct audit_tree *);
916d75761   Al Viro   Fix rule eviction...
133
  extern void audit_kill_trees(struct list_head *);
74c3cbe33   Al Viro   [PATCH] audit: wa...
134
135
136
137
138
139
140
141
  #else
  #define audit_remove_tree_rule(rule) BUG()
  #define audit_add_tree_rule(rule) -EINVAL
  #define audit_make_tree(rule, str, op) -EINVAL
  #define audit_trim_trees() (void)0
  #define audit_put_tree(tree) (void)0
  #define audit_tag_tree(old, new) -EINVAL
  #define audit_tree_path(rule) ""	/* never called */
916d75761   Al Viro   Fix rule eviction...
142
  #define audit_kill_trees(list) BUG()
74c3cbe33   Al Viro   [PATCH] audit: wa...
143
144
145
  #endif
  
  extern char *audit_unpack_string(void **, size_t *, size_t);
c782f242f   Harvey Harrison   [PATCH 1/2] audit...
146
147
148
  extern pid_t audit_sig_pid;
  extern uid_t audit_sig_uid;
  extern u32 audit_sig_sid;
e1396065e   Al Viro   [PATCH] collect s...
149
  #ifdef CONFIG_AUDITSYSCALL
e54dc2431   Amy Griffis   [PATCH] audit sig...
150
151
  extern int __audit_signal_info(int sig, struct task_struct *t);
  static inline int audit_signal_info(int sig, struct task_struct *t)
e1396065e   Al Viro   [PATCH] collect s...
152
  {
e54dc2431   Amy Griffis   [PATCH] audit sig...
153
154
155
156
  	if (unlikely((audit_pid && t->tgid == audit_pid) ||
  		     (audit_signals && !audit_dummy_context())))
  		return __audit_signal_info(sig, t);
  	return 0;
e1396065e   Al Viro   [PATCH] collect s...
157
  }
0590b9335   Al Viro   fixing audit rule...
158
  extern void audit_filter_inodes(struct task_struct *, struct audit_context *);
916d75761   Al Viro   Fix rule eviction...
159
  extern struct list_head *audit_killed_trees(void);
e1396065e   Al Viro   [PATCH] collect s...
160
  #else
e54dc2431   Amy Griffis   [PATCH] audit sig...
161
  #define audit_signal_info(s,t) AUDIT_DISABLED
f368c07d7   Amy Griffis   [PATCH] audit: pa...
162
  #define audit_filter_inodes(t,c) AUDIT_DISABLED
e1396065e   Al Viro   [PATCH] collect s...
163
  #endif
916d75761   Al Viro   Fix rule eviction...
164
165
  
  extern struct mutex audit_cmd_mutex;