diff options
Diffstat (limited to 'kernel/audit_tree.c')
-rw-r--r-- | kernel/audit_tree.c | 19 |
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 | ||
527 | static void audit_tree_log_remove_rule(struct audit_krule *rule) | 527 | static 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 | ||
543 | static void kill_rules(struct audit_tree *tree) | 544 | static 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 | */ |
976 | void audit_kill_trees(struct list_head *list) | 977 | void 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 { |