Lines Matching refs:watch
111 void audit_get_watch(struct audit_watch *watch) in audit_get_watch() argument
113 atomic_inc(&watch->count); in audit_get_watch()
116 void audit_put_watch(struct audit_watch *watch) in audit_put_watch() argument
118 if (atomic_dec_and_test(&watch->count)) { in audit_put_watch()
119 WARN_ON(watch->parent); in audit_put_watch()
120 WARN_ON(!list_empty(&watch->rules)); in audit_put_watch()
121 kfree(watch->path); in audit_put_watch()
122 kfree(watch); in audit_put_watch()
126 static void audit_remove_watch(struct audit_watch *watch) in audit_remove_watch() argument
128 list_del(&watch->wlist); in audit_remove_watch()
129 audit_put_parent(watch->parent); in audit_remove_watch()
130 watch->parent = NULL; in audit_remove_watch()
131 audit_put_watch(watch); /* match initial get */ in audit_remove_watch()
134 char *audit_watch_path(struct audit_watch *watch) in audit_watch_path() argument
136 return watch->path; in audit_watch_path()
139 int audit_watch_compare(struct audit_watch *watch, unsigned long ino, dev_t dev) in audit_watch_compare() argument
141 return (watch->ino != AUDIT_INO_UNSET) && in audit_watch_compare()
142 (watch->ino == ino) && in audit_watch_compare()
143 (watch->dev == dev); in audit_watch_compare()
173 struct audit_watch *watch; in audit_init_watch() local
175 watch = kzalloc(sizeof(*watch), GFP_KERNEL); in audit_init_watch()
176 if (unlikely(!watch)) in audit_init_watch()
179 INIT_LIST_HEAD(&watch->rules); in audit_init_watch()
180 atomic_set(&watch->count, 1); in audit_init_watch()
181 watch->path = path; in audit_init_watch()
182 watch->dev = AUDIT_DEV_UNSET; in audit_init_watch()
183 watch->ino = AUDIT_INO_UNSET; in audit_init_watch()
185 return watch; in audit_init_watch()
191 struct audit_watch *watch; in audit_to_watch() local
199 krule->inode_f || krule->watch || krule->tree) in audit_to_watch()
202 watch = audit_init_watch(path); in audit_to_watch()
203 if (IS_ERR(watch)) in audit_to_watch()
204 return PTR_ERR(watch); in audit_to_watch()
206 krule->watch = watch; in audit_to_watch()
307 audit_put_watch(nentry->rule.watch); in audit_update_watch()
309 nentry->rule.watch = nwatch; in audit_update_watch()
362 static int audit_get_nd(struct audit_watch *watch, struct path *parent) in audit_get_nd() argument
364 struct dentry *d = kern_path_locked(watch->path, parent); in audit_get_nd()
370 watch->dev = d_backing_inode(d)->i_sb->s_dev; in audit_get_nd()
371 watch->ino = d_backing_inode(d)->i_ino; in audit_get_nd()
382 struct audit_watch *w, *watch = krule->watch; in audit_add_to_parent() local
388 if (strcmp(watch->path, w->path)) in audit_add_to_parent()
394 audit_put_watch(watch); in audit_add_to_parent()
397 krule->watch = watch = w; in audit_add_to_parent()
404 watch->parent = parent; in audit_add_to_parent()
406 audit_get_watch(watch); in audit_add_to_parent()
407 list_add(&watch->wlist, &parent->watches); in audit_add_to_parent()
409 list_add(&krule->rlist, &watch->rules); in audit_add_to_parent()
416 struct audit_watch *watch = krule->watch; in audit_add_watch() local
424 ret = audit_get_nd(watch, &parent_path); in audit_add_watch()
444 h = audit_hash_ino((u32)watch->ino); in audit_add_watch()
453 struct audit_watch *watch = krule->watch; in audit_remove_watch_rule() local
454 struct audit_parent *parent = watch->parent; in audit_remove_watch_rule()
458 if (list_empty(&watch->rules)) { in audit_remove_watch_rule()
459 audit_remove_watch(watch); in audit_remove_watch_rule()