• Matthew Bobrowski's avatar
    fanotify: add pidfd support to the fanotify API · af579beb
    Matthew Bobrowski authored
    Introduce a new flag FAN_REPORT_PIDFD for fanotify_init(2) which
    allows userspace applications to control whether a pidfd information
    record containing a pidfd is to be returned alongside the generic
    event metadata for each event.
    
    If FAN_REPORT_PIDFD is enabled for a notification group, an additional
    struct fanotify_event_info_pidfd object type will be supplied
    alongside the generic struct fanotify_event_metadata for a single
    event. This functionality is analogous to that of FAN_REPORT_FID in
    terms of how the event structure is supplied to a userspace
    application. Usage of FAN_REPORT_PIDFD with
    FAN_REPORT_FID/FAN_REPORT_DFID_NAME is permitted, and in this case a
    struct fanotify_event_info_pidfd object will likely follow any struct
    fanotify_event_info_fid object.
    
    Currently, the usage of the FAN_REPORT_TID flag is not permitted along
    with FAN_REPORT_PIDFD as the pidfd API currently only supports the
    creation of pidfds for thread-group leaders. Additionally, usage of
    the FAN_REPORT_PIDFD flag is limited to privileged processes only
    i.e. event listeners that are running with the CAP_SYS_ADMIN
    capability. Attempting to supply the FAN_REPORT_TID initialization
    flags with FAN_REPORT_PIDFD or creating a notification group without
    CAP_SYS_ADMIN will result with -EINVAL being returned to the caller.
    
    In the event of a pidfd creation error, there are two types of error
    values that can be reported back to the listener. There is
    FAN_NOPIDFD, which will be reported in cases where the process
    responsible for generating the event has terminated prior to the event
    listener being able to read the event. Then there is FAN_EPIDFD, which
    will be reported when a more generic pidfd creation error has occurred
    when fanotify calls pidfd_create().
    
    Link: https://lore.kernel.org/r/5f9e09cff7ed62bfaa51c1369e0f7ea5f16a91aa.1628398044.git.repnop@google.comSigned-off-by: default avatarMatthew Bobrowski <repnop@google.com>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    af579beb
fanotify_user.c 42.1 KB