diff options
author | Steve Grubb <sgrubb@redhat.com> | 2006-04-11 08:50:56 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2006-05-01 06:10:07 -0400 |
commit | 2ad312d2093ae506ae0fa184d8d026b559083087 (patch) | |
tree | 890337ebca18ab31546b84a9831fb9c337e8e272 | |
parent | 073115d6b29c7910feaa08241c6484637f5ca958 (diff) |
[PATCH] Audit Filter Performance
While testing the watch performance, I noticed that selinux_task_ctxid()
was creeping into the results more than it should. Investigation showed
that the function call was being called whether it was needed or not. The
below patch fixes this.
Signed-off-by: Steve Grubb <sgrubb@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | kernel/auditsc.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index a300736ee037..1c03a4ed1b27 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c | |||
@@ -168,11 +168,9 @@ static int audit_filter_rules(struct task_struct *tsk, | |||
168 | struct audit_context *ctx, | 168 | struct audit_context *ctx, |
169 | enum audit_state *state) | 169 | enum audit_state *state) |
170 | { | 170 | { |
171 | int i, j; | 171 | int i, j, need_sid = 1; |
172 | u32 sid; | 172 | u32 sid; |
173 | 173 | ||
174 | selinux_task_ctxid(tsk, &sid); | ||
175 | |||
176 | for (i = 0; i < rule->field_count; i++) { | 174 | for (i = 0; i < rule->field_count; i++) { |
177 | struct audit_field *f = &rule->fields[i]; | 175 | struct audit_field *f = &rule->fields[i]; |
178 | int result = 0; | 176 | int result = 0; |
@@ -271,11 +269,16 @@ static int audit_filter_rules(struct task_struct *tsk, | |||
271 | match for now to avoid losing information that | 269 | match for now to avoid losing information that |
272 | may be wanted. An error message will also be | 270 | may be wanted. An error message will also be |
273 | logged upon error */ | 271 | logged upon error */ |
274 | if (f->se_rule) | 272 | if (f->se_rule) { |
273 | if (need_sid) { | ||
274 | selinux_task_ctxid(tsk, &sid); | ||
275 | need_sid = 0; | ||
276 | } | ||
275 | result = selinux_audit_rule_match(sid, f->type, | 277 | result = selinux_audit_rule_match(sid, f->type, |
276 | f->op, | 278 | f->op, |
277 | f->se_rule, | 279 | f->se_rule, |
278 | ctx); | 280 | ctx); |
281 | } | ||
279 | break; | 282 | break; |
280 | case AUDIT_ARG0: | 283 | case AUDIT_ARG0: |
281 | case AUDIT_ARG1: | 284 | case AUDIT_ARG1: |