aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Paris <eparis@redhat.com>2012-01-03 14:23:07 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2012-01-17 16:16:59 -0500
commit54d3218b31aee5bc9c859ae60fbde933d922448b (patch)
treeebc383920713c283133d885191d0c19cb049afd2
parentefaffd6e4417860c67576ac760dd6e8bbd15f006 (diff)
audit: allow audit matching on inode gid
Much like the ability to filter audit on the uid of an inode collected, we should be able to filter on the gid of the inode. Signed-off-by: Eric Paris <eparis@redhat.com>
-rw-r--r--include/linux/audit.h1
-rw-r--r--kernel/auditfilter.c1
-rw-r--r--kernel/auditsc.c12
3 files changed, 14 insertions, 0 deletions
diff --git a/include/linux/audit.h b/include/linux/audit.h
index 55cb3daaf474..e36aa37c88af 100644
--- a/include/linux/audit.h
+++ b/include/linux/audit.h
@@ -224,6 +224,7 @@
224#define AUDIT_DIR 107 224#define AUDIT_DIR 107
225#define AUDIT_FILETYPE 108 225#define AUDIT_FILETYPE 108
226#define AUDIT_OBJ_UID 109 226#define AUDIT_OBJ_UID 109
227#define AUDIT_OBJ_GID 110
227 228
228#define AUDIT_ARG0 200 229#define AUDIT_ARG0 200
229#define AUDIT_ARG1 (AUDIT_ARG0+1) 230#define AUDIT_ARG1 (AUDIT_ARG0+1)
diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
index 13e997423dcd..f10605c787e6 100644
--- a/kernel/auditfilter.c
+++ b/kernel/auditfilter.c
@@ -462,6 +462,7 @@ static struct audit_entry *audit_data_to_entry(struct audit_rule_data *data,
462 case AUDIT_ARG2: 462 case AUDIT_ARG2:
463 case AUDIT_ARG3: 463 case AUDIT_ARG3:
464 case AUDIT_OBJ_UID: 464 case AUDIT_OBJ_UID:
465 case AUDIT_OBJ_GID:
465 break; 466 break;
466 case AUDIT_ARCH: 467 case AUDIT_ARCH:
467 entry->rule.arch_f = f; 468 entry->rule.arch_f = f;
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index 5cf3ecc01517..87b375fb12ff 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -598,6 +598,18 @@ static int audit_filter_rules(struct task_struct *tsk,
598 } 598 }
599 } 599 }
600 break; 600 break;
601 case AUDIT_OBJ_GID:
602 if (name) {
603 result = audit_comparator(name->gid, f->op, f->val);
604 } else if (ctx) {
605 list_for_each_entry(n, &ctx->names_list, list) {
606 if (audit_comparator(n->gid, f->op, f->val)) {
607 ++result;
608 break;
609 }
610 }
611 }
612 break;
601 case AUDIT_WATCH: 613 case AUDIT_WATCH:
602 if (name) 614 if (name)
603 result = audit_watch_compare(rule->watch, name->ino, name->dev); 615 result = audit_watch_compare(rule->watch, name->ino, name->dev);