blob: 4eb6f5efa282527f4d2d4824fcf80267f0b68be7 [file] [log] [blame]
Jan Kara7053aee2014-01-21 15:48:14 -08001#include <linux/fsnotify_backend.h>
2#include <linux/path.h>
3#include <linux/slab.h>
4
Jan Kara054c6362016-12-21 18:06:12 +01005extern struct kmem_cache *fanotify_mark_cache;
Jan Kara7053aee2014-01-21 15:48:14 -08006extern struct kmem_cache *fanotify_event_cachep;
Jan Karaf0834412014-04-03 14:46:33 -07007extern struct kmem_cache *fanotify_perm_event_cachep;
Jan Kara7053aee2014-01-21 15:48:14 -08008
Jan Kara85816792014-01-28 21:38:06 +01009/*
Jan Karaf0834412014-04-03 14:46:33 -070010 * Structure for normal fanotify events. It gets allocated in
11 * fanotify_handle_event() and freed when the information is retrieved by
12 * userspace
Jan Kara85816792014-01-28 21:38:06 +010013 */
Jan Kara7053aee2014-01-21 15:48:14 -080014struct fanotify_event_info {
15 struct fsnotify_event fse;
16 /*
17 * We hold ref to this path so it may be dereferenced at any point
18 * during this object's lifetime
19 */
20 struct path path;
21 struct pid *tgid;
Jan Kara7053aee2014-01-21 15:48:14 -080022};
23
Jan Karaf0834412014-04-03 14:46:33 -070024#ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS
25/*
26 * Structure for permission fanotify events. It gets allocated and freed in
27 * fanotify_handle_event() since we wait there for user response. When the
28 * information is retrieved by userspace the structure is moved from
29 * group->notification_list to group->fanotify_data.access_list to wait for
30 * user response.
31 */
32struct fanotify_perm_event_info {
33 struct fanotify_event_info fae;
34 int response; /* userspace answer to question */
35 int fd; /* fd we passed to userspace for this event */
36};
37
38static inline struct fanotify_perm_event_info *
39FANOTIFY_PE(struct fsnotify_event *fse)
40{
41 return container_of(fse, struct fanotify_perm_event_info, fae.fse);
42}
43#endif
44
Jan Kara7053aee2014-01-21 15:48:14 -080045static inline struct fanotify_event_info *FANOTIFY_E(struct fsnotify_event *fse)
46{
47 return container_of(fse, struct fanotify_event_info, fse);
48}
Jan Karaf0834412014-04-03 14:46:33 -070049
50struct fanotify_event_info *fanotify_alloc_event(struct inode *inode, u32 mask,
Al Viro3cd5eca2016-11-20 20:19:09 -050051 const struct path *path);