home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / audit.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  15.3 KB  |  391 lines

  1. /* audit.h -- Auditing support
  2.  *
  3.  * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.
  4.  * All Rights Reserved.
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; either version 2 of the License, or
  9.  * (at your option) any later version.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program; if not, write to the Free Software
  18.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  19.  *
  20.  * Written by Rickard E. (Rik) Faith <faith@redhat.com>
  21.  *
  22.  */
  23.  
  24. #ifndef _LINUX_AUDIT_H_
  25. #define _LINUX_AUDIT_H_
  26.  
  27. #include <linux/elf-em.h>
  28.  
  29. /* The netlink messages for the audit system is divided into blocks:
  30.  * 1000 - 1099 are for commanding the audit system
  31.  * 1100 - 1199 user space trusted application messages
  32.  * 1200 - 1299 messages internal to the audit daemon
  33.  * 1300 - 1399 audit event messages
  34.  * 1400 - 1499 SE Linux use
  35.  * 1500 - 1599 kernel LSPP events
  36.  * 1600 - 1699 kernel crypto events
  37.  * 1700 - 1799 kernel anomaly records
  38.  * 1800 - 1999 future kernel use (maybe integrity labels and related events)
  39.  * 2000 is for otherwise unclassified kernel audit messages (legacy)
  40.  * 2001 - 2099 unused (kernel)
  41.  * 2100 - 2199 user space anomaly records
  42.  * 2200 - 2299 user space actions taken in response to anomalies
  43.  * 2300 - 2399 user space generated LSPP events
  44.  * 2400 - 2499 user space crypto events
  45.  * 2500 - 2999 future user space (maybe integrity labels and related events)
  46.  *
  47.  * Messages from 1000-1199 are bi-directional. 1200-1299 & 2100 - 2999 are
  48.  * exclusively user space. 1300-2099 is kernel --> user space 
  49.  * communication.
  50.  */
  51. #define AUDIT_GET        1000    /* Get status */
  52. #define AUDIT_SET        1001    /* Set status (enable/disable/auditd) */
  53. #define AUDIT_LIST        1002    /* List syscall rules -- deprecated */
  54. #define AUDIT_ADD        1003    /* Add syscall rule -- deprecated */
  55. #define AUDIT_DEL        1004    /* Delete syscall rule -- deprecated */
  56. #define AUDIT_USER        1005    /* Message from userspace -- deprecated */
  57. #define AUDIT_LOGIN        1006    /* Define the login id and information */
  58. #define AUDIT_WATCH_INS        1007    /* Insert file/dir watch entry */
  59. #define AUDIT_WATCH_REM        1008    /* Remove file/dir watch entry */
  60. #define AUDIT_WATCH_LIST    1009    /* List all file/dir watches */
  61. #define AUDIT_SIGNAL_INFO    1010    /* Get info about sender of signal to auditd */
  62. #define AUDIT_ADD_RULE        1011    /* Add syscall filtering rule */
  63. #define AUDIT_DEL_RULE        1012    /* Delete syscall filtering rule */
  64. #define AUDIT_LIST_RULES    1013    /* List syscall filtering rules */
  65.  
  66. #define AUDIT_FIRST_USER_MSG    1100    /* Userspace messages mostly uninteresting to kernel */
  67. #define AUDIT_USER_AVC        1107    /* We filter this differently */
  68. #define AUDIT_LAST_USER_MSG    1199
  69. #define AUDIT_FIRST_USER_MSG2    2100    /* More user space messages */
  70. #define AUDIT_LAST_USER_MSG2    2999
  71.  
  72. #define AUDIT_DAEMON_START      1200    /* Daemon startup record */
  73. #define AUDIT_DAEMON_END        1201    /* Daemon normal stop record */
  74. #define AUDIT_DAEMON_ABORT      1202    /* Daemon error stop record */
  75. #define AUDIT_DAEMON_CONFIG     1203    /* Daemon config change */
  76.  
  77. #define AUDIT_SYSCALL        1300    /* Syscall event */
  78. #define AUDIT_FS_WATCH        1301    /* Filesystem watch event */
  79. #define AUDIT_PATH        1302    /* Filename path information */
  80. #define AUDIT_IPC        1303    /* IPC record */
  81. #define AUDIT_SOCKETCALL    1304    /* sys_socketcall arguments */
  82. #define AUDIT_CONFIG_CHANGE    1305    /* Audit system configuration change */
  83. #define AUDIT_SOCKADDR        1306    /* sockaddr copied as syscall arg */
  84. #define AUDIT_CWD        1307    /* Current working directory */
  85. #define AUDIT_IPC_SET_PERM    1311    /* IPC new permissions record type */
  86.  
  87. #define AUDIT_AVC        1400    /* SE Linux avc denial or grant */
  88. #define AUDIT_SELINUX_ERR    1401    /* Internal SE Linux Errors */
  89. #define AUDIT_AVC_PATH        1402    /* dentry, vfsmount pair from avc */
  90. #define AUDIT_MAC_POLICY_LOAD    1403    /* Policy file load */
  91. #define AUDIT_MAC_STATUS    1404    /* Changed enforcing,permissive,off */
  92. #define AUDIT_MAC_CONFIG_CHANGE    1405    /* Changes to booleans */
  93.  
  94. #define AUDIT_FIRST_KERN_ANOM_MSG   1700
  95. #define AUDIT_LAST_KERN_ANOM_MSG    1799
  96. #define AUDIT_ANOM_PROMISCUOUS      1700 /* Device changed promiscuous mode */
  97.  
  98. #define AUDIT_KERNEL        2000    /* Asynchronous audit record. NOT A REQUEST. */
  99.  
  100. /* Rule flags */
  101. #define AUDIT_FILTER_USER    0x00    /* Apply rule to user-generated messages */
  102. #define AUDIT_FILTER_TASK    0x01    /* Apply rule at task creation (not syscall) */
  103. #define AUDIT_FILTER_ENTRY    0x02    /* Apply rule at syscall entry */
  104. #define AUDIT_FILTER_WATCH    0x03    /* Apply rule to file system watches */
  105. #define AUDIT_FILTER_EXIT    0x04    /* Apply rule at syscall exit */
  106. #define AUDIT_FILTER_TYPE    0x05    /* Apply rule at audit_log_start */
  107.  
  108. #define AUDIT_NR_FILTERS    6
  109.  
  110. #define AUDIT_FILTER_PREPEND    0x10    /* Prepend to front of list */
  111.  
  112. /* Rule actions */
  113. #define AUDIT_NEVER    0    /* Do not build context if rule matches */
  114. #define AUDIT_POSSIBLE 1    /* Build context if rule matches  */
  115. #define AUDIT_ALWAYS   2    /* Generate audit record if rule matches */
  116.  
  117. /* Rule structure sizes -- if these change, different AUDIT_ADD and
  118.  * AUDIT_LIST commands must be implemented. */
  119. #define AUDIT_MAX_FIELDS   64
  120. #define AUDIT_BITMASK_SIZE 64
  121. #define AUDIT_WORD(nr) ((__u32)((nr)/32))
  122. #define AUDIT_BIT(nr)  (1 << ((nr) - AUDIT_WORD(nr)*32))
  123.  
  124. /* This bitmask is used to validate user input.  It represents all bits that
  125.  * are currently used in an audit field constant understood by the kernel.
  126.  * If you are adding a new #define AUDIT_<whatever>, please ensure that
  127.  * AUDIT_UNUSED_BITS is updated if need be. */
  128. #define AUDIT_UNUSED_BITS    0x0FFFFC00
  129.  
  130.  
  131. /* Rule fields */
  132.                 /* These are useful when checking the
  133.                  * task structure at task creation time
  134.                  * (AUDIT_PER_TASK).  */
  135. #define AUDIT_PID    0
  136. #define AUDIT_UID    1
  137. #define AUDIT_EUID    2
  138. #define AUDIT_SUID    3
  139. #define AUDIT_FSUID    4
  140. #define AUDIT_GID    5
  141. #define AUDIT_EGID    6
  142. #define AUDIT_SGID    7
  143. #define AUDIT_FSGID    8
  144. #define AUDIT_LOGINUID    9
  145. #define AUDIT_PERS    10
  146. #define AUDIT_ARCH    11
  147. #define AUDIT_MSGTYPE    12
  148. #define AUDIT_SE_USER    13    /* security label user */
  149. #define AUDIT_SE_ROLE    14    /* security label role */
  150. #define AUDIT_SE_TYPE    15    /* security label type */
  151. #define AUDIT_SE_SEN    16    /* security label sensitivity label */
  152. #define AUDIT_SE_CLR    17    /* security label clearance label */
  153.  
  154.                 /* These are ONLY useful when checking
  155.                  * at syscall exit time (AUDIT_AT_EXIT). */
  156. #define AUDIT_DEVMAJOR    100
  157. #define AUDIT_DEVMINOR    101
  158. #define AUDIT_INODE    102
  159. #define AUDIT_EXIT    103
  160. #define AUDIT_SUCCESS   104    /* exit >= 0; value ignored */
  161.  
  162. #define AUDIT_ARG0      200
  163. #define AUDIT_ARG1      (AUDIT_ARG0+1)
  164. #define AUDIT_ARG2      (AUDIT_ARG0+2)
  165. #define AUDIT_ARG3      (AUDIT_ARG0+3)
  166.  
  167. #define AUDIT_NEGATE            0x80000000
  168.  
  169. /* These are the supported operators.
  170.  *    4  2  1
  171.  *    =  >  <
  172.  *    -------
  173.  *    0  0  0        0    nonsense
  174.  *    0  0  1        1    <
  175.  *    0  1  0        2    >
  176.  *    0  1  1        3    !=
  177.  *    1  0  0        4    =
  178.  *    1  0  1        5    <=
  179.  *    1  1  0        6    >=
  180.  *    1  1  1        7    all operators
  181.  */
  182. #define AUDIT_LESS_THAN            0x10000000
  183. #define AUDIT_GREATER_THAN        0x20000000
  184. #define AUDIT_NOT_EQUAL            0x30000000
  185. #define AUDIT_EQUAL            0x40000000
  186. #define AUDIT_LESS_THAN_OR_EQUAL    (AUDIT_LESS_THAN|AUDIT_EQUAL)
  187. #define AUDIT_GREATER_THAN_OR_EQUAL    (AUDIT_GREATER_THAN|AUDIT_EQUAL)
  188. #define AUDIT_OPERATORS            (AUDIT_EQUAL|AUDIT_NOT_EQUAL)
  189.  
  190. /* Status symbols */
  191.                 /* Mask values */
  192. #define AUDIT_STATUS_ENABLED        0x0001
  193. #define AUDIT_STATUS_FAILURE        0x0002
  194. #define AUDIT_STATUS_PID        0x0004
  195. #define AUDIT_STATUS_RATE_LIMIT        0x0008
  196. #define AUDIT_STATUS_BACKLOG_LIMIT    0x0010
  197.                 /* Failure-to-log actions */
  198. #define AUDIT_FAIL_SILENT    0
  199. #define AUDIT_FAIL_PRINTK    1
  200. #define AUDIT_FAIL_PANIC    2
  201.  
  202. /* distinguish syscall tables */
  203. #define __AUDIT_ARCH_64BIT 0x80000000
  204. #define __AUDIT_ARCH_LE       0x40000000
  205. #define AUDIT_ARCH_ALPHA    (EM_ALPHA|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
  206. #define AUDIT_ARCH_ARM        (EM_ARM|__AUDIT_ARCH_LE)
  207. #define AUDIT_ARCH_ARMEB    (EM_ARM)
  208. #define AUDIT_ARCH_CRIS        (EM_CRIS|__AUDIT_ARCH_LE)
  209. #define AUDIT_ARCH_FRV        (EM_FRV)
  210. #define AUDIT_ARCH_H8300    (EM_H8_300)
  211. #define AUDIT_ARCH_I386        (EM_386|__AUDIT_ARCH_LE)
  212. #define AUDIT_ARCH_IA64        (EM_IA_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
  213. #define AUDIT_ARCH_M32R        (EM_M32R)
  214. #define AUDIT_ARCH_M68K        (EM_68K)
  215. #define AUDIT_ARCH_MIPS        (EM_MIPS)
  216. #define AUDIT_ARCH_MIPSEL    (EM_MIPS|__AUDIT_ARCH_LE)
  217. #define AUDIT_ARCH_MIPS64    (EM_MIPS|__AUDIT_ARCH_64BIT)
  218. #define AUDIT_ARCH_MIPSEL64    (EM_MIPS|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
  219. #define AUDIT_ARCH_PARISC    (EM_PARISC)
  220. #define AUDIT_ARCH_PARISC64    (EM_PARISC|__AUDIT_ARCH_64BIT)
  221. #define AUDIT_ARCH_PPC        (EM_PPC)
  222. #define AUDIT_ARCH_PPC64    (EM_PPC64|__AUDIT_ARCH_64BIT)
  223. #define AUDIT_ARCH_S390        (EM_S390)
  224. #define AUDIT_ARCH_S390X    (EM_S390|__AUDIT_ARCH_64BIT)
  225. #define AUDIT_ARCH_SH        (EM_SH)
  226. #define AUDIT_ARCH_SHEL        (EM_SH|__AUDIT_ARCH_LE)
  227. #define AUDIT_ARCH_SH64        (EM_SH|__AUDIT_ARCH_64BIT)
  228. #define AUDIT_ARCH_SHEL64    (EM_SH|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
  229. #define AUDIT_ARCH_SPARC    (EM_SPARC)
  230. #define AUDIT_ARCH_SPARC64    (EM_SPARCV9|__AUDIT_ARCH_64BIT)
  231. #define AUDIT_ARCH_V850        (EM_V850|__AUDIT_ARCH_LE)
  232. #define AUDIT_ARCH_X86_64    (EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
  233.  
  234. struct audit_status {
  235.     __u32        mask;        /* Bit mask for valid entries */
  236.     __u32        enabled;    /* 1 = enabled, 0 = disabled */
  237.     __u32        failure;    /* Failure-to-log action */
  238.     __u32        pid;        /* pid of auditd process */
  239.     __u32        rate_limit;    /* messages rate limit (per second) */
  240.     __u32        backlog_limit;    /* waiting messages limit */
  241.     __u32        lost;        /* messages lost */
  242.     __u32        backlog;    /* messages waiting in queue */
  243. };
  244.  
  245. /* audit_rule_data supports filter rules with both integer and string
  246.  * fields.  It corresponds with AUDIT_ADD_RULE, AUDIT_DEL_RULE and
  247.  * AUDIT_LIST_RULES requests.
  248.  */
  249. struct audit_rule_data {
  250.     __u32        flags;    /* AUDIT_PER_{TASK,CALL}, AUDIT_PREPEND */
  251.     __u32        action;    /* AUDIT_NEVER, AUDIT_POSSIBLE, AUDIT_ALWAYS */
  252.     __u32        field_count;
  253.     __u32        mask[AUDIT_BITMASK_SIZE]; /* syscall(s) affected */
  254.     __u32        fields[AUDIT_MAX_FIELDS];
  255.     __u32        values[AUDIT_MAX_FIELDS];
  256.     __u32        fieldflags[AUDIT_MAX_FIELDS];
  257.     __u32        buflen;    /* total length of string fields */
  258.     char        buf[0];    /* string fields buffer */
  259. };
  260.  
  261. /* audit_rule is supported to maintain backward compatibility with
  262.  * userspace.  It supports integer fields only and corresponds to
  263.  * AUDIT_ADD, AUDIT_DEL and AUDIT_LIST requests.
  264.  */
  265. struct audit_rule {        /* for AUDIT_LIST, AUDIT_ADD, and AUDIT_DEL */
  266.     __u32        flags;    /* AUDIT_PER_{TASK,CALL}, AUDIT_PREPEND */
  267.     __u32        action;    /* AUDIT_NEVER, AUDIT_POSSIBLE, AUDIT_ALWAYS */
  268.     __u32        field_count;
  269.     __u32        mask[AUDIT_BITMASK_SIZE];
  270.     __u32        fields[AUDIT_MAX_FIELDS];
  271.     __u32        values[AUDIT_MAX_FIELDS];
  272. };
  273.  
  274. #ifdef __KERNEL__
  275. #include <linux/sched.h>
  276.  
  277. struct audit_sig_info {
  278.     uid_t        uid;
  279.     pid_t        pid;
  280. };
  281.  
  282. struct audit_buffer;
  283. struct audit_context;
  284. struct inode;
  285. struct netlink_skb_parms;
  286.  
  287. #define AUDITSC_INVALID 0
  288. #define AUDITSC_SUCCESS 1
  289. #define AUDITSC_FAILURE 2
  290. #define AUDITSC_RESULT(x) ( ((long)(x))<0?AUDITSC_FAILURE:AUDITSC_SUCCESS )
  291. #ifdef CONFIG_AUDITSYSCALL
  292. /* These are defined in auditsc.c */
  293.                 /* Public API */
  294. extern int  audit_alloc(struct task_struct *task);
  295. extern void audit_free(struct task_struct *task);
  296. extern void audit_syscall_entry(int arch,
  297.                 int major, unsigned long a0, unsigned long a1,
  298.                 unsigned long a2, unsigned long a3);
  299. extern void audit_syscall_exit(int failed, long return_code);
  300. extern void audit_getname(const char *name);
  301. extern void audit_putname(const char *name);
  302. extern void __audit_inode(const char *name, const struct inode *inode, unsigned flags);
  303. extern void __audit_inode_child(const char *dname, const struct inode *inode,
  304.                 unsigned long pino);
  305. static inline void audit_inode(const char *name, const struct inode *inode,
  306.                    unsigned flags) {
  307.     if (unlikely(current->audit_context))
  308.         __audit_inode(name, inode, flags);
  309. }
  310. static inline void audit_inode_child(const char *dname, 
  311.                      const struct inode *inode, 
  312.                      unsigned long pino) {
  313.     if (unlikely(current->audit_context))
  314.         __audit_inode_child(dname, inode, pino);
  315. }
  316.  
  317.                 /* Private API (for audit.c only) */
  318. extern unsigned int audit_serial(void);
  319. extern void auditsc_get_stamp(struct audit_context *ctx,
  320.                   struct timespec *t, unsigned int *serial);
  321. extern int  audit_set_loginuid(struct task_struct *task, uid_t loginuid);
  322. extern uid_t audit_get_loginuid(struct audit_context *ctx);
  323. extern int audit_ipc_obj(struct kern_ipc_perm *ipcp);
  324. extern int audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode, struct kern_ipc_perm *ipcp);
  325. extern int audit_socketcall(int nargs, unsigned long *args);
  326. extern int audit_sockaddr(int len, void *addr);
  327. extern int audit_avc_path(struct dentry *dentry, struct vfsmount *mnt);
  328. extern void audit_signal_info(int sig, struct task_struct *t);
  329. extern int audit_set_macxattr(const char *name);
  330. #else
  331. #define audit_alloc(t) ({ 0; })
  332. #define audit_free(t) do { ; } while (0)
  333. #define audit_syscall_entry(ta,a,b,c,d,e) do { ; } while (0)
  334. #define audit_syscall_exit(f,r) do { ; } while (0)
  335. #define audit_getname(n) do { ; } while (0)
  336. #define audit_putname(n) do { ; } while (0)
  337. #define __audit_inode(n,i,f) do { ; } while (0)
  338. #define __audit_inode_child(d,i,p) do { ; } while (0)
  339. #define audit_inode(n,i,f) do { ; } while (0)
  340. #define audit_inode_child(d,i,p) do { ; } while (0)
  341. #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0)
  342. #define audit_get_loginuid(c) ({ -1; })
  343. #define audit_ipc_obj(i) ({ 0; })
  344. #define audit_ipc_set_perm(q,u,g,m,i) ({ 0; })
  345. #define audit_socketcall(n,a) ({ 0; })
  346. #define audit_sockaddr(len, addr) ({ 0; })
  347. #define audit_avc_path(dentry, mnt) ({ 0; })
  348. #define audit_signal_info(s,t) do { ; } while (0)
  349. #define audit_set_macxattr(n) do { ; } while (0)
  350. #endif
  351.  
  352. #ifdef CONFIG_AUDIT
  353. /* These are defined in audit.c */
  354.                 /* Public API */
  355. extern void            audit_log(struct audit_context *ctx, gfp_t gfp_mask,
  356.                       int type, const char *fmt, ...)
  357.                       __attribute__((format(printf,4,5)));
  358.  
  359. extern struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask, int type);
  360. extern void            audit_log_format(struct audit_buffer *ab,
  361.                          const char *fmt, ...)
  362.                 __attribute__((format(printf,2,3)));
  363. extern void            audit_log_end(struct audit_buffer *ab);
  364. extern void            audit_log_hex(struct audit_buffer *ab,
  365.                       const unsigned char *buf,
  366.                       size_t len);
  367. extern void            audit_log_untrustedstring(struct audit_buffer *ab,
  368.                               const char *string);
  369. extern void            audit_log_d_path(struct audit_buffer *ab,
  370.                          const char *prefix,
  371.                          struct dentry *dentry,
  372.                          struct vfsmount *vfsmnt);
  373.                 /* Private API (for audit.c only) */
  374. extern int audit_filter_user(struct netlink_skb_parms *cb, int type);
  375. extern int audit_filter_type(int type);
  376. extern int  audit_receive_filter(int type, int pid, int uid, int seq,
  377.              void *data, size_t datasz, uid_t loginuid, u32 sid);
  378. #else
  379. #define audit_log(c,g,t,f,...) do { ; } while (0)
  380. #define audit_log_start(c,g,t) ({ NULL; })
  381. #define audit_log_vformat(b,f,a) do { ; } while (0)
  382. #define audit_log_format(b,f,...) do { ; } while (0)
  383. #define audit_log_end(b) do { ; } while (0)
  384. #define audit_log_hex(a,b,l) do { ; } while (0)
  385. #define audit_log_untrustedstring(a,s) do { ; } while (0)
  386. #define audit_log_d_path(b,p,d,v) do { ; } while (0)
  387. #define audit_panic(m) do { ; } while (0)
  388. #endif
  389. #endif
  390. #endif
  391.