diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2008-12-20 04:54:54 -0500 | 
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2008-12-20 04:54:54 -0500 | 
| commit | 93b8eef1c098efbea2f1fc0be7e3c681f259a7e7 (patch) | |
| tree | 462cc8c2bc07bbc825dab2a200891a28d8643329 /kernel/audit.c | |
| parent | a2d781fc8d9b16113dd9440107d73c0f21d7cbef (diff) | |
| parent | 929096fe9ff1f4b3645cf3919527ab47e8d5e17c (diff) | |
| download | olio-linux-3.10-93b8eef1c098efbea2f1fc0be7e3c681f259a7e7.tar.xz olio-linux-3.10-93b8eef1c098efbea2f1fc0be7e3c681f259a7e7.zip  | |
Merge commit 'v2.6.28-rc9' into next
Diffstat (limited to 'kernel/audit.c')
| -rw-r--r-- | kernel/audit.c | 32 | 
1 files changed, 22 insertions, 10 deletions
diff --git a/kernel/audit.c b/kernel/audit.c index 4414e93d875..ce6d8ea3131 100644 --- a/kernel/audit.c +++ b/kernel/audit.c @@ -61,8 +61,11 @@  #include "audit.h" -/* No auditing will take place until audit_initialized != 0. +/* No auditing will take place until audit_initialized == AUDIT_INITIALIZED.   * (Initialization happens after skb_init is called.) */ +#define AUDIT_DISABLED		-1 +#define AUDIT_UNINITIALIZED	0 +#define AUDIT_INITIALIZED	1  static int	audit_initialized;  #define AUDIT_OFF	0 @@ -965,6 +968,9 @@ static int __init audit_init(void)  {  	int i; +	if (audit_initialized == AUDIT_DISABLED) +		return 0; +  	printk(KERN_INFO "audit: initializing netlink socket (%s)\n",  	       audit_default ? "enabled" : "disabled");  	audit_sock = netlink_kernel_create(&init_net, NETLINK_AUDIT, 0, @@ -976,7 +982,7 @@ static int __init audit_init(void)  	skb_queue_head_init(&audit_skb_queue);  	skb_queue_head_init(&audit_skb_hold_queue); -	audit_initialized = 1; +	audit_initialized = AUDIT_INITIALIZED;  	audit_enabled = audit_default;  	audit_ever_enabled |= !!audit_default; @@ -999,13 +1005,21 @@ __initcall(audit_init);  static int __init audit_enable(char *str)  {  	audit_default = !!simple_strtol(str, NULL, 0); -	printk(KERN_INFO "audit: %s%s\n", -	       audit_default ? "enabled" : "disabled", -	       audit_initialized ? "" : " (after initialization)"); -	if (audit_initialized) { +	if (!audit_default) +		audit_initialized = AUDIT_DISABLED; + +	printk(KERN_INFO "audit: %s", audit_default ? "enabled" : "disabled"); + +	if (audit_initialized == AUDIT_INITIALIZED) {  		audit_enabled = audit_default;  		audit_ever_enabled |= !!audit_default; +	} else if (audit_initialized == AUDIT_UNINITIALIZED) { +		printk(" (after initialization)"); +	} else { +		printk(" (until reboot)");  	} +	printk("\n"); +  	return 1;  } @@ -1107,9 +1121,7 @@ unsigned int audit_serial(void)  static inline void audit_get_stamp(struct audit_context *ctx,  				   struct timespec *t, unsigned int *serial)  { -	if (ctx) -		auditsc_get_stamp(ctx, t, serial); -	else { +	if (!ctx || !auditsc_get_stamp(ctx, t, serial)) {  		*t = CURRENT_TIME;  		*serial = audit_serial();  	} @@ -1146,7 +1158,7 @@ struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask,  	int reserve;  	unsigned long timeout_start = jiffies; -	if (!audit_initialized) +	if (audit_initialized != AUDIT_INITIALIZED)  		return NULL;  	if (unlikely(audit_filter_type(type)))  |