• Amir Goldstein's avatar
    fanotify: fix merging marks masks with FAN_ONDIR · 55bf882c
    Amir Goldstein authored
    Change the logic of FAN_ONDIR in two ways that are similar to the logic
    of FAN_EVENT_ON_CHILD, that was fixed in commit 54a307ba ("fanotify:
    fix logic of events on child"):
    
    1. The flag is meaningless in ignore mask
    2. The flag refers only to events in the mask of the mark where it is set
    
    This is what the fanotify_mark.2 man page says about FAN_ONDIR:
    "Without this flag, only events for files are created."  It doesn't
    say anything about setting this flag in ignore mask to stop getting
    events on directories nor can I think of any setup where this capability
    would be useful.
    
    Currently, when marks masks are merged, the FAN_ONDIR flag set in one
    mark affects the events that are set in another mark's mask and this
    behavior causes unexpected results.  For example, a user adds a mark on a
    directory with mask FAN_ATTRIB | FAN_ONDIR and a mount mark with mask
    FAN_OPEN (without FAN_ONDIR).  An opendir() of that directory (which is
    inside that mount) generates a FAN_OPEN event even though neither of the
    marks requested to get open events on directories.
    
    Link: https://lore.kernel.org/r/20200319151022.31456-10-amir73il@gmail.comSigned-off-by: default avatarAmir Goldstein <amir73il@gmail.com>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    55bf882c
fanotify.c 14.7 KB