aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/audit.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/audit.h')
-rw-r--r--include/linux/audit.h84
1 files changed, 65 insertions, 19 deletions
diff --git a/include/linux/audit.h b/include/linux/audit.h
index e051ff9c5b50..c3aa09751814 100644
--- a/include/linux/audit.h
+++ b/include/linux/audit.h
@@ -95,6 +95,11 @@
95#define AUDIT_MAC_POLICY_LOAD 1403 /* Policy file load */ 95#define AUDIT_MAC_POLICY_LOAD 1403 /* Policy file load */
96#define AUDIT_MAC_STATUS 1404 /* Changed enforcing,permissive,off */ 96#define AUDIT_MAC_STATUS 1404 /* Changed enforcing,permissive,off */
97#define AUDIT_MAC_CONFIG_CHANGE 1405 /* Changes to booleans */ 97#define AUDIT_MAC_CONFIG_CHANGE 1405 /* Changes to booleans */
98#define AUDIT_MAC_UNLBL_ALLOW 1406 /* NetLabel: allow unlabeled traffic */
99#define AUDIT_MAC_CIPSOV4_ADD 1407 /* NetLabel: add CIPSOv4 DOI entry */
100#define AUDIT_MAC_CIPSOV4_DEL 1408 /* NetLabel: del CIPSOv4 DOI entry */
101#define AUDIT_MAC_MAP_ADD 1409 /* NetLabel: add LSM domain mapping */
102#define AUDIT_MAC_MAP_DEL 1410 /* NetLabel: del LSM domain mapping */
98 103
99#define AUDIT_FIRST_KERN_ANOM_MSG 1700 104#define AUDIT_FIRST_KERN_ANOM_MSG 1700
100#define AUDIT_LAST_KERN_ANOM_MSG 1799 105#define AUDIT_LAST_KERN_ANOM_MSG 1799
@@ -122,10 +127,21 @@
122/* Rule structure sizes -- if these change, different AUDIT_ADD and 127/* Rule structure sizes -- if these change, different AUDIT_ADD and
123 * AUDIT_LIST commands must be implemented. */ 128 * AUDIT_LIST commands must be implemented. */
124#define AUDIT_MAX_FIELDS 64 129#define AUDIT_MAX_FIELDS 64
130#define AUDIT_MAX_KEY_LEN 32
125#define AUDIT_BITMASK_SIZE 64 131#define AUDIT_BITMASK_SIZE 64
126#define AUDIT_WORD(nr) ((__u32)((nr)/32)) 132#define AUDIT_WORD(nr) ((__u32)((nr)/32))
127#define AUDIT_BIT(nr) (1 << ((nr) - AUDIT_WORD(nr)*32)) 133#define AUDIT_BIT(nr) (1 << ((nr) - AUDIT_WORD(nr)*32))
128 134
135#define AUDIT_SYSCALL_CLASSES 16
136#define AUDIT_CLASS_DIR_WRITE 0
137#define AUDIT_CLASS_DIR_WRITE_32 1
138#define AUDIT_CLASS_CHATTR 2
139#define AUDIT_CLASS_CHATTR_32 3
140#define AUDIT_CLASS_READ 4
141#define AUDIT_CLASS_READ_32 5
142#define AUDIT_CLASS_WRITE 6
143#define AUDIT_CLASS_WRITE_32 7
144
129/* This bitmask is used to validate user input. It represents all bits that 145/* This bitmask is used to validate user input. It represents all bits that
130 * are currently used in an audit field constant understood by the kernel. 146 * are currently used in an audit field constant understood by the kernel.
131 * If you are adding a new #define AUDIT_<whatever>, please ensure that 147 * If you are adding a new #define AUDIT_<whatever>, please ensure that
@@ -150,12 +166,17 @@
150#define AUDIT_PERS 10 166#define AUDIT_PERS 10
151#define AUDIT_ARCH 11 167#define AUDIT_ARCH 11
152#define AUDIT_MSGTYPE 12 168#define AUDIT_MSGTYPE 12
153#define AUDIT_SE_USER 13 /* security label user */ 169#define AUDIT_SUBJ_USER 13 /* security label user */
154#define AUDIT_SE_ROLE 14 /* security label role */ 170#define AUDIT_SUBJ_ROLE 14 /* security label role */
155#define AUDIT_SE_TYPE 15 /* security label type */ 171#define AUDIT_SUBJ_TYPE 15 /* security label type */
156#define AUDIT_SE_SEN 16 /* security label sensitivity label */ 172#define AUDIT_SUBJ_SEN 16 /* security label sensitivity label */
157#define AUDIT_SE_CLR 17 /* security label clearance label */ 173#define AUDIT_SUBJ_CLR 17 /* security label clearance label */
158#define AUDIT_PPID 18 174#define AUDIT_PPID 18
175#define AUDIT_OBJ_USER 19
176#define AUDIT_OBJ_ROLE 20
177#define AUDIT_OBJ_TYPE 21
178#define AUDIT_OBJ_LEV_LOW 22
179#define AUDIT_OBJ_LEV_HIGH 23
159 180
160 /* These are ONLY useful when checking 181 /* These are ONLY useful when checking
161 * at syscall exit time (AUDIT_AT_EXIT). */ 182 * at syscall exit time (AUDIT_AT_EXIT). */
@@ -165,12 +186,15 @@
165#define AUDIT_EXIT 103 186#define AUDIT_EXIT 103
166#define AUDIT_SUCCESS 104 /* exit >= 0; value ignored */ 187#define AUDIT_SUCCESS 104 /* exit >= 0; value ignored */
167#define AUDIT_WATCH 105 188#define AUDIT_WATCH 105
189#define AUDIT_PERM 106
168 190
169#define AUDIT_ARG0 200 191#define AUDIT_ARG0 200
170#define AUDIT_ARG1 (AUDIT_ARG0+1) 192#define AUDIT_ARG1 (AUDIT_ARG0+1)
171#define AUDIT_ARG2 (AUDIT_ARG0+2) 193#define AUDIT_ARG2 (AUDIT_ARG0+2)
172#define AUDIT_ARG3 (AUDIT_ARG0+3) 194#define AUDIT_ARG3 (AUDIT_ARG0+3)
173 195
196#define AUDIT_FILTERKEY 210
197
174#define AUDIT_NEGATE 0x80000000 198#define AUDIT_NEGATE 0x80000000
175 199
176/* These are the supported operators. 200/* These are the supported operators.
@@ -238,6 +262,11 @@
238#define AUDIT_ARCH_V850 (EM_V850|__AUDIT_ARCH_LE) 262#define AUDIT_ARCH_V850 (EM_V850|__AUDIT_ARCH_LE)
239#define AUDIT_ARCH_X86_64 (EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE) 263#define AUDIT_ARCH_X86_64 (EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
240 264
265#define AUDIT_PERM_EXEC 1
266#define AUDIT_PERM_WRITE 2
267#define AUDIT_PERM_READ 4
268#define AUDIT_PERM_ATTR 8
269
241struct audit_status { 270struct audit_status {
242 __u32 mask; /* Bit mask for valid entries */ 271 __u32 mask; /* Bit mask for valid entries */
243 __u32 enabled; /* 1 = enabled, 0 = disabled */ 272 __u32 enabled; /* 1 = enabled, 0 = disabled */
@@ -299,6 +328,8 @@ struct mqstat;
299#define AUDITSC_SUCCESS 1 328#define AUDITSC_SUCCESS 1
300#define AUDITSC_FAILURE 2 329#define AUDITSC_FAILURE 2
301#define AUDITSC_RESULT(x) ( ((long)(x))<0?AUDITSC_FAILURE:AUDITSC_SUCCESS ) 330#define AUDITSC_RESULT(x) ( ((long)(x))<0?AUDITSC_FAILURE:AUDITSC_SUCCESS )
331extern int __init audit_register_class(int class, unsigned *list);
332extern int audit_classify_syscall(int abi, unsigned syscall);
302#ifdef CONFIG_AUDITSYSCALL 333#ifdef CONFIG_AUDITSYSCALL
303/* These are defined in auditsc.c */ 334/* These are defined in auditsc.c */
304 /* Public API */ 335 /* Public API */
@@ -312,21 +343,31 @@ extern void __audit_getname(const char *name);
312extern void audit_putname(const char *name); 343extern void audit_putname(const char *name);
313extern void __audit_inode(const char *name, const struct inode *inode); 344extern void __audit_inode(const char *name, const struct inode *inode);
314extern void __audit_inode_child(const char *dname, const struct inode *inode, 345extern void __audit_inode_child(const char *dname, const struct inode *inode,
315 unsigned long pino); 346 const struct inode *parent);
347extern void __audit_inode_update(const struct inode *inode);
348static inline int audit_dummy_context(void)
349{
350 void *p = current->audit_context;
351 return !p || *(int *)p;
352}
316static inline void audit_getname(const char *name) 353static inline void audit_getname(const char *name)
317{ 354{
318 if (unlikely(current->audit_context)) 355 if (unlikely(!audit_dummy_context()))
319 __audit_getname(name); 356 __audit_getname(name);
320} 357}
321static inline void audit_inode(const char *name, const struct inode *inode) { 358static inline void audit_inode(const char *name, const struct inode *inode) {
322 if (unlikely(current->audit_context)) 359 if (unlikely(!audit_dummy_context()))
323 __audit_inode(name, inode); 360 __audit_inode(name, inode);
324} 361}
325static inline void audit_inode_child(const char *dname, 362static inline void audit_inode_child(const char *dname,
326 const struct inode *inode, 363 const struct inode *inode,
327 unsigned long pino) { 364 const struct inode *parent) {
328 if (unlikely(current->audit_context)) 365 if (unlikely(!audit_dummy_context()))
329 __audit_inode_child(dname, inode, pino); 366 __audit_inode_child(dname, inode, parent);
367}
368static inline void audit_inode_update(const struct inode *inode) {
369 if (unlikely(!audit_dummy_context()))
370 __audit_inode_update(inode);
330} 371}
331 372
332 /* Private API (for audit.c only) */ 373 /* Private API (for audit.c only) */
@@ -350,57 +391,61 @@ extern int __audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat);
350 391
351static inline int audit_ipc_obj(struct kern_ipc_perm *ipcp) 392static inline int audit_ipc_obj(struct kern_ipc_perm *ipcp)
352{ 393{
353 if (unlikely(current->audit_context)) 394 if (unlikely(!audit_dummy_context()))
354 return __audit_ipc_obj(ipcp); 395 return __audit_ipc_obj(ipcp);
355 return 0; 396 return 0;
356} 397}
357static inline int audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode) 398static inline int audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode)
358{ 399{
359 if (unlikely(current->audit_context)) 400 if (unlikely(!audit_dummy_context()))
360 return __audit_ipc_set_perm(qbytes, uid, gid, mode); 401 return __audit_ipc_set_perm(qbytes, uid, gid, mode);
361 return 0; 402 return 0;
362} 403}
363static inline int audit_mq_open(int oflag, mode_t mode, struct mq_attr __user *u_attr) 404static inline int audit_mq_open(int oflag, mode_t mode, struct mq_attr __user *u_attr)
364{ 405{
365 if (unlikely(current->audit_context)) 406 if (unlikely(!audit_dummy_context()))
366 return __audit_mq_open(oflag, mode, u_attr); 407 return __audit_mq_open(oflag, mode, u_attr);
367 return 0; 408 return 0;
368} 409}
369static inline int audit_mq_timedsend(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec __user *u_abs_timeout) 410static inline int audit_mq_timedsend(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec __user *u_abs_timeout)
370{ 411{
371 if (unlikely(current->audit_context)) 412 if (unlikely(!audit_dummy_context()))
372 return __audit_mq_timedsend(mqdes, msg_len, msg_prio, u_abs_timeout); 413 return __audit_mq_timedsend(mqdes, msg_len, msg_prio, u_abs_timeout);
373 return 0; 414 return 0;
374} 415}
375static inline int audit_mq_timedreceive(mqd_t mqdes, size_t msg_len, unsigned int __user *u_msg_prio, const struct timespec __user *u_abs_timeout) 416static inline int audit_mq_timedreceive(mqd_t mqdes, size_t msg_len, unsigned int __user *u_msg_prio, const struct timespec __user *u_abs_timeout)
376{ 417{
377 if (unlikely(current->audit_context)) 418 if (unlikely(!audit_dummy_context()))
378 return __audit_mq_timedreceive(mqdes, msg_len, u_msg_prio, u_abs_timeout); 419 return __audit_mq_timedreceive(mqdes, msg_len, u_msg_prio, u_abs_timeout);
379 return 0; 420 return 0;
380} 421}
381static inline int audit_mq_notify(mqd_t mqdes, const struct sigevent __user *u_notification) 422static inline int audit_mq_notify(mqd_t mqdes, const struct sigevent __user *u_notification)
382{ 423{
383 if (unlikely(current->audit_context)) 424 if (unlikely(!audit_dummy_context()))
384 return __audit_mq_notify(mqdes, u_notification); 425 return __audit_mq_notify(mqdes, u_notification);
385 return 0; 426 return 0;
386} 427}
387static inline int audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) 428static inline int audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat)
388{ 429{
389 if (unlikely(current->audit_context)) 430 if (unlikely(!audit_dummy_context()))
390 return __audit_mq_getsetattr(mqdes, mqstat); 431 return __audit_mq_getsetattr(mqdes, mqstat);
391 return 0; 432 return 0;
392} 433}
434extern int audit_n_rules;
393#else 435#else
394#define audit_alloc(t) ({ 0; }) 436#define audit_alloc(t) ({ 0; })
395#define audit_free(t) do { ; } while (0) 437#define audit_free(t) do { ; } while (0)
396#define audit_syscall_entry(ta,a,b,c,d,e) do { ; } while (0) 438#define audit_syscall_entry(ta,a,b,c,d,e) do { ; } while (0)
397#define audit_syscall_exit(f,r) do { ; } while (0) 439#define audit_syscall_exit(f,r) do { ; } while (0)
440#define audit_dummy_context() 1
398#define audit_getname(n) do { ; } while (0) 441#define audit_getname(n) do { ; } while (0)
399#define audit_putname(n) do { ; } while (0) 442#define audit_putname(n) do { ; } while (0)
400#define __audit_inode(n,i) do { ; } while (0) 443#define __audit_inode(n,i) do { ; } while (0)
401#define __audit_inode_child(d,i,p) do { ; } while (0) 444#define __audit_inode_child(d,i,p) do { ; } while (0)
445#define __audit_inode_update(i) do { ; } while (0)
402#define audit_inode(n,i) do { ; } while (0) 446#define audit_inode(n,i) do { ; } while (0)
403#define audit_inode_child(d,i,p) do { ; } while (0) 447#define audit_inode_child(d,i,p) do { ; } while (0)
448#define audit_inode_update(i) do { ; } while (0)
404#define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) 449#define auditsc_get_stamp(c,t,s) do { BUG(); } while (0)
405#define audit_get_loginuid(c) ({ -1; }) 450#define audit_get_loginuid(c) ({ -1; })
406#define audit_ipc_obj(i) ({ 0; }) 451#define audit_ipc_obj(i) ({ 0; })
@@ -415,6 +460,7 @@ static inline int audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat)
415#define audit_mq_timedreceive(d,l,p,t) ({ 0; }) 460#define audit_mq_timedreceive(d,l,p,t) ({ 0; })
416#define audit_mq_notify(d,n) ({ 0; }) 461#define audit_mq_notify(d,n) ({ 0; })
417#define audit_mq_getsetattr(d,s) ({ 0; }) 462#define audit_mq_getsetattr(d,s) ({ 0; })
463#define audit_n_rules 0
418#endif 464#endif
419 465
420#ifdef CONFIG_AUDIT 466#ifdef CONFIG_AUDIT