12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /* SPDX-License-Identifier: GPL-2.0 */
- #include <linux/fsnotify_backend.h>
- #include <linux/path.h>
- #include <linux/slab.h>
- extern struct kmem_cache *fanotify_mark_cache;
- extern struct kmem_cache *fanotify_event_cachep;
- extern struct kmem_cache *fanotify_perm_event_cachep;
- /*
- * Structure for normal fanotify events. It gets allocated in
- * fanotify_handle_event() and freed when the information is retrieved by
- * userspace
- */
- 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;
- };
- /*
- * 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 */
- };
- static inline struct fanotify_perm_event_info *
- FANOTIFY_PE(struct fsnotify_event *fse)
- {
- return container_of(fse, struct fanotify_perm_event_info, fae.fse);
- }
- static inline bool fanotify_is_perm_event(u32 mask)
- {
- return IS_ENABLED(CONFIG_FANOTIFY_ACCESS_PERMISSIONS) &&
- mask & FAN_ALL_PERM_EVENTS;
- }
- static inline struct fanotify_event_info *FANOTIFY_E(struct fsnotify_event *fse)
- {
- return container_of(fse, struct fanotify_event_info, fse);
- }
- struct fanotify_event_info *fanotify_alloc_event(struct fsnotify_group *group,
- struct inode *inode, u32 mask,
- const struct path *path);
|