2014-01-21 23:48:14 +00:00
|
|
|
#include <linux/fsnotify_backend.h>
|
|
|
|
#include <linux/path.h>
|
|
|
|
#include <linux/slab.h>
|
|
|
|
|
2016-12-21 17:06:12 +00:00
|
|
|
extern struct kmem_cache *fanotify_mark_cache;
|
2014-01-21 23:48:14 +00:00
|
|
|
extern struct kmem_cache *fanotify_event_cachep;
|
2014-04-03 21:46:33 +00:00
|
|
|
extern struct kmem_cache *fanotify_perm_event_cachep;
|
2014-01-21 23:48:14 +00:00
|
|
|
|
2014-01-28 20:38:06 +00:00
|
|
|
/*
|
2014-04-03 21:46:33 +00:00
|
|
|
* Structure for normal fanotify events. It gets allocated in
|
|
|
|
* fanotify_handle_event() and freed when the information is retrieved by
|
|
|
|
* userspace
|
2014-01-28 20:38:06 +00:00
|
|
|
*/
|
2014-01-21 23:48:14 +00:00
|
|
|
struct fanotify_event_info {
|
|
|
|
struct fsnotify_event fse;
|
|
|
|
/*
|
|
|
|
* We hold ref to this path so it may be dereferenced at any point
|
|
|
|
* during this object's lifetime
|
|
|
|
*/
|
|
|
|
struct path path;
|
|
|
|
struct pid *tgid;
|
2014-04-03 21:46:33 +00:00
|
|
|
};
|
|
|
|
|
2014-01-21 23:48:14 +00:00
|
|
|
#ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS
|
2014-04-03 21:46:33 +00:00
|
|
|
/*
|
|
|
|
* Structure for permission fanotify events. It gets allocated and freed in
|
|
|
|
* fanotify_handle_event() since we wait there for user response. When the
|
|
|
|
* information is retrieved by userspace the structure is moved from
|
|
|
|
* group->notification_list to group->fanotify_data.access_list to wait for
|
|
|
|
* user response.
|
|
|
|
*/
|
|
|
|
struct fanotify_perm_event_info {
|
|
|
|
struct fanotify_event_info fae;
|
|
|
|
int response; /* userspace answer to question */
|
|
|
|
int fd; /* fd we passed to userspace for this event */
|
2014-01-21 23:48:14 +00:00
|
|
|
};
|
|
|
|
|
2014-04-03 21:46:33 +00:00
|
|
|
static inline struct fanotify_perm_event_info *
|
|
|
|
FANOTIFY_PE(struct fsnotify_event *fse)
|
|
|
|
{
|
|
|
|
return container_of(fse, struct fanotify_perm_event_info, fae.fse);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2014-01-21 23:48:14 +00:00
|
|
|
static inline struct fanotify_event_info *FANOTIFY_E(struct fsnotify_event *fse)
|
|
|
|
{
|
|
|
|
return container_of(fse, struct fanotify_event_info, fse);
|
|
|
|
}
|
2014-04-03 21:46:33 +00:00
|
|
|
|
|
|
|
struct fanotify_event_info *fanotify_alloc_event(struct inode *inode, u32 mask,
|
2016-11-21 01:19:09 +00:00
|
|
|
const struct path *path);
|