diff options
-rw-r--r-- | kernel/audit.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/kernel/audit.c b/kernel/audit.c index 6cd2ecca705b..09e287b1dc0e 100644 --- a/kernel/audit.c +++ b/kernel/audit.c | |||
@@ -1209,18 +1209,21 @@ static inline void audit_get_stamp(struct audit_context *ctx, | |||
1209 | /* | 1209 | /* |
1210 | * Wait for auditd to drain the queue a little | 1210 | * Wait for auditd to drain the queue a little |
1211 | */ | 1211 | */ |
1212 | static void wait_for_auditd(unsigned long sleep_time) | 1212 | static unsigned long wait_for_auditd(unsigned long sleep_time) |
1213 | { | 1213 | { |
1214 | unsigned long timeout = sleep_time; | ||
1214 | DECLARE_WAITQUEUE(wait, current); | 1215 | DECLARE_WAITQUEUE(wait, current); |
1215 | set_current_state(TASK_UNINTERRUPTIBLE); | 1216 | set_current_state(TASK_UNINTERRUPTIBLE); |
1216 | add_wait_queue(&audit_backlog_wait, &wait); | 1217 | add_wait_queue(&audit_backlog_wait, &wait); |
1217 | 1218 | ||
1218 | if (audit_backlog_limit && | 1219 | if (audit_backlog_limit && |
1219 | skb_queue_len(&audit_skb_queue) > audit_backlog_limit) | 1220 | skb_queue_len(&audit_skb_queue) > audit_backlog_limit) |
1220 | schedule_timeout(sleep_time); | 1221 | timeout = schedule_timeout(sleep_time); |
1221 | 1222 | ||
1222 | __set_current_state(TASK_RUNNING); | 1223 | __set_current_state(TASK_RUNNING); |
1223 | remove_wait_queue(&audit_backlog_wait, &wait); | 1224 | remove_wait_queue(&audit_backlog_wait, &wait); |
1225 | |||
1226 | return timeout; | ||
1224 | } | 1227 | } |
1225 | 1228 | ||
1226 | /** | 1229 | /** |
@@ -1267,8 +1270,9 @@ struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask, | |||
1267 | sleep_time = timeout_start + audit_backlog_wait_time - | 1270 | sleep_time = timeout_start + audit_backlog_wait_time - |
1268 | jiffies; | 1271 | jiffies; |
1269 | if ((long)sleep_time > 0) { | 1272 | if ((long)sleep_time > 0) { |
1270 | wait_for_auditd(sleep_time); | 1273 | sleep_time = wait_for_auditd(sleep_time); |
1271 | continue; | 1274 | if ((long)sleep_time > 0) |
1275 | continue; | ||
1272 | } | 1276 | } |
1273 | } | 1277 | } |
1274 | if (audit_rate_check() && printk_ratelimit()) | 1278 | if (audit_rate_check() && printk_ratelimit()) |