diff options
Diffstat (limited to 'kernel/audit.c')
-rw-r--r-- | kernel/audit.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/kernel/audit.c b/kernel/audit.c index 2eeea9a14240..10c4930c2bbf 100644 --- a/kernel/audit.c +++ b/kernel/audit.c | |||
@@ -170,7 +170,9 @@ void audit_panic(const char *message) | |||
170 | printk(KERN_ERR "audit: %s\n", message); | 170 | printk(KERN_ERR "audit: %s\n", message); |
171 | break; | 171 | break; |
172 | case AUDIT_FAIL_PANIC: | 172 | case AUDIT_FAIL_PANIC: |
173 | panic("audit: %s\n", message); | 173 | /* test audit_pid since printk is always losey, why bother? */ |
174 | if (audit_pid) | ||
175 | panic("audit: %s\n", message); | ||
174 | break; | 176 | break; |
175 | } | 177 | } |
176 | } | 178 | } |
@@ -352,6 +354,7 @@ static int kauditd_thread(void *dummy) | |||
352 | if (err < 0) { | 354 | if (err < 0) { |
353 | BUG_ON(err != -ECONNREFUSED); /* Shoudn't happen */ | 355 | BUG_ON(err != -ECONNREFUSED); /* Shoudn't happen */ |
354 | printk(KERN_ERR "audit: *NO* daemon at audit_pid=%d\n", audit_pid); | 356 | printk(KERN_ERR "audit: *NO* daemon at audit_pid=%d\n", audit_pid); |
357 | audit_log_lost("auditd dissapeared\n"); | ||
355 | audit_pid = 0; | 358 | audit_pid = 0; |
356 | } | 359 | } |
357 | } else { | 360 | } else { |
@@ -1350,17 +1353,19 @@ void audit_log_end(struct audit_buffer *ab) | |||
1350 | if (!audit_rate_check()) { | 1353 | if (!audit_rate_check()) { |
1351 | audit_log_lost("rate limit exceeded"); | 1354 | audit_log_lost("rate limit exceeded"); |
1352 | } else { | 1355 | } else { |
1356 | struct nlmsghdr *nlh = nlmsg_hdr(ab->skb); | ||
1353 | if (audit_pid) { | 1357 | if (audit_pid) { |
1354 | struct nlmsghdr *nlh = nlmsg_hdr(ab->skb); | ||
1355 | nlh->nlmsg_len = ab->skb->len - NLMSG_SPACE(0); | 1358 | nlh->nlmsg_len = ab->skb->len - NLMSG_SPACE(0); |
1356 | skb_queue_tail(&audit_skb_queue, ab->skb); | 1359 | skb_queue_tail(&audit_skb_queue, ab->skb); |
1357 | ab->skb = NULL; | 1360 | ab->skb = NULL; |
1358 | wake_up_interruptible(&kauditd_wait); | 1361 | wake_up_interruptible(&kauditd_wait); |
1359 | } else if (printk_ratelimit()) { | 1362 | } else if (nlh->nlmsg_type != AUDIT_EOE) { |
1360 | struct nlmsghdr *nlh = nlmsg_hdr(ab->skb); | 1363 | if (printk_ratelimit()) { |
1361 | printk(KERN_NOTICE "type=%d %s\n", nlh->nlmsg_type, ab->skb->data + NLMSG_SPACE(0)); | 1364 | printk(KERN_NOTICE "type=%d %s\n", |
1362 | } else { | 1365 | nlh->nlmsg_type, |
1363 | audit_log_lost("printk limit exceeded\n"); | 1366 | ab->skb->data + NLMSG_SPACE(0)); |
1367 | } else | ||
1368 | audit_log_lost("printk limit exceeded\n"); | ||
1364 | } | 1369 | } |
1365 | } | 1370 | } |
1366 | audit_buffer_free(ab); | 1371 | audit_buffer_free(ab); |