Lines Matching refs:tree
78 struct audit_tree *tree; in alloc_tree() local
80 tree = kmalloc(sizeof(struct audit_tree) + strlen(s) + 1, GFP_KERNEL); in alloc_tree()
81 if (tree) { in alloc_tree()
82 refcount_set(&tree->count, 1); in alloc_tree()
83 tree->goner = 0; in alloc_tree()
84 INIT_LIST_HEAD(&tree->chunks); in alloc_tree()
85 INIT_LIST_HEAD(&tree->rules); in alloc_tree()
86 INIT_LIST_HEAD(&tree->list); in alloc_tree()
87 INIT_LIST_HEAD(&tree->same_root); in alloc_tree()
88 tree->root = NULL; in alloc_tree()
89 strcpy(tree->pathname, s); in alloc_tree()
91 return tree; in alloc_tree()
94 static inline void get_tree(struct audit_tree *tree) in get_tree() argument
96 refcount_inc(&tree->count); in get_tree()
99 static inline void put_tree(struct audit_tree *tree) in put_tree() argument
101 if (refcount_dec_and_test(&tree->count)) in put_tree()
102 kfree_rcu(tree, head); in put_tree()
106 const char *audit_tree_path(struct audit_tree *tree) in audit_tree_path() argument
108 return tree->pathname; in audit_tree_path()
224 bool audit_tree_match(struct audit_chunk *chunk, struct audit_tree *tree) in audit_tree_match() argument
228 if (chunk->owners[n].owner == tree) in audit_tree_match()
350 static int create_chunk(struct inode *inode, struct audit_tree *tree) in create_chunk() argument
365 if (tree->goner) { in create_chunk()
374 chunk->owners[0].owner = tree; in create_chunk()
375 get_tree(tree); in create_chunk()
376 list_add(&chunk->owners[0].list, &tree->chunks); in create_chunk()
377 if (!tree->root) { in create_chunk()
378 tree->root = chunk; in create_chunk()
379 list_add(&tree->same_root, &chunk->trees); in create_chunk()
389 static int tag_chunk(struct inode *inode, struct audit_tree *tree) in tag_chunk() argument
400 return create_chunk(inode, tree); in tag_chunk()
407 if (old->owners[n].owner == tree) { in tag_chunk()
452 if (tree->goner) { in tag_chunk()
476 p->owner = tree; in tag_chunk()
477 get_tree(tree); in tag_chunk()
478 list_add(&p->list, &tree->chunks); in tag_chunk()
483 if (!tree->root) { in tag_chunk()
484 tree->root = chunk; in tag_chunk()
485 list_add(&tree->same_root, &chunk->trees); in tag_chunk()
508 audit_log_untrustedstring(ab, rule->tree->pathname); in audit_tree_log_remove_rule()
514 static void kill_rules(struct audit_tree *tree) in kill_rules() argument
519 list_for_each_entry_safe(rule, next, &tree->rules, rlist) { in kill_rules()
523 if (rule->tree) { in kill_rules()
528 rule->tree = NULL; in kill_rules()
555 static void trim_marked(struct audit_tree *tree) in trim_marked() argument
559 if (tree->goner) { in trim_marked()
564 for (p = tree->chunks.next; p != &tree->chunks; p = q) { in trim_marked()
569 list_add(p, &tree->chunks); in trim_marked()
573 while (!list_empty(&tree->chunks)) { in trim_marked()
576 node = list_entry(tree->chunks.next, struct node, list); in trim_marked()
584 if (!tree->root && !tree->goner) { in trim_marked()
585 tree->goner = 1; in trim_marked()
588 kill_rules(tree); in trim_marked()
589 list_del_init(&tree->list); in trim_marked()
591 prune_one(tree); in trim_marked()
602 struct audit_tree *tree; in audit_remove_tree_rule() local
603 tree = rule->tree; in audit_remove_tree_rule()
604 if (tree) { in audit_remove_tree_rule()
607 if (list_empty(&tree->rules) && !tree->goner) { in audit_remove_tree_rule()
608 tree->root = NULL; in audit_remove_tree_rule()
609 list_del_init(&tree->same_root); in audit_remove_tree_rule()
610 tree->goner = 1; in audit_remove_tree_rule()
611 list_move(&tree->list, &prune_list); in audit_remove_tree_rule()
612 rule->tree = NULL; in audit_remove_tree_rule()
617 rule->tree = NULL; in audit_remove_tree_rule()
637 struct audit_tree *tree; in audit_trim_trees() local
643 tree = container_of(cursor.next, struct audit_tree, list); in audit_trim_trees()
644 get_tree(tree); in audit_trim_trees()
646 list_add(&cursor, &tree->list); in audit_trim_trees()
649 err = kern_path(tree->pathname, 0, &path); in audit_trim_trees()
659 list_for_each_entry(node, &tree->chunks, list) { in audit_trim_trees()
669 trim_marked(tree); in audit_trim_trees()
672 put_tree(tree); in audit_trim_trees()
685 rule->inode_f || rule->watch || rule->tree) in audit_make_tree()
687 rule->tree = alloc_tree(pathname); in audit_make_tree()
688 if (!rule->tree) in audit_make_tree()
693 void audit_put_tree(struct audit_tree *tree) in audit_put_tree() argument
695 put_tree(tree); in audit_put_tree()
755 struct audit_tree *seed = rule->tree, *tree; in audit_add_tree_rule() local
760 rule->tree = NULL; in audit_add_tree_rule()
761 list_for_each_entry(tree, &tree_list, list) { in audit_add_tree_rule()
762 if (!strcmp(seed->pathname, tree->pathname)) { in audit_add_tree_rule()
764 rule->tree = tree; in audit_add_tree_rule()
765 list_add(&rule->rlist, &tree->rules); in audit_add_tree_rule()
769 tree = seed; in audit_add_tree_rule()
770 list_add(&tree->list, &tree_list); in audit_add_tree_rule()
771 list_add(&rule->rlist, &tree->rules); in audit_add_tree_rule()
781 err = kern_path(tree->pathname, 0, &path); in audit_add_tree_rule()
791 get_tree(tree); in audit_add_tree_rule()
792 err = iterate_mounts(tag_mount, tree, mnt); in audit_add_tree_rule()
798 list_for_each_entry(node, &tree->chunks, list) in audit_add_tree_rule()
802 trim_marked(tree); in audit_add_tree_rule()
808 put_tree(tree); in audit_add_tree_rule()
811 rule->tree = tree; in audit_add_tree_rule()
812 put_tree(tree); in audit_add_tree_rule()
817 list_del_init(&tree->list); in audit_add_tree_rule()
818 list_del_init(&tree->rules); in audit_add_tree_rule()
819 put_tree(tree); in audit_add_tree_rule()
850 struct audit_tree *tree; in audit_tag_tree() local
853 tree = container_of(cursor.next, struct audit_tree, list); in audit_tag_tree()
854 get_tree(tree); in audit_tag_tree()
856 list_add(&cursor, &tree->list); in audit_tag_tree()
859 err = kern_path(tree->pathname, 0, &path2); in audit_tag_tree()
866 put_tree(tree); in audit_tag_tree()
871 failed = iterate_mounts(tag_mount, tree, tagged); in audit_tag_tree()
873 put_tree(tree); in audit_tag_tree()
880 if (!tree->goner) { in audit_tag_tree()
881 list_del(&tree->list); in audit_tag_tree()
882 list_add(&tree->list, &tree_list); in audit_tag_tree()
885 put_tree(tree); in audit_tag_tree()
889 struct audit_tree *tree; in audit_tag_tree() local
891 tree = container_of(barrier.prev, struct audit_tree, list); in audit_tag_tree()
892 get_tree(tree); in audit_tag_tree()
893 list_del(&tree->list); in audit_tag_tree()
894 list_add(&tree->list, &barrier); in audit_tag_tree()
900 list_for_each_entry(node, &tree->chunks, list) in audit_tag_tree()
904 trim_marked(tree); in audit_tag_tree()
907 put_tree(tree); in audit_tag_tree()