diff options
Diffstat (limited to 'kernel/audit.c')
-rw-r--r-- | kernel/audit.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/kernel/audit.c b/kernel/audit.c index 9e3e457ddfb5..c8555b180213 100644 --- a/kernel/audit.c +++ b/kernel/audit.c | |||
@@ -166,7 +166,8 @@ void audit_panic(const char *message) | |||
166 | case AUDIT_FAIL_SILENT: | 166 | case AUDIT_FAIL_SILENT: |
167 | break; | 167 | break; |
168 | case AUDIT_FAIL_PRINTK: | 168 | case AUDIT_FAIL_PRINTK: |
169 | printk(KERN_ERR "audit: %s\n", message); | 169 | if (printk_ratelimit()) |
170 | printk(KERN_ERR "audit: %s\n", message); | ||
170 | break; | 171 | break; |
171 | case AUDIT_FAIL_PANIC: | 172 | case AUDIT_FAIL_PANIC: |
172 | panic("audit: %s\n", message); | 173 | panic("audit: %s\n", message); |
@@ -234,11 +235,13 @@ void audit_log_lost(const char *message) | |||
234 | } | 235 | } |
235 | 236 | ||
236 | if (print) { | 237 | if (print) { |
237 | printk(KERN_WARNING | 238 | if (printk_ratelimit()) |
238 | "audit: audit_lost=%d audit_rate_limit=%d audit_backlog_limit=%d\n", | 239 | printk(KERN_WARNING |
239 | atomic_read(&audit_lost), | 240 | "audit: audit_lost=%d audit_rate_limit=%d " |
240 | audit_rate_limit, | 241 | "audit_backlog_limit=%d\n", |
241 | audit_backlog_limit); | 242 | atomic_read(&audit_lost), |
243 | audit_rate_limit, | ||
244 | audit_backlog_limit); | ||
242 | audit_panic(message); | 245 | audit_panic(message); |
243 | } | 246 | } |
244 | } | 247 | } |
@@ -352,7 +355,11 @@ static int kauditd_thread(void *dummy) | |||
352 | audit_pid = 0; | 355 | audit_pid = 0; |
353 | } | 356 | } |
354 | } else { | 357 | } else { |
355 | printk(KERN_NOTICE "%s\n", skb->data + NLMSG_SPACE(0)); | 358 | if (printk_ratelimit()) |
359 | printk(KERN_NOTICE "%s\n", skb->data + | ||
360 | NLMSG_SPACE(0)); | ||
361 | else | ||
362 | audit_log_lost("printk limit exceeded\n"); | ||
356 | kfree_skb(skb); | 363 | kfree_skb(skb); |
357 | } | 364 | } |
358 | } else { | 365 | } else { |
@@ -1066,7 +1073,7 @@ struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask, | |||
1066 | remove_wait_queue(&audit_backlog_wait, &wait); | 1073 | remove_wait_queue(&audit_backlog_wait, &wait); |
1067 | continue; | 1074 | continue; |
1068 | } | 1075 | } |
1069 | if (audit_rate_check()) | 1076 | if (audit_rate_check() && printk_ratelimit()) |
1070 | printk(KERN_WARNING | 1077 | printk(KERN_WARNING |
1071 | "audit: audit_backlog=%d > " | 1078 | "audit: audit_backlog=%d > " |
1072 | "audit_backlog_limit=%d\n", | 1079 | "audit_backlog_limit=%d\n", |
@@ -1349,9 +1356,11 @@ void audit_log_end(struct audit_buffer *ab) | |||
1349 | skb_queue_tail(&audit_skb_queue, ab->skb); | 1356 | skb_queue_tail(&audit_skb_queue, ab->skb); |
1350 | ab->skb = NULL; | 1357 | ab->skb = NULL; |
1351 | wake_up_interruptible(&kauditd_wait); | 1358 | wake_up_interruptible(&kauditd_wait); |
1352 | } else { | 1359 | } else if (printk_ratelimit()) { |
1353 | struct nlmsghdr *nlh = nlmsg_hdr(ab->skb); | 1360 | struct nlmsghdr *nlh = nlmsg_hdr(ab->skb); |
1354 | printk(KERN_NOTICE "type=%d %s\n", nlh->nlmsg_type, ab->skb->data + NLMSG_SPACE(0)); | 1361 | printk(KERN_NOTICE "type=%d %s\n", nlh->nlmsg_type, ab->skb->data + NLMSG_SPACE(0)); |
1362 | } else { | ||
1363 | audit_log_lost("printk limit exceeded\n"); | ||
1355 | } | 1364 | } |
1356 | } | 1365 | } |
1357 | audit_buffer_free(ab); | 1366 | audit_buffer_free(ab); |