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

Showing the changes to kernel (1 of 1 file). Show all

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
251 "audit_rate_limit=%d old=%d by auid=%u",251 "audit_rate_limit=%d old=%d by auid=%u",
252 limit, old, loginuid);252 limit, old, loginuid);
253 audit_rate_limit = limit;253 audit_rate_limit = limit;
254 return old;254 return 0;
255}255}
256 256
257static int audit_set_backlog_limit(int limit, uid_t loginuid, u32 sid)257static 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
274 "audit_backlog_limit=%d old=%d by auid=%u",274 "audit_backlog_limit=%d old=%d by auid=%u",
275 limit, old, loginuid);275 limit, old, loginuid);
276 audit_backlog_limit = limit;276 audit_backlog_limit = limit;
277 return old;277 return 0;
278}278}
279 279
280static int audit_set_enabled(int state, uid_t loginuid, u32 sid)280static 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
300 "audit_enabled=%d old=%d by auid=%u",300 "audit_enabled=%d old=%d by auid=%u",
301 state, old, loginuid);301 state, old, loginuid);
302 audit_enabled = state;302 audit_enabled = state;
303 return old;303 return 0;
304}304}
305 305
306static int audit_set_failure(int state, uid_t loginuid, u32 sid)306static 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
328 "audit_failure=%d old=%d by auid=%u",328 "audit_failure=%d old=%d by auid=%u",
329 state, old, loginuid);329 state, old, loginuid);
330 audit_failure = state;330 audit_failure = state;
331 return old;331 return 0;
332}332}
333 333
334static int kauditd_thread(void *dummy)334static int kauditd_thread(void *dummy)
@@ -364,7 +364,6 @@ static int kauditd_thread(void *dummy) · 29 unmodified lines
364 remove_wait_queue(&kauditd_wait, &wait);364 remove_wait_queue(&kauditd_wait, &wait);
365 }365 }
366 }366 }
367 return 0;
368}367}
369 368
370int audit_send_list(void *_dest)369int audit_send_list(void *_dest)
@@ -551,10 +550,10 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) · 180 unmodified lines
551 audit_pid = status_get->pid;550 audit_pid = status_get->pid;
552 }551 }
553 if (status_get->mask & AUDIT_STATUS_RATE_LIMIT)552 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,
555 loginuid, sid);554 loginuid, sid);
556 if (status_get->mask & AUDIT_STATUS_BACKLOG_LIMIT)555 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,
558 loginuid, sid);557 loginuid, sid);
559 break;558 break;
560 case AUDIT_USER:559 case AUDIT_USER:
@@ -727,10 +726,12 @@ static void audit_buffer_free(struct audit_buffer *ab) · 166 unmodified lines
727 kfree_skb(ab->skb);726 kfree_skb(ab->skb);
728 727
729 spin_lock_irqsave(&audit_freelist_lock, flags);728 spin_lock_irqsave(&audit_freelist_lock, flags);
730 if (++audit_freelist_count > AUDIT_MAXFREE)729 if (audit_freelist_count > AUDIT_MAXFREE)
731 kfree(ab);730 kfree(ab);
732 else731 else {
732 audit_freelist_count++;
733 list_add(&ab->list, &audit_freelist);733 list_add(&ab->list, &audit_freelist);
734 }
734 spin_unlock_irqrestore(&audit_freelist_lock, flags);735 spin_unlock_irqrestore(&audit_freelist_lock, flags);
735}736}
736 737