mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
fanotify: add support for create/attrib/move/delete events
Add support for events with data type FSNOTIFY_EVENT_INODE (e.g. create/attrib/move/delete) for inode and filesystem mark types. The "inode" events do not carry enough information (i.e. path) to report event->fd, so we do not allow setting a mask for those events unless group supports reporting fid. The "inode" events are not supported on a mount mark, because they do not carry enough information (i.e. path) to be filtered by mount point. The "dirent" events (create/move/delete) report the fid of the parent directory where events took place without specifying the filename of the child. In the future, fanotify may get support for reporting filename information for those events. Cc: <[email protected]> Signed-off-by: Amir Goldstein <[email protected]> Signed-off-by: Jan Kara <[email protected]>
This commit is contained in:
parent
83b535d289
commit
235328d1fa
4 changed files with 48 additions and 3 deletions
|
|
@ -313,9 +313,16 @@ static int fanotify_handle_event(struct fsnotify_group *group,
|
|||
|
||||
BUILD_BUG_ON(FAN_ACCESS != FS_ACCESS);
|
||||
BUILD_BUG_ON(FAN_MODIFY != FS_MODIFY);
|
||||
BUILD_BUG_ON(FAN_ATTRIB != FS_ATTRIB);
|
||||
BUILD_BUG_ON(FAN_CLOSE_NOWRITE != FS_CLOSE_NOWRITE);
|
||||
BUILD_BUG_ON(FAN_CLOSE_WRITE != FS_CLOSE_WRITE);
|
||||
BUILD_BUG_ON(FAN_OPEN != FS_OPEN);
|
||||
BUILD_BUG_ON(FAN_MOVED_TO != FS_MOVED_TO);
|
||||
BUILD_BUG_ON(FAN_MOVED_FROM != FS_MOVED_FROM);
|
||||
BUILD_BUG_ON(FAN_CREATE != FS_CREATE);
|
||||
BUILD_BUG_ON(FAN_DELETE != FS_DELETE);
|
||||
BUILD_BUG_ON(FAN_DELETE_SELF != FS_DELETE_SELF);
|
||||
BUILD_BUG_ON(FAN_MOVE_SELF != FS_MOVE_SELF);
|
||||
BUILD_BUG_ON(FAN_EVENT_ON_CHILD != FS_EVENT_ON_CHILD);
|
||||
BUILD_BUG_ON(FAN_Q_OVERFLOW != FS_Q_OVERFLOW);
|
||||
BUILD_BUG_ON(FAN_OPEN_PERM != FS_OPEN_PERM);
|
||||
|
|
@ -324,7 +331,7 @@ static int fanotify_handle_event(struct fsnotify_group *group,
|
|||
BUILD_BUG_ON(FAN_OPEN_EXEC != FS_OPEN_EXEC);
|
||||
BUILD_BUG_ON(FAN_OPEN_EXEC_PERM != FS_OPEN_EXEC_PERM);
|
||||
|
||||
BUILD_BUG_ON(HWEIGHT32(ALL_FANOTIFY_EVENT_BITS) != 12);
|
||||
BUILD_BUG_ON(HWEIGHT32(ALL_FANOTIFY_EVENT_BITS) != 19);
|
||||
|
||||
mask = fanotify_group_event_mask(group, iter_info, mask, data,
|
||||
data_type);
|
||||
|
|
|
|||
|
|
@ -976,6 +976,18 @@ static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask,
|
|||
group->priority == FS_PRIO_0)
|
||||
goto fput_and_out;
|
||||
|
||||
/*
|
||||
* Events with data type inode do not carry enough information to report
|
||||
* event->fd, so we do not allow setting a mask for inode events unless
|
||||
* group supports reporting fid.
|
||||
* inode events are not supported on a mount mark, because they do not
|
||||
* carry enough information (i.e. path) to be filtered by mount point.
|
||||
*/
|
||||
if (mask & FANOTIFY_INODE_EVENTS &&
|
||||
(!FAN_GROUP_FLAG(group, FAN_REPORT_FID) ||
|
||||
mark_type == FAN_MARK_MOUNT))
|
||||
goto fput_and_out;
|
||||
|
||||
if (flags & FAN_MARK_FLUSH) {
|
||||
ret = 0;
|
||||
if (mark_type == FAN_MARK_MOUNT)
|
||||
|
|
|
|||
Loading…
Reference in a new issue