fanotify: mask out special event flags from ignored mask
authorAmir Goldstein <amir73il@gmail.com>
Thu, 16 Jul 2020 08:42:13 +0000 (11:42 +0300)
committerJan Kara <jack@suse.cz>
Mon, 27 Jul 2020 19:23:36 +0000 (21:23 +0200)
The special event flags (FAN_ONDIR, FAN_EVENT_ON_CHILD) never had
any meaning in ignored mask. Mask them out explicitly.

Link: https://lore.kernel.org/r/20200716084230.30611-6-amir73il@gmail.com
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/notify/fanotify/fanotify_user.c

index 1e04caf..6d30beb 100644 (file)
@@ -1040,6 +1040,7 @@ static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask,
        __kernel_fsid_t __fsid, *fsid = NULL;
        u32 valid_mask = FANOTIFY_EVENTS | FANOTIFY_EVENT_FLAGS;
        unsigned int mark_type = flags & FANOTIFY_MARK_TYPE_BITS;
+       bool ignored = flags & FAN_MARK_IGNORED_MASK;
        unsigned int obj_type, fid_mode;
        int ret;
 
@@ -1087,6 +1088,10 @@ static int do_fanotify_mark(int fanotify_fd, unsigned int flags, __u64 mask,
        if (mask & ~valid_mask)
                return -EINVAL;
 
+       /* Event flags (ONDIR, ON_CHILD) are meaningless in ignored mask */
+       if (ignored)
+               mask &= ~FANOTIFY_EVENT_FLAGS;
+
        f = fdget(fanotify_fd);
        if (unlikely(!f.file))
                return -EBADF;