diff options
author | Eric Paris <eparis@redhat.com> | 2012-01-03 14:23:07 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-01-17 16:16:59 -0500 |
commit | efaffd6e4417860c67576ac760dd6e8bbd15f006 (patch) | |
tree | a59ee886b609bbf761fb75744e5e468264c67ab5 /kernel/auditsc.c | |
parent | 6422e78de6880c66a82af512d9bd0c85eb62e661 (diff) |
audit: allow matching on obj_uid
Allow syscall exit filter matching based on the uid of the owner of an
inode used in a syscall. aka:
auditctl -a always,exit -S open -F obj_uid=0 -F perm=wa
Signed-off-by: Eric Paris <eparis@redhat.com>
Diffstat (limited to 'kernel/auditsc.c')
-rw-r--r-- | kernel/auditsc.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 4d8920f5ab88..5cf3ecc01517 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c | |||
@@ -586,6 +586,18 @@ static int audit_filter_rules(struct task_struct *tsk, | |||
586 | } | 586 | } |
587 | } | 587 | } |
588 | break; | 588 | break; |
589 | case AUDIT_OBJ_UID: | ||
590 | if (name) { | ||
591 | result = audit_comparator(name->uid, f->op, f->val); | ||
592 | } else if (ctx) { | ||
593 | list_for_each_entry(n, &ctx->names_list, list) { | ||
594 | if (audit_comparator(n->uid, f->op, f->val)) { | ||
595 | ++result; | ||
596 | break; | ||
597 | } | ||
598 | } | ||
599 | } | ||
600 | break; | ||
589 | case AUDIT_WATCH: | 601 | case AUDIT_WATCH: |
590 | if (name) | 602 | if (name) |
591 | result = audit_watch_compare(rule->watch, name->ino, name->dev); | 603 | result = audit_watch_compare(rule->watch, name->ino, name->dev); |