diff options
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/audit.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/kernel/audit.c b/kernel/audit.c index 40b28b5183ea..57d47f08ed15 100644 --- a/kernel/audit.c +++ b/kernel/audit.c | |||
@@ -1281,21 +1281,20 @@ static inline void audit_get_stamp(struct audit_context *ctx, | |||
1281 | /* | 1281 | /* |
1282 | * Wait for auditd to drain the queue a little | 1282 | * Wait for auditd to drain the queue a little |
1283 | */ | 1283 | */ |
1284 | static unsigned long wait_for_auditd(unsigned long sleep_time) | 1284 | static long wait_for_auditd(long sleep_time) |
1285 | { | 1285 | { |
1286 | unsigned long timeout = sleep_time; | ||
1287 | DECLARE_WAITQUEUE(wait, current); | 1286 | DECLARE_WAITQUEUE(wait, current); |
1288 | set_current_state(TASK_UNINTERRUPTIBLE); | 1287 | set_current_state(TASK_UNINTERRUPTIBLE); |
1289 | add_wait_queue_exclusive(&audit_backlog_wait, &wait); | 1288 | add_wait_queue_exclusive(&audit_backlog_wait, &wait); |
1290 | 1289 | ||
1291 | if (audit_backlog_limit && | 1290 | if (audit_backlog_limit && |
1292 | skb_queue_len(&audit_skb_queue) > audit_backlog_limit) | 1291 | skb_queue_len(&audit_skb_queue) > audit_backlog_limit) |
1293 | timeout = schedule_timeout(sleep_time); | 1292 | sleep_time = schedule_timeout(sleep_time); |
1294 | 1293 | ||
1295 | __set_current_state(TASK_RUNNING); | 1294 | __set_current_state(TASK_RUNNING); |
1296 | remove_wait_queue(&audit_backlog_wait, &wait); | 1295 | remove_wait_queue(&audit_backlog_wait, &wait); |
1297 | 1296 | ||
1298 | return timeout; | 1297 | return sleep_time; |
1299 | } | 1298 | } |
1300 | 1299 | ||
1301 | /** | 1300 | /** |
@@ -1339,13 +1338,12 @@ struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask, | |||
1339 | while (audit_backlog_limit | 1338 | while (audit_backlog_limit |
1340 | && skb_queue_len(&audit_skb_queue) > audit_backlog_limit + reserve) { | 1339 | && skb_queue_len(&audit_skb_queue) > audit_backlog_limit + reserve) { |
1341 | if (gfp_mask & __GFP_WAIT && audit_backlog_wait_time) { | 1340 | if (gfp_mask & __GFP_WAIT && audit_backlog_wait_time) { |
1342 | unsigned long sleep_time; | 1341 | long sleep_time; |
1343 | 1342 | ||
1344 | sleep_time = timeout_start + audit_backlog_wait_time - | 1343 | sleep_time = timeout_start + audit_backlog_wait_time - jiffies; |
1345 | jiffies; | 1344 | if (sleep_time > 0) { |
1346 | if ((long)sleep_time > 0) { | ||
1347 | sleep_time = wait_for_auditd(sleep_time); | 1345 | sleep_time = wait_for_auditd(sleep_time); |
1348 | if ((long)sleep_time > 0) | 1346 | if (sleep_time > 0) |
1349 | continue; | 1347 | continue; |
1350 | } | 1348 | } |
1351 | } | 1349 | } |