summaryrefslogtreecommitdiffstats
path: root/kernel/audit_tree.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/audit_tree.c')
-rw-r--r--kernel/audit_tree.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/kernel/audit_tree.c b/kernel/audit_tree.c
index d4af4d97f847..abfb112f26aa 100644
--- a/kernel/audit_tree.c
+++ b/kernel/audit_tree.c
@@ -524,13 +524,14 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)
524 return 0; 524 return 0;
525} 525}
526 526
527static void audit_tree_log_remove_rule(struct audit_krule *rule) 527static void audit_tree_log_remove_rule(struct audit_context *context,
528 struct audit_krule *rule)
528{ 529{
529 struct audit_buffer *ab; 530 struct audit_buffer *ab;
530 531
531 if (!audit_enabled) 532 if (!audit_enabled)
532 return; 533 return;
533 ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE); 534 ab = audit_log_start(context, GFP_KERNEL, AUDIT_CONFIG_CHANGE);
534 if (unlikely(!ab)) 535 if (unlikely(!ab))
535 return; 536 return;
536 audit_log_format(ab, "op=remove_rule dir="); 537 audit_log_format(ab, "op=remove_rule dir=");
@@ -540,7 +541,7 @@ static void audit_tree_log_remove_rule(struct audit_krule *rule)
540 audit_log_end(ab); 541 audit_log_end(ab);
541} 542}
542 543
543static void kill_rules(struct audit_tree *tree) 544static void kill_rules(struct audit_context *context, struct audit_tree *tree)
544{ 545{
545 struct audit_krule *rule, *next; 546 struct audit_krule *rule, *next;
546 struct audit_entry *entry; 547 struct audit_entry *entry;
@@ -551,7 +552,7 @@ static void kill_rules(struct audit_tree *tree)
551 list_del_init(&rule->rlist); 552 list_del_init(&rule->rlist);
552 if (rule->tree) { 553 if (rule->tree) {
553 /* not a half-baked one */ 554 /* not a half-baked one */
554 audit_tree_log_remove_rule(rule); 555 audit_tree_log_remove_rule(context, rule);
555 if (entry->rule.exe) 556 if (entry->rule.exe)
556 audit_remove_mark(entry->rule.exe); 557 audit_remove_mark(entry->rule.exe);
557 rule->tree = NULL; 558 rule->tree = NULL;
@@ -633,7 +634,7 @@ static void trim_marked(struct audit_tree *tree)
633 tree->goner = 1; 634 tree->goner = 1;
634 spin_unlock(&hash_lock); 635 spin_unlock(&hash_lock);
635 mutex_lock(&audit_filter_mutex); 636 mutex_lock(&audit_filter_mutex);
636 kill_rules(tree); 637 kill_rules(audit_context(), tree);
637 list_del_init(&tree->list); 638 list_del_init(&tree->list);
638 mutex_unlock(&audit_filter_mutex); 639 mutex_unlock(&audit_filter_mutex);
639 prune_one(tree); 640 prune_one(tree);
@@ -973,8 +974,10 @@ static void audit_schedule_prune(void)
973 * ... and that one is done if evict_chunk() decides to delay until the end 974 * ... and that one is done if evict_chunk() decides to delay until the end
974 * of syscall. Runs synchronously. 975 * of syscall. Runs synchronously.
975 */ 976 */
976void audit_kill_trees(struct list_head *list) 977void audit_kill_trees(struct audit_context *context)
977{ 978{
979 struct list_head *list = &context->killed_trees;
980
978 audit_ctl_lock(); 981 audit_ctl_lock();
979 mutex_lock(&audit_filter_mutex); 982 mutex_lock(&audit_filter_mutex);
980 983
@@ -982,7 +985,7 @@ void audit_kill_trees(struct list_head *list)
982 struct audit_tree *victim; 985 struct audit_tree *victim;
983 986
984 victim = list_entry(list->next, struct audit_tree, list); 987 victim = list_entry(list->next, struct audit_tree, list);
985 kill_rules(victim); 988 kill_rules(context, victim);
986 list_del_init(&victim->list); 989 list_del_init(&victim->list);
987 990
988 mutex_unlock(&audit_filter_mutex); 991 mutex_unlock(&audit_filter_mutex);
@@ -1017,7 +1020,7 @@ static void evict_chunk(struct audit_chunk *chunk)
1017 list_del_init(&owner->same_root); 1020 list_del_init(&owner->same_root);
1018 spin_unlock(&hash_lock); 1021 spin_unlock(&hash_lock);
1019 if (!postponed) { 1022 if (!postponed) {
1020 kill_rules(owner); 1023 kill_rules(audit_context(), owner);
1021 list_move(&owner->list, &prune_list); 1024 list_move(&owner->list, &prune_list);
1022 need_prune = 1; 1025 need_prune = 1;
1023 } else { 1026 } else {