aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorChris Wright <chrisw@osdl.org>2005-04-29 12:19:14 -0400
committer <dwmw2@shinybook.infradead.org>2005-04-29 12:19:14 -0400
commit37509e749dc2072e667db806ef24b9e897f61b8a (patch)
tree62e8c43ba360a9d0584822b06126284e4db428b8 /kernel
parentc94c257c88c517f251da273a15c654224c7b6e21 (diff)
[AUDIT] Requeue messages at head of queue, up to audit_backlog
If netlink_unicast() fails, requeue the skb back at the head of the queue it just came from, instead of the tail. And do so unless we've exceeded the audit_backlog limit; not according to some other arbitrary limit. From: Chris Wright <chrisw@osdl.org> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/audit.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/kernel/audit.c b/kernel/audit.c
index 587d3b2eba7f..4a697c73faec 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
@@ -142,7 +142,6 @@ struct audit_buffer {
142 int total; 142 int total;
143 int type; 143 int type;
144 int pid; 144 int pid;
145 int count; /* Times requeued */
146}; 145};
147 146
148void audit_set_type(struct audit_buffer *ab, int type) 147void audit_set_type(struct audit_buffer *ab, int type)
@@ -526,9 +525,9 @@ static inline int audit_log_drain(struct audit_buffer *ab)
526 retval = netlink_unicast(audit_sock, skb, audit_pid, 525 retval = netlink_unicast(audit_sock, skb, audit_pid,
527 MSG_DONTWAIT); 526 MSG_DONTWAIT);
528 } 527 }
529 if (retval == -EAGAIN && ab->count < 5) { 528 if (retval == -EAGAIN &&
530 ++ab->count; 529 (atomic_read(&audit_backlog)) < audit_backlog_limit) {
531 skb_queue_tail(&ab->sklist, skb); 530 skb_queue_head(&ab->sklist, skb);
532 audit_log_end_irq(ab); 531 audit_log_end_irq(ab);
533 return 1; 532 return 1;
534 } 533 }
@@ -666,7 +665,6 @@ struct audit_buffer *audit_log_start(struct audit_context *ctx)
666 ab->total = 0; 665 ab->total = 0;
667 ab->type = AUDIT_KERNEL; 666 ab->type = AUDIT_KERNEL;
668 ab->pid = 0; 667 ab->pid = 0;
669 ab->count = 0;
670 668
671#ifdef CONFIG_AUDITSYSCALL 669#ifdef CONFIG_AUDITSYSCALL
672 if (ab->ctx) 670 if (ab->ctx)