diff options
Diffstat (limited to 'kernel/audit_tree.c')
| -rw-r--r-- | kernel/audit_tree.c | 26 | 
1 files changed, 17 insertions, 9 deletions
| diff --git a/kernel/audit_tree.c b/kernel/audit_tree.c index e81175ef25f8..642a89c4f3d6 100644 --- a/kernel/audit_tree.c +++ b/kernel/audit_tree.c @@ -449,11 +449,26 @@ static int tag_chunk(struct inode *inode, struct audit_tree *tree)  	return 0;  } +static void audit_log_remove_rule(struct audit_krule *rule) +{ +	struct audit_buffer *ab; + +	ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE); +	if (unlikely(!ab)) +		return; +	audit_log_format(ab, "op="); +	audit_log_string(ab, "remove rule"); +	audit_log_format(ab, " dir="); +	audit_log_untrustedstring(ab, rule->tree->pathname); +	audit_log_key(ab, rule->filterkey); +	audit_log_format(ab, " list=%d res=1", rule->listnr); +	audit_log_end(ab); +} +  static void kill_rules(struct audit_tree *tree)  {  	struct audit_krule *rule, *next;  	struct audit_entry *entry; -	struct audit_buffer *ab;  	list_for_each_entry_safe(rule, next, &tree->rules, rlist) {  		entry = container_of(rule, struct audit_entry, rule); @@ -461,14 +476,7 @@ static void kill_rules(struct audit_tree *tree)  		list_del_init(&rule->rlist);  		if (rule->tree) {  			/* not a half-baked one */ -			ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE); -			audit_log_format(ab, "op="); -			audit_log_string(ab, "remove rule"); -			audit_log_format(ab, " dir="); -			audit_log_untrustedstring(ab, rule->tree->pathname); -			audit_log_key(ab, rule->filterkey); -			audit_log_format(ab, " list=%d res=1", rule->listnr); -			audit_log_end(ab); +			audit_log_remove_rule(rule);  			rule->tree = NULL;  			list_del_rcu(&entry->list);  			list_del(&entry->rule.list); |