btrfs: Output ENOSPC debug info in inc_block_group_ro
[sfrench/cifs-2.6.git] / kernel / audit_tree.c
1 // SPDX-License-Identifier: GPL-2.0
2 #include "audit.h"
3 #include <linux/fsnotify_backend.h>
4 #include <linux/namei.h>
5 #include <linux/mount.h>
6 #include <linux/kthread.h>
7 #include <linux/refcount.h>
8 #include <linux/slab.h>
9
10 struct audit_tree;
11 struct audit_chunk;
12
13 struct audit_tree {
14         refcount_t count;
15         int goner;
16         struct audit_chunk *root;
17         struct list_head chunks;
18         struct list_head rules;
19         struct list_head list;
20         struct list_head same_root;
21         struct rcu_head head;
22         char pathname[];
23 };
24
25 struct audit_chunk {
26         struct list_head hash;
27         unsigned long key;
28         struct fsnotify_mark *mark;
29         struct list_head trees;         /* with root here */
30         int count;
31         atomic_long_t refs;
32         struct rcu_head head;
33         struct node {
34                 struct list_head list;
35                 struct audit_tree *owner;
36                 unsigned index;         /* index; upper bit indicates 'will prune' */
37         } owners[];
38 };
39
40 struct audit_tree_mark {
41         struct fsnotify_mark mark;
42         struct audit_chunk *chunk;
43 };
44
45 static LIST_HEAD(tree_list);
46 static LIST_HEAD(prune_list);
47 static struct task_struct *prune_thread;
48
49 /*
50  * One struct chunk is attached to each inode of interest through
51  * audit_tree_mark (fsnotify mark). We replace struct chunk on tagging /
52  * untagging, the mark is stable as long as there is chunk attached. The
53  * association between mark and chunk is protected by hash_lock and
54  * audit_tree_group->mark_mutex. Thus as long as we hold
55  * audit_tree_group->mark_mutex and check that the mark is alive by
56  * FSNOTIFY_MARK_FLAG_ATTACHED flag check, we are sure the mark points to
57  * the current chunk.
58  *
59  * Rules have pointer to struct audit_tree.
60  * Rules have struct list_head rlist forming a list of rules over
61  * the same tree.
62  * References to struct chunk are collected at audit_inode{,_child}()
63  * time and used in AUDIT_TREE rule matching.
64  * These references are dropped at the same time we are calling
65  * audit_free_names(), etc.
66  *
67  * Cyclic lists galore:
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
71  * chunk.hash is a hash with middle bits of watch.inode as
72  * a hash function.                                             RCU, hash_lock
73  *
74  * tree is refcounted; one reference for "some rules on rules_list refer to
75  * it", one for each chunk with pointer to it.
76  *
77  * chunk is refcounted by embedded .refs. Mark associated with the chunk holds
78  * one chunk reference. This reference is dropped either when a mark is going
79  * to be freed (corresponding inode goes away) or when chunk attached to the
80  * mark gets replaced. This reference must be dropped using
81  * audit_mark_put_chunk() to make sure the reference is dropped only after RCU
82  * grace period as it protects RCU readers of the hash table.
83  *
84  * node.index allows to get from node.list to containing chunk.
85  * MSB of that sucker is stolen to mark taggings that we might have to
86  * revert - several operations have very unpleasant cleanup logics and
87  * that makes a difference.  Some.
88  */
89
90 static struct fsnotify_group *audit_tree_group;
91 static struct kmem_cache *audit_tree_mark_cachep __read_mostly;
92
93 static struct audit_tree *alloc_tree(const char *s)
94 {
95         struct audit_tree *tree;
96
97         tree = kmalloc(sizeof(struct audit_tree) + 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);
107         }
108         return tree;
109 }
110
111 static inline void get_tree(struct audit_tree *tree)
112 {
113         refcount_inc(&tree->count);
114 }
115
116 static inline void put_tree(struct audit_tree *tree)
117 {
118         if (refcount_dec_and_test(&tree->count))
119                 kfree_rcu(tree, head);
120 }
121
122 /* to avoid bringing the entire thing in audit.h */
123 const char *audit_tree_path(struct audit_tree *tree)
124 {
125         return tree->pathname;
126 }
127
128 static void free_chunk(struct audit_chunk *chunk)
129 {
130         int i;
131
132         for (i = 0; i < chunk->count; i++) {
133                 if (chunk->owners[i].owner)
134                         put_tree(chunk->owners[i].owner);
135         }
136         kfree(chunk);
137 }
138
139 void audit_put_chunk(struct audit_chunk *chunk)
140 {
141         if (atomic_long_dec_and_test(&chunk->refs))
142                 free_chunk(chunk);
143 }
144
145 static void __put_chunk(struct rcu_head *rcu)
146 {
147         struct audit_chunk *chunk = container_of(rcu, struct audit_chunk, head);
148         audit_put_chunk(chunk);
149 }
150
151 /*
152  * Drop reference to the chunk that was held by the mark. This is the reference
153  * that gets dropped after we've removed the chunk from the hash table and we
154  * use it to make sure chunk cannot be freed before RCU grace period expires.
155  */
156 static void audit_mark_put_chunk(struct audit_chunk *chunk)
157 {
158         call_rcu(&chunk->head, __put_chunk);
159 }
160
161 static inline struct audit_tree_mark *audit_mark(struct fsnotify_mark *mark)
162 {
163         return container_of(mark, struct audit_tree_mark, mark);
164 }
165
166 static struct audit_chunk *mark_chunk(struct fsnotify_mark *mark)
167 {
168         return audit_mark(mark)->chunk;
169 }
170
171 static void audit_tree_destroy_watch(struct fsnotify_mark *mark)
172 {
173         kmem_cache_free(audit_tree_mark_cachep, audit_mark(mark));
174 }
175
176 static struct fsnotify_mark *alloc_mark(void)
177 {
178         struct audit_tree_mark *amark;
179
180         amark = kmem_cache_zalloc(audit_tree_mark_cachep, GFP_KERNEL);
181         if (!amark)
182                 return NULL;
183         fsnotify_init_mark(&amark->mark, audit_tree_group);
184         amark->mark.mask = FS_IN_IGNORED;
185         return &amark->mark;
186 }
187
188 static struct audit_chunk *alloc_chunk(int count)
189 {
190         struct audit_chunk *chunk;
191         size_t size;
192         int i;
193
194         size = offsetof(struct audit_chunk, owners) + count * sizeof(struct node);
195         chunk = kzalloc(size, GFP_KERNEL);
196         if (!chunk)
197                 return NULL;
198
199         INIT_LIST_HEAD(&chunk->hash);
200         INIT_LIST_HEAD(&chunk->trees);
201         chunk->count = count;
202         atomic_long_set(&chunk->refs, 1);
203         for (i = 0; i < count; i++) {
204                 INIT_LIST_HEAD(&chunk->owners[i].list);
205                 chunk->owners[i].index = i;
206         }
207         return chunk;
208 }
209
210 enum {HASH_SIZE = 128};
211 static struct list_head chunk_hash_heads[HASH_SIZE];
212 static __cacheline_aligned_in_smp DEFINE_SPINLOCK(hash_lock);
213
214 /* Function to return search key in our hash from inode. */
215 static unsigned long inode_to_key(const struct inode *inode)
216 {
217         /* Use address pointed to by connector->obj as the key */
218         return (unsigned long)&inode->i_fsnotify_marks;
219 }
220
221 static inline struct list_head *chunk_hash(unsigned long key)
222 {
223         unsigned long n = key / L1_CACHE_BYTES;
224         return chunk_hash_heads + n % HASH_SIZE;
225 }
226
227 /* hash_lock & mark->group->mark_mutex is held by caller */
228 static void insert_hash(struct audit_chunk *chunk)
229 {
230         struct list_head *list;
231
232         /*
233          * Make sure chunk is fully initialized before making it visible in the
234          * hash. Pairs with a data dependency barrier in READ_ONCE() in
235          * audit_tree_lookup().
236          */
237         smp_wmb();
238         WARN_ON_ONCE(!chunk->key);
239         list = chunk_hash(chunk->key);
240         list_add_rcu(&chunk->hash, list);
241 }
242
243 /* called under rcu_read_lock */
244 struct audit_chunk *audit_tree_lookup(const struct inode *inode)
245 {
246         unsigned long key = inode_to_key(inode);
247         struct list_head *list = chunk_hash(key);
248         struct audit_chunk *p;
249
250         list_for_each_entry_rcu(p, list, hash) {
251                 /*
252                  * We use a data dependency barrier in READ_ONCE() to make sure
253                  * the chunk we see is fully initialized.
254                  */
255                 if (READ_ONCE(p->key) == key) {
256                         atomic_long_inc(&p->refs);
257                         return p;
258                 }
259         }
260         return NULL;
261 }
262
263 bool audit_tree_match(struct audit_chunk *chunk, struct audit_tree *tree)
264 {
265         int n;
266         for (n = 0; n < chunk->count; n++)
267                 if (chunk->owners[n].owner == tree)
268                         return true;
269         return false;
270 }
271
272 /* tagging and untagging inodes with trees */
273
274 static struct audit_chunk *find_chunk(struct node *p)
275 {
276         int index = p->index & ~(1U<<31);
277         p -= index;
278         return container_of(p, struct audit_chunk, owners[0]);
279 }
280
281 static void replace_mark_chunk(struct fsnotify_mark *mark,
282                                struct audit_chunk *chunk)
283 {
284         struct audit_chunk *old;
285
286         assert_spin_locked(&hash_lock);
287         old = mark_chunk(mark);
288         audit_mark(mark)->chunk = chunk;
289         if (chunk)
290                 chunk->mark = mark;
291         if (old)
292                 old->mark = NULL;
293 }
294
295 static void replace_chunk(struct audit_chunk *new, struct audit_chunk *old)
296 {
297         struct audit_tree *owner;
298         int i, j;
299
300         new->key = old->key;
301         list_splice_init(&old->trees, &new->trees);
302         list_for_each_entry(owner, &new->trees, same_root)
303                 owner->root = new;
304         for (i = j = 0; j < old->count; i++, j++) {
305                 if (!old->owners[j].owner) {
306                         i--;
307                         continue;
308                 }
309                 owner = old->owners[j].owner;
310                 new->owners[i].owner = owner;
311                 new->owners[i].index = old->owners[j].index - j + i;
312                 if (!owner) /* result of earlier fallback */
313                         continue;
314                 get_tree(owner);
315                 list_replace_init(&old->owners[j].list, &new->owners[i].list);
316         }
317         replace_mark_chunk(old->mark, new);
318         /*
319          * Make sure chunk is fully initialized before making it visible in the
320          * hash. Pairs with a data dependency barrier in READ_ONCE() in
321          * audit_tree_lookup().
322          */
323         smp_wmb();
324         list_replace_rcu(&old->hash, &new->hash);
325 }
326
327 static void remove_chunk_node(struct audit_chunk *chunk, struct node *p)
328 {
329         struct audit_tree *owner = p->owner;
330
331         if (owner->root == chunk) {
332                 list_del_init(&owner->same_root);
333                 owner->root = NULL;
334         }
335         list_del_init(&p->list);
336         p->owner = NULL;
337         put_tree(owner);
338 }
339
340 static int chunk_count_trees(struct audit_chunk *chunk)
341 {
342         int i;
343         int ret = 0;
344
345         for (i = 0; i < chunk->count; i++)
346                 if (chunk->owners[i].owner)
347                         ret++;
348         return ret;
349 }
350
351 static void untag_chunk(struct audit_chunk *chunk, struct fsnotify_mark *mark)
352 {
353         struct audit_chunk *new;
354         int size;
355
356         mutex_lock(&audit_tree_group->mark_mutex);
357         /*
358          * mark_mutex stabilizes chunk attached to the mark so we can check
359          * whether it didn't change while we've dropped hash_lock.
360          */
361         if (!(mark->flags & FSNOTIFY_MARK_FLAG_ATTACHED) ||
362             mark_chunk(mark) != chunk)
363                 goto out_mutex;
364
365         size = chunk_count_trees(chunk);
366         if (!size) {
367                 spin_lock(&hash_lock);
368                 list_del_init(&chunk->trees);
369                 list_del_rcu(&chunk->hash);
370                 replace_mark_chunk(mark, NULL);
371                 spin_unlock(&hash_lock);
372                 fsnotify_detach_mark(mark);
373                 mutex_unlock(&audit_tree_group->mark_mutex);
374                 audit_mark_put_chunk(chunk);
375                 fsnotify_free_mark(mark);
376                 return;
377         }
378
379         new = alloc_chunk(size);
380         if (!new)
381                 goto out_mutex;
382
383         spin_lock(&hash_lock);
384         /*
385          * This has to go last when updating chunk as once replace_chunk() is
386          * called, new RCU readers can see the new chunk.
387          */
388         replace_chunk(new, chunk);
389         spin_unlock(&hash_lock);
390         mutex_unlock(&audit_tree_group->mark_mutex);
391         audit_mark_put_chunk(chunk);
392         return;
393
394 out_mutex:
395         mutex_unlock(&audit_tree_group->mark_mutex);
396 }
397
398 /* Call with group->mark_mutex held, releases it */
399 static int create_chunk(struct inode *inode, struct audit_tree *tree)
400 {
401         struct fsnotify_mark *mark;
402         struct audit_chunk *chunk = alloc_chunk(1);
403
404         if (!chunk) {
405                 mutex_unlock(&audit_tree_group->mark_mutex);
406                 return -ENOMEM;
407         }
408
409         mark = alloc_mark();
410         if (!mark) {
411                 mutex_unlock(&audit_tree_group->mark_mutex);
412                 kfree(chunk);
413                 return -ENOMEM;
414         }
415
416         if (fsnotify_add_inode_mark_locked(mark, inode, 0)) {
417                 mutex_unlock(&audit_tree_group->mark_mutex);
418                 fsnotify_put_mark(mark);
419                 kfree(chunk);
420                 return -ENOSPC;
421         }
422
423         spin_lock(&hash_lock);
424         if (tree->goner) {
425                 spin_unlock(&hash_lock);
426                 fsnotify_detach_mark(mark);
427                 mutex_unlock(&audit_tree_group->mark_mutex);
428                 fsnotify_free_mark(mark);
429                 fsnotify_put_mark(mark);
430                 kfree(chunk);
431                 return 0;
432         }
433         replace_mark_chunk(mark, chunk);
434         chunk->owners[0].index = (1U << 31);
435         chunk->owners[0].owner = tree;
436         get_tree(tree);
437         list_add(&chunk->owners[0].list, &tree->chunks);
438         if (!tree->root) {
439                 tree->root = chunk;
440                 list_add(&tree->same_root, &chunk->trees);
441         }
442         chunk->key = inode_to_key(inode);
443         /*
444          * Inserting into the hash table has to go last as once we do that RCU
445          * readers can see the chunk.
446          */
447         insert_hash(chunk);
448         spin_unlock(&hash_lock);
449         mutex_unlock(&audit_tree_group->mark_mutex);
450         /*
451          * Drop our initial reference. When mark we point to is getting freed,
452          * we get notification through ->freeing_mark callback and cleanup
453          * chunk pointing to this mark.
454          */
455         fsnotify_put_mark(mark);
456         return 0;
457 }
458
459 /* the first tagged inode becomes root of tree */
460 static int tag_chunk(struct inode *inode, struct audit_tree *tree)
461 {
462         struct fsnotify_mark *mark;
463         struct audit_chunk *chunk, *old;
464         struct node *p;
465         int n;
466
467         mutex_lock(&audit_tree_group->mark_mutex);
468         mark = fsnotify_find_mark(&inode->i_fsnotify_marks, audit_tree_group);
469         if (!mark)
470                 return create_chunk(inode, tree);
471
472         /*
473          * Found mark is guaranteed to be attached and mark_mutex protects mark
474          * from getting detached and thus it makes sure there is chunk attached
475          * to the mark.
476          */
477         /* are we already there? */
478         spin_lock(&hash_lock);
479         old = mark_chunk(mark);
480         for (n = 0; n < old->count; n++) {
481                 if (old->owners[n].owner == tree) {
482                         spin_unlock(&hash_lock);
483                         mutex_unlock(&audit_tree_group->mark_mutex);
484                         fsnotify_put_mark(mark);
485                         return 0;
486                 }
487         }
488         spin_unlock(&hash_lock);
489
490         chunk = alloc_chunk(old->count + 1);
491         if (!chunk) {
492                 mutex_unlock(&audit_tree_group->mark_mutex);
493                 fsnotify_put_mark(mark);
494                 return -ENOMEM;
495         }
496
497         spin_lock(&hash_lock);
498         if (tree->goner) {
499                 spin_unlock(&hash_lock);
500                 mutex_unlock(&audit_tree_group->mark_mutex);
501                 fsnotify_put_mark(mark);
502                 kfree(chunk);
503                 return 0;
504         }
505         p = &chunk->owners[chunk->count - 1];
506         p->index = (chunk->count - 1) | (1U<<31);
507         p->owner = tree;
508         get_tree(tree);
509         list_add(&p->list, &tree->chunks);
510         if (!tree->root) {
511                 tree->root = chunk;
512                 list_add(&tree->same_root, &chunk->trees);
513         }
514         /*
515          * This has to go last when updating chunk as once replace_chunk() is
516          * called, new RCU readers can see the new chunk.
517          */
518         replace_chunk(chunk, old);
519         spin_unlock(&hash_lock);
520         mutex_unlock(&audit_tree_group->mark_mutex);
521         fsnotify_put_mark(mark); /* pair to fsnotify_find_mark */
522         audit_mark_put_chunk(old);
523
524         return 0;
525 }
526
527 static void audit_tree_log_remove_rule(struct audit_krule *rule)
528 {
529         struct audit_buffer *ab;
530
531         if (!audit_enabled)
532                 return;
533         ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE);
534         if (unlikely(!ab))
535                 return;
536         audit_log_format(ab, "op=remove_rule dir=");
537         audit_log_untrustedstring(ab, rule->tree->pathname);
538         audit_log_key(ab, rule->filterkey);
539         audit_log_format(ab, " list=%d res=1", rule->listnr);
540         audit_log_end(ab);
541 }
542
543 static void kill_rules(struct audit_tree *tree)
544 {
545         struct audit_krule *rule, *next;
546         struct audit_entry *entry;
547
548         list_for_each_entry_safe(rule, next, &tree->rules, rlist) {
549                 entry = container_of(rule, struct audit_entry, rule);
550
551                 list_del_init(&rule->rlist);
552                 if (rule->tree) {
553                         /* not a half-baked one */
554                         audit_tree_log_remove_rule(rule);
555                         if (entry->rule.exe)
556                                 audit_remove_mark(entry->rule.exe);
557                         rule->tree = NULL;
558                         list_del_rcu(&entry->list);
559                         list_del(&entry->rule.list);
560                         call_rcu(&entry->rcu, audit_free_rule_rcu);
561                 }
562         }
563 }
564
565 /*
566  * Remove tree from chunks. If 'tagged' is set, remove tree only from tagged
567  * chunks. The function expects tagged chunks are all at the beginning of the
568  * chunks list.
569  */
570 static void prune_tree_chunks(struct audit_tree *victim, bool tagged)
571 {
572         spin_lock(&hash_lock);
573         while (!list_empty(&victim->chunks)) {
574                 struct node *p;
575                 struct audit_chunk *chunk;
576                 struct fsnotify_mark *mark;
577
578                 p = list_first_entry(&victim->chunks, struct node, list);
579                 /* have we run out of marked? */
580                 if (tagged && !(p->index & (1U<<31)))
581                         break;
582                 chunk = find_chunk(p);
583                 mark = chunk->mark;
584                 remove_chunk_node(chunk, p);
585                 /* Racing with audit_tree_freeing_mark()? */
586                 if (!mark)
587                         continue;
588                 fsnotify_get_mark(mark);
589                 spin_unlock(&hash_lock);
590
591                 untag_chunk(chunk, mark);
592                 fsnotify_put_mark(mark);
593
594                 spin_lock(&hash_lock);
595         }
596         spin_unlock(&hash_lock);
597         put_tree(victim);
598 }
599
600 /*
601  * finish killing struct audit_tree
602  */
603 static void prune_one(struct audit_tree *victim)
604 {
605         prune_tree_chunks(victim, false);
606 }
607
608 /* trim the uncommitted chunks from tree */
609
610 static void trim_marked(struct audit_tree *tree)
611 {
612         struct list_head *p, *q;
613         spin_lock(&hash_lock);
614         if (tree->goner) {
615                 spin_unlock(&hash_lock);
616                 return;
617         }
618         /* reorder */
619         for (p = tree->chunks.next; p != &tree->chunks; p = q) {
620                 struct node *node = list_entry(p, struct node, list);
621                 q = p->next;
622                 if (node->index & (1U<<31)) {
623                         list_del_init(p);
624                         list_add(p, &tree->chunks);
625                 }
626         }
627         spin_unlock(&hash_lock);
628
629         prune_tree_chunks(tree, true);
630
631         spin_lock(&hash_lock);
632         if (!tree->root && !tree->goner) {
633                 tree->goner = 1;
634                 spin_unlock(&hash_lock);
635                 mutex_lock(&audit_filter_mutex);
636                 kill_rules(tree);
637                 list_del_init(&tree->list);
638                 mutex_unlock(&audit_filter_mutex);
639                 prune_one(tree);
640         } else {
641                 spin_unlock(&hash_lock);
642         }
643 }
644
645 static void audit_schedule_prune(void);
646
647 /* called with audit_filter_mutex */
648 int audit_remove_tree_rule(struct audit_krule *rule)
649 {
650         struct audit_tree *tree;
651         tree = rule->tree;
652         if (tree) {
653                 spin_lock(&hash_lock);
654                 list_del_init(&rule->rlist);
655                 if (list_empty(&tree->rules) && !tree->goner) {
656                         tree->root = NULL;
657                         list_del_init(&tree->same_root);
658                         tree->goner = 1;
659                         list_move(&tree->list, &prune_list);
660                         rule->tree = NULL;
661                         spin_unlock(&hash_lock);
662                         audit_schedule_prune();
663                         return 1;
664                 }
665                 rule->tree = NULL;
666                 spin_unlock(&hash_lock);
667                 return 1;
668         }
669         return 0;
670 }
671
672 static int compare_root(struct vfsmount *mnt, void *arg)
673 {
674         return inode_to_key(d_backing_inode(mnt->mnt_root)) ==
675                (unsigned long)arg;
676 }
677
678 void audit_trim_trees(void)
679 {
680         struct list_head cursor;
681
682         mutex_lock(&audit_filter_mutex);
683         list_add(&cursor, &tree_list);
684         while (cursor.next != &tree_list) {
685                 struct audit_tree *tree;
686                 struct path path;
687                 struct vfsmount *root_mnt;
688                 struct node *node;
689                 int err;
690
691                 tree = container_of(cursor.next, struct audit_tree, list);
692                 get_tree(tree);
693                 list_del(&cursor);
694                 list_add(&cursor, &tree->list);
695                 mutex_unlock(&audit_filter_mutex);
696
697                 err = kern_path(tree->pathname, 0, &path);
698                 if (err)
699                         goto skip_it;
700
701                 root_mnt = collect_mounts(&path);
702                 path_put(&path);
703                 if (IS_ERR(root_mnt))
704                         goto skip_it;
705
706                 spin_lock(&hash_lock);
707                 list_for_each_entry(node, &tree->chunks, list) {
708                         struct audit_chunk *chunk = find_chunk(node);
709                         /* this could be NULL if the watch is dying else where... */
710                         node->index |= 1U<<31;
711                         if (iterate_mounts(compare_root,
712                                            (void *)(chunk->key),
713                                            root_mnt))
714                                 node->index &= ~(1U<<31);
715                 }
716                 spin_unlock(&hash_lock);
717                 trim_marked(tree);
718                 drop_collected_mounts(root_mnt);
719 skip_it:
720                 put_tree(tree);
721                 mutex_lock(&audit_filter_mutex);
722         }
723         list_del(&cursor);
724         mutex_unlock(&audit_filter_mutex);
725 }
726
727 int audit_make_tree(struct audit_krule *rule, char *pathname, u32 op)
728 {
729
730         if (pathname[0] != '/' ||
731             rule->listnr != AUDIT_FILTER_EXIT ||
732             op != Audit_equal ||
733             rule->inode_f || rule->watch || rule->tree)
734                 return -EINVAL;
735         rule->tree = alloc_tree(pathname);
736         if (!rule->tree)
737                 return -ENOMEM;
738         return 0;
739 }
740
741 void audit_put_tree(struct audit_tree *tree)
742 {
743         put_tree(tree);
744 }
745
746 static int tag_mount(struct vfsmount *mnt, void *arg)
747 {
748         return tag_chunk(d_backing_inode(mnt->mnt_root), arg);
749 }
750
751 /*
752  * That gets run when evict_chunk() ends up needing to kill audit_tree.
753  * Runs from a separate thread.
754  */
755 static int prune_tree_thread(void *unused)
756 {
757         for (;;) {
758                 if (list_empty(&prune_list)) {
759                         set_current_state(TASK_INTERRUPTIBLE);
760                         schedule();
761                 }
762
763                 audit_ctl_lock();
764                 mutex_lock(&audit_filter_mutex);
765
766                 while (!list_empty(&prune_list)) {
767                         struct audit_tree *victim;
768
769                         victim = list_entry(prune_list.next,
770                                         struct audit_tree, list);
771                         list_del_init(&victim->list);
772
773                         mutex_unlock(&audit_filter_mutex);
774
775                         prune_one(victim);
776
777                         mutex_lock(&audit_filter_mutex);
778                 }
779
780                 mutex_unlock(&audit_filter_mutex);
781                 audit_ctl_unlock();
782         }
783         return 0;
784 }
785
786 static int audit_launch_prune(void)
787 {
788         if (prune_thread)
789                 return 0;
790         prune_thread = kthread_run(prune_tree_thread, NULL,
791                                 "audit_prune_tree");
792         if (IS_ERR(prune_thread)) {
793                 pr_err("cannot start thread audit_prune_tree");
794                 prune_thread = NULL;
795                 return -ENOMEM;
796         }
797         return 0;
798 }
799
800 /* called with audit_filter_mutex */
801 int audit_add_tree_rule(struct audit_krule *rule)
802 {
803         struct audit_tree *seed = rule->tree, *tree;
804         struct path path;
805         struct vfsmount *mnt;
806         int err;
807
808         rule->tree = NULL;
809         list_for_each_entry(tree, &tree_list, list) {
810                 if (!strcmp(seed->pathname, tree->pathname)) {
811                         put_tree(seed);
812                         rule->tree = tree;
813                         list_add(&rule->rlist, &tree->rules);
814                         return 0;
815                 }
816         }
817         tree = seed;
818         list_add(&tree->list, &tree_list);
819         list_add(&rule->rlist, &tree->rules);
820         /* do not set rule->tree yet */
821         mutex_unlock(&audit_filter_mutex);
822
823         if (unlikely(!prune_thread)) {
824                 err = audit_launch_prune();
825                 if (err)
826                         goto Err;
827         }
828
829         err = kern_path(tree->pathname, 0, &path);
830         if (err)
831                 goto Err;
832         mnt = collect_mounts(&path);
833         path_put(&path);
834         if (IS_ERR(mnt)) {
835                 err = PTR_ERR(mnt);
836                 goto Err;
837         }
838
839         get_tree(tree);
840         err = iterate_mounts(tag_mount, tree, mnt);
841         drop_collected_mounts(mnt);
842
843         if (!err) {
844                 struct node *node;
845                 spin_lock(&hash_lock);
846                 list_for_each_entry(node, &tree->chunks, list)
847                         node->index &= ~(1U<<31);
848                 spin_unlock(&hash_lock);
849         } else {
850                 trim_marked(tree);
851                 goto Err;
852         }
853
854         mutex_lock(&audit_filter_mutex);
855         if (list_empty(&rule->rlist)) {
856                 put_tree(tree);
857                 return -ENOENT;
858         }
859         rule->tree = tree;
860         put_tree(tree);
861
862         return 0;
863 Err:
864         mutex_lock(&audit_filter_mutex);
865         list_del_init(&tree->list);
866         list_del_init(&tree->rules);
867         put_tree(tree);
868         return err;
869 }
870
871 int audit_tag_tree(char *old, char *new)
872 {
873         struct list_head cursor, barrier;
874         int failed = 0;
875         struct path path1, path2;
876         struct vfsmount *tagged;
877         int err;
878
879         err = kern_path(new, 0, &path2);
880         if (err)
881                 return err;
882         tagged = collect_mounts(&path2);
883         path_put(&path2);
884         if (IS_ERR(tagged))
885                 return PTR_ERR(tagged);
886
887         err = kern_path(old, 0, &path1);
888         if (err) {
889                 drop_collected_mounts(tagged);
890                 return err;
891         }
892
893         mutex_lock(&audit_filter_mutex);
894         list_add(&barrier, &tree_list);
895         list_add(&cursor, &barrier);
896
897         while (cursor.next != &tree_list) {
898                 struct audit_tree *tree;
899                 int good_one = 0;
900
901                 tree = container_of(cursor.next, struct audit_tree, list);
902                 get_tree(tree);
903                 list_del(&cursor);
904                 list_add(&cursor, &tree->list);
905                 mutex_unlock(&audit_filter_mutex);
906
907                 err = kern_path(tree->pathname, 0, &path2);
908                 if (!err) {
909                         good_one = path_is_under(&path1, &path2);
910                         path_put(&path2);
911                 }
912
913                 if (!good_one) {
914                         put_tree(tree);
915                         mutex_lock(&audit_filter_mutex);
916                         continue;
917                 }
918
919                 failed = iterate_mounts(tag_mount, tree, tagged);
920                 if (failed) {
921                         put_tree(tree);
922                         mutex_lock(&audit_filter_mutex);
923                         break;
924                 }
925
926                 mutex_lock(&audit_filter_mutex);
927                 spin_lock(&hash_lock);
928                 if (!tree->goner) {
929                         list_del(&tree->list);
930                         list_add(&tree->list, &tree_list);
931                 }
932                 spin_unlock(&hash_lock);
933                 put_tree(tree);
934         }
935
936         while (barrier.prev != &tree_list) {
937                 struct audit_tree *tree;
938
939                 tree = container_of(barrier.prev, struct audit_tree, list);
940                 get_tree(tree);
941                 list_del(&tree->list);
942                 list_add(&tree->list, &barrier);
943                 mutex_unlock(&audit_filter_mutex);
944
945                 if (!failed) {
946                         struct node *node;
947                         spin_lock(&hash_lock);
948                         list_for_each_entry(node, &tree->chunks, list)
949                                 node->index &= ~(1U<<31);
950                         spin_unlock(&hash_lock);
951                 } else {
952                         trim_marked(tree);
953                 }
954
955                 put_tree(tree);
956                 mutex_lock(&audit_filter_mutex);
957         }
958         list_del(&barrier);
959         list_del(&cursor);
960         mutex_unlock(&audit_filter_mutex);
961         path_put(&path1);
962         drop_collected_mounts(tagged);
963         return failed;
964 }
965
966
967 static void audit_schedule_prune(void)
968 {
969         wake_up_process(prune_thread);
970 }
971
972 /*
973  * ... and that one is done if evict_chunk() decides to delay until the end
974  * of syscall.  Runs synchronously.
975  */
976 void audit_kill_trees(struct list_head *list)
977 {
978         audit_ctl_lock();
979         mutex_lock(&audit_filter_mutex);
980
981         while (!list_empty(list)) {
982                 struct audit_tree *victim;
983
984                 victim = list_entry(list->next, struct audit_tree, list);
985                 kill_rules(victim);
986                 list_del_init(&victim->list);
987
988                 mutex_unlock(&audit_filter_mutex);
989
990                 prune_one(victim);
991
992                 mutex_lock(&audit_filter_mutex);
993         }
994
995         mutex_unlock(&audit_filter_mutex);
996         audit_ctl_unlock();
997 }
998
999 /*
1000  *  Here comes the stuff asynchronous to auditctl operations
1001  */
1002
1003 static void evict_chunk(struct audit_chunk *chunk)
1004 {
1005         struct audit_tree *owner;
1006         struct list_head *postponed = audit_killed_trees();
1007         int need_prune = 0;
1008         int n;
1009
1010         mutex_lock(&audit_filter_mutex);
1011         spin_lock(&hash_lock);
1012         while (!list_empty(&chunk->trees)) {
1013                 owner = list_entry(chunk->trees.next,
1014                                    struct audit_tree, same_root);
1015                 owner->goner = 1;
1016                 owner->root = NULL;
1017                 list_del_init(&owner->same_root);
1018                 spin_unlock(&hash_lock);
1019                 if (!postponed) {
1020                         kill_rules(owner);
1021                         list_move(&owner->list, &prune_list);
1022                         need_prune = 1;
1023                 } else {
1024                         list_move(&owner->list, postponed);
1025                 }
1026                 spin_lock(&hash_lock);
1027         }
1028         list_del_rcu(&chunk->hash);
1029         for (n = 0; n < chunk->count; n++)
1030                 list_del_init(&chunk->owners[n].list);
1031         spin_unlock(&hash_lock);
1032         mutex_unlock(&audit_filter_mutex);
1033         if (need_prune)
1034                 audit_schedule_prune();
1035 }
1036
1037 static int audit_tree_handle_event(struct fsnotify_group *group,
1038                                    struct inode *to_tell,
1039                                    u32 mask, const void *data, int data_type,
1040                                    const unsigned char *file_name, u32 cookie,
1041                                    struct fsnotify_iter_info *iter_info)
1042 {
1043         return 0;
1044 }
1045
1046 static void audit_tree_freeing_mark(struct fsnotify_mark *mark,
1047                                     struct fsnotify_group *group)
1048 {
1049         struct audit_chunk *chunk;
1050
1051         mutex_lock(&mark->group->mark_mutex);
1052         spin_lock(&hash_lock);
1053         chunk = mark_chunk(mark);
1054         replace_mark_chunk(mark, NULL);
1055         spin_unlock(&hash_lock);
1056         mutex_unlock(&mark->group->mark_mutex);
1057         if (chunk) {
1058                 evict_chunk(chunk);
1059                 audit_mark_put_chunk(chunk);
1060         }
1061
1062         /*
1063          * We are guaranteed to have at least one reference to the mark from
1064          * either the inode or the caller of fsnotify_destroy_mark().
1065          */
1066         BUG_ON(refcount_read(&mark->refcnt) < 1);
1067 }
1068
1069 static const struct fsnotify_ops audit_tree_ops = {
1070         .handle_event = audit_tree_handle_event,
1071         .freeing_mark = audit_tree_freeing_mark,
1072         .free_mark = audit_tree_destroy_watch,
1073 };
1074
1075 static int __init audit_tree_init(void)
1076 {
1077         int i;
1078
1079         audit_tree_mark_cachep = KMEM_CACHE(audit_tree_mark, SLAB_PANIC);
1080
1081         audit_tree_group = fsnotify_alloc_group(&audit_tree_ops);
1082         if (IS_ERR(audit_tree_group))
1083                 audit_panic("cannot initialize fsnotify group for rectree watches");
1084
1085         for (i = 0; i < HASH_SIZE; i++)
1086                 INIT_LIST_HEAD(&chunk_hash_heads[i]);
1087
1088         return 0;
1089 }
1090 __initcall(audit_tree_init);