History

[PATCH] minor audit updates

Just a few minor proposed updates. Only the last one will actually affect behavior. The rest are just misleading code. Several AUDIT_SET functions return 'old' value, but only return value <0 is checked for. So just return 0. propagate audit_set_rate_limit and audit_set_backlog_limit error values In audit_buffer_free, the audit_freelist_count was being incremented even when we discard the return buffer, so audit_freelist_count can end up wrong. This could cause the actual freelist to shrink over time, eventually threatening to degrate audit performance.

Serge E. Hallyn committed 20 years ago

Commit 5d136a01 parent 0a3b4831 file · +10 −9Browse files

Unified · Split

kernel/audit.c+10−9
@@ -251,7 +251,7 @@ static int audit_set_rate_limit(int limit, uid_t loginuid, u32 sid) · 250 unmodified lines
251251 "audit_rate_limit=%d old=%d by auid=%u",
252252 limit, old, loginuid);
253253 audit_rate_limit = limit;
254− return old;
254+ return 0;
255255 }
256256
257257 static int audit_set_backlog_limit(int limit, uid_t loginuid, u32 sid)
@@ -274,7 +274,7 @@ static int audit_set_backlog_limit(int limit, uid_t loginuid, u32 sid) · 16 unmodified lines
274274 "audit_backlog_limit=%d old=%d by auid=%u",
275275 limit, old, loginuid);
276276 audit_backlog_limit = limit;
277− return old;
277+ return 0;
278278 }
279279
280280 static int audit_set_enabled(int state, uid_t loginuid, u32 sid)
@@ -300,7 +300,7 @@ static int audit_set_enabled(int state, uid_t loginuid, u32 sid) · 19 unmodified lines
300300 "audit_enabled=%d old=%d by auid=%u",
301301 state, old, loginuid);
302302 audit_enabled = state;
303− return old;
303+ return 0;
304304 }
305305
306306 static int audit_set_failure(int state, uid_t loginuid, u32 sid)
@@ -328,7 +328,7 @@ static int audit_set_failure(int state, uid_t loginuid, u32 sid) · 21 unmodified lines
328328 "audit_failure=%d old=%d by auid=%u",
329329 state, old, loginuid);
330330 audit_failure = state;
331− return old;
331+ return 0;
332332 }
333333
334334 static int kauditd_thread(void *dummy)
@@ -364,7 +364,6 @@ static int kauditd_thread(void *dummy) · 29 unmodified lines
364364 remove_wait_queue(&kauditd_wait, &wait);
365365 }
366366 }
367− return 0;
368367 }
369368
370369 int audit_send_list(void *_dest)
@@ -551,10 +550,10 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) · 180 unmodified lines
551550 audit_pid = status_get->pid;
552551 }
553552 if (status_get->mask & AUDIT_STATUS_RATE_LIMIT)
554− audit_set_rate_limit(status_get->rate_limit,
553+ err = audit_set_rate_limit(status_get->rate_limit,
555554 loginuid, sid);
556555 if (status_get->mask & AUDIT_STATUS_BACKLOG_LIMIT)
557− audit_set_backlog_limit(status_get->backlog_limit,
556+ err = audit_set_backlog_limit(status_get->backlog_limit,
558557 loginuid, sid);
559558 break;
560559 case AUDIT_USER:
@@ -727,10 +726,12 @@ static void audit_buffer_free(struct audit_buffer *ab) · 166 unmodified lines
727726 kfree_skb(ab->skb);
728727
729728 spin_lock_irqsave(&audit_freelist_lock, flags);
730− if (++audit_freelist_count > AUDIT_MAXFREE)
729+ if (audit_freelist_count > AUDIT_MAXFREE)
731730 kfree(ab);
732− else
731+ else {
732+ audit_freelist_count++;
733733 list_add(&ab->list, &audit_freelist);
734+ }
734735 spin_unlock_irqrestore(&audit_freelist_lock, flags);
735736 }
736737