• Amir Goldstein's avatar
    fanotify: fix handling of events on child sub-directory · 20663629
    Amir Goldstein authored
    commit b469e7e4 upstream.
    
    When an event is reported on a sub-directory and the parent inode has
    a mark mask with FS_EVENT_ON_CHILD|FS_ISDIR, the event will be sent to
    fsnotify() even if the event type is not in the parent mark mask
    (e.g. FS_OPEN).
    
    Further more, if that event happened on a mount or a filesystem with
    a mount/sb mark that does have that event type in their mask, the "on
    child" event will be reported on the mount/sb mark.  That is not
    desired, because user will get a duplicate event for the same action.
    
    Note that the event reported on the victim inode is never merged with
    the event reported on the parent inode, because of the check in
    should_merge(): old_fsn->inode == new_fsn->inode.
    
    Fix this by looking for a match of an actual event type (i.e. not just
    FS_ISDIR) in parent's inode mark mask and by not reporting an "on child"
    event to group if event type is only found on mount/sb marks.
    
    [backport hint: The bug seems to have always been in fanotify, but this
                    patch will only apply cleanly to v4.19.y]
    
    Cc: <stable@vger.kernel.org> # v4.19
    Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    [amir: backport to v4.19]
    Signed-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    20663629
fanotify.c 7.6 KB