mirror of
https://github.com/torvalds/linux.git
synced 2024-11-16 17:12:06 +00:00
fanotify: generalize the handling of extra event flags
In fanotify_group_event_mask() there is logic in place to make sure we are not going to handle an event with no type and just FAN_ONDIR flag. Generalize this logic to any FANOTIFY_EVENT_FLAGS. There is only one more flag in this group at the moment - FAN_EVENT_ON_CHILD. We never report it to user, but we do pass it in to fanotify_alloc_event() when group is reporting fid as indication that event happened on child. We will have use for this indication later on. Link: https://lore.kernel.org/r/20200716084230.30611-2-amir73il@gmail.com Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
parent
08b95c338e
commit
0badfa029e
@ -211,7 +211,8 @@ static u32 fanotify_group_event_mask(struct fsnotify_group *group,
|
||||
int data_type)
|
||||
{
|
||||
__u32 marks_mask = 0, marks_ignored_mask = 0;
|
||||
__u32 test_mask, user_mask = FANOTIFY_OUTGOING_EVENTS;
|
||||
__u32 test_mask, user_mask = FANOTIFY_OUTGOING_EVENTS |
|
||||
FANOTIFY_EVENT_FLAGS;
|
||||
const struct path *path = fsnotify_data_path(data, data_type);
|
||||
struct fsnotify_mark *mark;
|
||||
int type;
|
||||
@ -264,14 +265,18 @@ static u32 fanotify_group_event_mask(struct fsnotify_group *group,
|
||||
*
|
||||
* For backward compatibility and consistency, do not report FAN_ONDIR
|
||||
* to user in legacy fanotify mode (reporting fd) and report FAN_ONDIR
|
||||
* to user in FAN_REPORT_FID mode for all event types.
|
||||
* to user in fid mode for all event types.
|
||||
*
|
||||
* We never report FAN_EVENT_ON_CHILD to user, but we do pass it in to
|
||||
* fanotify_alloc_event() when group is reporting fid as indication
|
||||
* that event happened on child.
|
||||
*/
|
||||
if (FAN_GROUP_FLAG(group, FAN_REPORT_FID)) {
|
||||
/* Do not report FAN_ONDIR without any event */
|
||||
if (!(test_mask & ~FAN_ONDIR))
|
||||
/* Do not report event flags without any event */
|
||||
if (!(test_mask & ~FANOTIFY_EVENT_FLAGS))
|
||||
return 0;
|
||||
} else {
|
||||
user_mask &= ~FAN_ONDIR;
|
||||
user_mask &= ~FANOTIFY_EVENT_FLAGS;
|
||||
}
|
||||
|
||||
return test_mask & user_mask;
|
||||
|
Loading…
Reference in New Issue
Block a user