Lines Matching full:tree

61  * the same tree.
68 * tree.chunks anchors chunk.owners[].list hash_lock
69 * tree.rules anchors rule.rlist audit_filter_mutex
70 * chunk.trees anchors tree.same_root hash_lock
74 * tree is refcounted; one reference for "some rules on rules_list refer to
95 struct audit_tree *tree;
97 tree = kmalloc(struct_size(tree, pathname, strlen(s) + 1), GFP_KERNEL);
98 if (tree) {
99 refcount_set(&tree->count, 1);
100 tree->goner = 0;
101 INIT_LIST_HEAD(&tree->chunks);
102 INIT_LIST_HEAD(&tree->rules);
103 INIT_LIST_HEAD(&tree->list);
104 INIT_LIST_HEAD(&tree->same_root);
105 tree->root = NULL;
106 strcpy(tree->pathname, s);
108 return tree;
111 static inline void get_tree(struct audit_tree *tree)
113 refcount_inc(&tree->count);
116 static inline void put_tree(struct audit_tree *tree)
118 if (refcount_dec_and_test(&tree->count))
119 kfree_rcu(tree, head);
123 const char *audit_tree_path(struct audit_tree *tree)
125 return tree->pathname;
261 bool audit_tree_match(struct audit_chunk *chunk, struct audit_tree *tree)
265 if (chunk->owners[n].owner == tree)
397 static int create_chunk(struct inode *inode, struct audit_tree *tree)
422 if (tree->goner) {
433 chunk->owners[0].owner = tree;
434 get_tree(tree);
435 list_add(&chunk->owners[0].list, &tree->chunks);
436 if (!tree->root) {
437 tree->root = chunk;
438 list_add(&tree->same_root, &chunk->trees);
457 /* the first tagged inode becomes root of tree */
458 static int tag_chunk(struct inode *inode, struct audit_tree *tree)
468 return create_chunk(inode, tree);
479 if (old->owners[n].owner == tree) {
496 if (tree->goner) {
505 p->owner = tree;
506 get_tree(tree);
507 list_add(&p->list, &tree->chunks);
508 if (!tree->root) {
509 tree->root = chunk;
510 list_add(&tree->same_root, &chunk->trees);
536 audit_log_untrustedstring(ab, rule->tree->pathname);
542 static void kill_rules(struct audit_context *context, struct audit_tree *tree)
547 list_for_each_entry_safe(rule, next, &tree->rules, rlist) {
551 if (rule->tree) {
556 rule->tree = NULL;
565 * Remove tree from chunks. If 'tagged' is set, remove tree only from tagged
607 /* trim the uncommitted chunks from tree */
609 static void trim_marked(struct audit_tree *tree)
613 if (tree->goner) {
618 for (p = tree->chunks.next; p != &tree->chunks; p = q) {
623 list_add(p, &tree->chunks);
628 prune_tree_chunks(tree, true);
631 if (!tree->root && !tree->goner) {
632 tree->goner = 1;
635 kill_rules(audit_context(), tree);
636 list_del_init(&tree->list);
638 prune_one(tree);
649 struct audit_tree *tree;
650 tree = rule->tree;
651 if (tree) {
654 if (list_empty(&tree->rules) && !tree->goner) {
655 tree->root = NULL;
656 list_del_init(&tree->same_root);
657 tree->goner = 1;
658 list_move(&tree->list, &prune_list);
659 rule->tree = NULL;
664 rule->tree = NULL;
684 struct audit_tree *tree;
690 tree = container_of(cursor.next, struct audit_tree, list);
691 get_tree(tree);
692 list_move(&cursor, &tree->list);
695 err = kern_path(tree->pathname, 0, &path);
705 list_for_each_entry(node, &tree->chunks, list) {
715 trim_marked(tree);
718 put_tree(tree);
732 rule->inode_f || rule->watch || rule->tree)
734 rule->tree = alloc_tree(pathname);
735 if (!rule->tree)
740 void audit_put_tree(struct audit_tree *tree)
742 put_tree(tree);
802 struct audit_tree *seed = rule->tree, *tree;
807 rule->tree = NULL;
808 list_for_each_entry(tree, &tree_list, list) {
809 if (!strcmp(seed->pathname, tree->pathname)) {
811 rule->tree = tree;
812 list_add(&rule->rlist, &tree->rules);
816 tree = seed;
817 list_add(&tree->list, &tree_list);
818 list_add(&rule->rlist, &tree->rules);
819 /* do not set rule->tree yet */
828 err = kern_path(tree->pathname, 0, &path);
838 get_tree(tree);
839 err = iterate_mounts(tag_mount, tree, mnt);
845 list_for_each_entry(node, &tree->chunks, list)
849 trim_marked(tree);
855 put_tree(tree);
858 rule->tree = tree;
859 put_tree(tree);
864 list_del_init(&tree->list);
865 list_del_init(&tree->rules);
866 put_tree(tree);
897 struct audit_tree *tree;
900 tree = container_of(cursor.next, struct audit_tree, list);
901 get_tree(tree);
902 list_move(&cursor, &tree->list);
905 err = kern_path(tree->pathname, 0, &path2);
912 put_tree(tree);
917 failed = iterate_mounts(tag_mount, tree, tagged);
919 put_tree(tree);
926 if (!tree->goner) {
927 list_move(&tree->list, &tree_list);
930 put_tree(tree);
934 struct audit_tree *tree;
936 tree = container_of(barrier.prev, struct audit_tree, list);
937 get_tree(tree);
938 list_move(&tree->list, &barrier);
944 list_for_each_entry(node, &tree->chunks, list)
948 trim_marked(tree);
951 put_tree(tree);