1*49cdfc7eSAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*49cdfc7eSAndroid Build Coastguard Worker /* 3*49cdfc7eSAndroid Build Coastguard Worker * Copyright (c) 2012-2022 Linux Test Project. All Rights Reserved. 4*49cdfc7eSAndroid Build Coastguard Worker * Author: Jan Kara, November 2013 5*49cdfc7eSAndroid Build Coastguard Worker */ 6*49cdfc7eSAndroid Build Coastguard Worker 7*49cdfc7eSAndroid Build Coastguard Worker #ifndef LAPI_FANOTIFY_H__ 8*49cdfc7eSAndroid Build Coastguard Worker #define LAPI_FANOTIFY_H__ 9*49cdfc7eSAndroid Build Coastguard Worker 10*49cdfc7eSAndroid Build Coastguard Worker #include "config.h" 11*49cdfc7eSAndroid Build Coastguard Worker #include <sys/fanotify.h> 12*49cdfc7eSAndroid Build Coastguard Worker #include <linux/types.h> 13*49cdfc7eSAndroid Build Coastguard Worker 14*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_REPORT_TID 15*49cdfc7eSAndroid Build Coastguard Worker #define FAN_REPORT_TID 0x00000100 16*49cdfc7eSAndroid Build Coastguard Worker #endif 17*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_REPORT_FID 18*49cdfc7eSAndroid Build Coastguard Worker #define FAN_REPORT_FID 0x00000200 19*49cdfc7eSAndroid Build Coastguard Worker #endif 20*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_REPORT_DIR_FID 21*49cdfc7eSAndroid Build Coastguard Worker #define FAN_REPORT_DIR_FID 0x00000400 22*49cdfc7eSAndroid Build Coastguard Worker #endif 23*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_REPORT_NAME 24*49cdfc7eSAndroid Build Coastguard Worker #define FAN_REPORT_NAME 0x00000800 25*49cdfc7eSAndroid Build Coastguard Worker #define FAN_REPORT_DFID_NAME (FAN_REPORT_DIR_FID | FAN_REPORT_NAME) 26*49cdfc7eSAndroid Build Coastguard Worker #endif 27*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_REPORT_PIDFD 28*49cdfc7eSAndroid Build Coastguard Worker #define FAN_REPORT_PIDFD 0x00000080 29*49cdfc7eSAndroid Build Coastguard Worker #endif 30*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_REPORT_TARGET_FID 31*49cdfc7eSAndroid Build Coastguard Worker #define FAN_REPORT_TARGET_FID 0x00001000 32*49cdfc7eSAndroid Build Coastguard Worker #define FAN_REPORT_DFID_NAME_TARGET (FAN_REPORT_DFID_NAME | \ 33*49cdfc7eSAndroid Build Coastguard Worker FAN_REPORT_FID | FAN_REPORT_TARGET_FID) 34*49cdfc7eSAndroid Build Coastguard Worker #endif 35*49cdfc7eSAndroid Build Coastguard Worker 36*49cdfc7eSAndroid Build Coastguard Worker /* Non-uapi convenience macros */ 37*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_REPORT_DFID_NAME_FID 38*49cdfc7eSAndroid Build Coastguard Worker #define FAN_REPORT_DFID_NAME_FID (FAN_REPORT_DFID_NAME | FAN_REPORT_FID) 39*49cdfc7eSAndroid Build Coastguard Worker #endif 40*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_REPORT_DFID_FID 41*49cdfc7eSAndroid Build Coastguard Worker #define FAN_REPORT_DFID_FID (FAN_REPORT_DIR_FID | FAN_REPORT_FID) 42*49cdfc7eSAndroid Build Coastguard Worker #endif 43*49cdfc7eSAndroid Build Coastguard Worker 44*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MARK_INODE 45*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MARK_INODE 0 46*49cdfc7eSAndroid Build Coastguard Worker #endif 47*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MARK_FILESYSTEM 48*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MARK_FILESYSTEM 0x00000100 49*49cdfc7eSAndroid Build Coastguard Worker #endif 50*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MARK_EVICTABLE 51*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MARK_EVICTABLE 0x00000200 52*49cdfc7eSAndroid Build Coastguard Worker #endif 53*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MARK_IGNORE 54*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MARK_IGNORE 0x00000400 55*49cdfc7eSAndroid Build Coastguard Worker #endif 56*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MARK_IGNORE_SURV 57*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MARK_IGNORE_SURV (FAN_MARK_IGNORE | FAN_MARK_IGNORED_SURV_MODIFY) 58*49cdfc7eSAndroid Build Coastguard Worker #endif 59*49cdfc7eSAndroid Build Coastguard Worker /* Non-uapi convenience macros */ 60*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MARK_IGNORED_SURV 61*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MARK_IGNORED_SURV (FAN_MARK_IGNORED_MASK | \ 62*49cdfc7eSAndroid Build Coastguard Worker FAN_MARK_IGNORED_SURV_MODIFY) 63*49cdfc7eSAndroid Build Coastguard Worker #endif 64*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MARK_PARENT 65*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MARK_PARENT FAN_MARK_ONLYDIR 66*49cdfc7eSAndroid Build Coastguard Worker #endif 67*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MARK_SUBDIR 68*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MARK_SUBDIR FAN_MARK_ONLYDIR 69*49cdfc7eSAndroid Build Coastguard Worker #endif 70*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MARK_TYPES 71*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MARK_TYPES (FAN_MARK_INODE | FAN_MARK_MOUNT | FAN_MARK_FILESYSTEM) 72*49cdfc7eSAndroid Build Coastguard Worker #endif 73*49cdfc7eSAndroid Build Coastguard Worker 74*49cdfc7eSAndroid Build Coastguard Worker /* New dirent event masks */ 75*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_ATTRIB 76*49cdfc7eSAndroid Build Coastguard Worker #define FAN_ATTRIB 0x00000004 77*49cdfc7eSAndroid Build Coastguard Worker #endif 78*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MOVED_FROM 79*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MOVED_FROM 0x00000040 80*49cdfc7eSAndroid Build Coastguard Worker #endif 81*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MOVED_TO 82*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MOVED_TO 0x00000080 83*49cdfc7eSAndroid Build Coastguard Worker #endif 84*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_CREATE 85*49cdfc7eSAndroid Build Coastguard Worker #define FAN_CREATE 0x00000100 86*49cdfc7eSAndroid Build Coastguard Worker #endif 87*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_DELETE 88*49cdfc7eSAndroid Build Coastguard Worker #define FAN_DELETE 0x00000200 89*49cdfc7eSAndroid Build Coastguard Worker #endif 90*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_DELETE_SELF 91*49cdfc7eSAndroid Build Coastguard Worker #define FAN_DELETE_SELF 0x00000400 92*49cdfc7eSAndroid Build Coastguard Worker #endif 93*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MOVE_SELF 94*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MOVE_SELF 0x00000800 95*49cdfc7eSAndroid Build Coastguard Worker #endif 96*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_MOVE 97*49cdfc7eSAndroid Build Coastguard Worker #define FAN_MOVE (FAN_MOVED_FROM | FAN_MOVED_TO) 98*49cdfc7eSAndroid Build Coastguard Worker #endif 99*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_OPEN_EXEC 100*49cdfc7eSAndroid Build Coastguard Worker #define FAN_OPEN_EXEC 0x00001000 101*49cdfc7eSAndroid Build Coastguard Worker #endif 102*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_OPEN_EXEC_PERM 103*49cdfc7eSAndroid Build Coastguard Worker #define FAN_OPEN_EXEC_PERM 0x00040000 104*49cdfc7eSAndroid Build Coastguard Worker #endif 105*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_FS_ERROR 106*49cdfc7eSAndroid Build Coastguard Worker #define FAN_FS_ERROR 0x00008000 107*49cdfc7eSAndroid Build Coastguard Worker #endif 108*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_RENAME 109*49cdfc7eSAndroid Build Coastguard Worker #define FAN_RENAME 0x10000000 110*49cdfc7eSAndroid Build Coastguard Worker #endif 111*49cdfc7eSAndroid Build Coastguard Worker 112*49cdfc7eSAndroid Build Coastguard Worker /* Additional error status codes that can be returned to userspace */ 113*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_NOPIDFD 114*49cdfc7eSAndroid Build Coastguard Worker #define FAN_NOPIDFD -1 115*49cdfc7eSAndroid Build Coastguard Worker #endif 116*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_EPIDFD 117*49cdfc7eSAndroid Build Coastguard Worker #define FAN_EPIDFD -2 118*49cdfc7eSAndroid Build Coastguard Worker #endif 119*49cdfc7eSAndroid Build Coastguard Worker 120*49cdfc7eSAndroid Build Coastguard Worker /* Flags required for unprivileged user group */ 121*49cdfc7eSAndroid Build Coastguard Worker #define FANOTIFY_REQUIRED_USER_INIT_FLAGS (FAN_REPORT_FID) 122*49cdfc7eSAndroid Build Coastguard Worker 123*49cdfc7eSAndroid Build Coastguard Worker /* 124*49cdfc7eSAndroid Build Coastguard Worker * FAN_ALL_PERM_EVENTS has been deprecated, so any new permission events 125*49cdfc7eSAndroid Build Coastguard Worker * are not to be added to it. To cover the instance where a new permission 126*49cdfc7eSAndroid Build Coastguard Worker * event is defined, we create a new macro that is to include all 127*49cdfc7eSAndroid Build Coastguard Worker * permission events. Any new permission events should be added to this 128*49cdfc7eSAndroid Build Coastguard Worker * macro. 129*49cdfc7eSAndroid Build Coastguard Worker */ 130*49cdfc7eSAndroid Build Coastguard Worker #define LTP_ALL_PERM_EVENTS (FAN_OPEN_PERM | FAN_OPEN_EXEC_PERM | \ 131*49cdfc7eSAndroid Build Coastguard Worker FAN_ACCESS_PERM) 132*49cdfc7eSAndroid Build Coastguard Worker 133*49cdfc7eSAndroid Build Coastguard Worker struct fanotify_group_type { 134*49cdfc7eSAndroid Build Coastguard Worker unsigned int flag; 135*49cdfc7eSAndroid Build Coastguard Worker const char *name; 136*49cdfc7eSAndroid Build Coastguard Worker }; 137*49cdfc7eSAndroid Build Coastguard Worker 138*49cdfc7eSAndroid Build Coastguard Worker struct fanotify_mark_type { 139*49cdfc7eSAndroid Build Coastguard Worker unsigned int flag; 140*49cdfc7eSAndroid Build Coastguard Worker const char *name; 141*49cdfc7eSAndroid Build Coastguard Worker }; 142*49cdfc7eSAndroid Build Coastguard Worker 143*49cdfc7eSAndroid Build Coastguard Worker #ifndef __kernel_fsid_t 144*49cdfc7eSAndroid Build Coastguard Worker typedef struct { 145*49cdfc7eSAndroid Build Coastguard Worker int val[2]; 146*49cdfc7eSAndroid Build Coastguard Worker } lapi_fsid_t; 147*49cdfc7eSAndroid Build Coastguard Worker #define __kernel_fsid_t lapi_fsid_t 148*49cdfc7eSAndroid Build Coastguard Worker #endif /* __kernel_fsid_t */ 149*49cdfc7eSAndroid Build Coastguard Worker 150*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_EVENT_INFO_TYPE_FID 151*49cdfc7eSAndroid Build Coastguard Worker #define FAN_EVENT_INFO_TYPE_FID 1 152*49cdfc7eSAndroid Build Coastguard Worker #endif 153*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_EVENT_INFO_TYPE_DFID_NAME 154*49cdfc7eSAndroid Build Coastguard Worker #define FAN_EVENT_INFO_TYPE_DFID_NAME 2 155*49cdfc7eSAndroid Build Coastguard Worker #endif 156*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_EVENT_INFO_TYPE_DFID 157*49cdfc7eSAndroid Build Coastguard Worker #define FAN_EVENT_INFO_TYPE_DFID 3 158*49cdfc7eSAndroid Build Coastguard Worker #endif 159*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_EVENT_INFO_TYPE_PIDFD 160*49cdfc7eSAndroid Build Coastguard Worker #define FAN_EVENT_INFO_TYPE_PIDFD 4 161*49cdfc7eSAndroid Build Coastguard Worker #endif 162*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_EVENT_INFO_TYPE_ERROR 163*49cdfc7eSAndroid Build Coastguard Worker #define FAN_EVENT_INFO_TYPE_ERROR 5 164*49cdfc7eSAndroid Build Coastguard Worker #endif 165*49cdfc7eSAndroid Build Coastguard Worker 166*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_EVENT_INFO_TYPE_OLD_DFID_NAME 167*49cdfc7eSAndroid Build Coastguard Worker #define FAN_EVENT_INFO_TYPE_OLD_DFID_NAME 10 168*49cdfc7eSAndroid Build Coastguard Worker #endif 169*49cdfc7eSAndroid Build Coastguard Worker #ifndef FAN_EVENT_INFO_TYPE_NEW_DFID_NAME 170*49cdfc7eSAndroid Build Coastguard Worker #define FAN_EVENT_INFO_TYPE_NEW_DFID_NAME 12 171*49cdfc7eSAndroid Build Coastguard Worker #endif 172*49cdfc7eSAndroid Build Coastguard Worker 173*49cdfc7eSAndroid Build Coastguard Worker #ifndef HAVE_STRUCT_FANOTIFY_EVENT_INFO_HEADER 174*49cdfc7eSAndroid Build Coastguard Worker struct fanotify_event_info_header { 175*49cdfc7eSAndroid Build Coastguard Worker uint8_t info_type; 176*49cdfc7eSAndroid Build Coastguard Worker uint8_t pad; 177*49cdfc7eSAndroid Build Coastguard Worker uint16_t len; 178*49cdfc7eSAndroid Build Coastguard Worker }; 179*49cdfc7eSAndroid Build Coastguard Worker #endif /* HAVE_STRUCT_FANOTIFY_EVENT_INFO_HEADER */ 180*49cdfc7eSAndroid Build Coastguard Worker 181*49cdfc7eSAndroid Build Coastguard Worker #ifndef HAVE_STRUCT_FANOTIFY_EVENT_INFO_FID 182*49cdfc7eSAndroid Build Coastguard Worker struct fanotify_event_info_fid { 183*49cdfc7eSAndroid Build Coastguard Worker struct fanotify_event_info_header hdr; 184*49cdfc7eSAndroid Build Coastguard Worker __kernel_fsid_t fsid; 185*49cdfc7eSAndroid Build Coastguard Worker unsigned char handle[0]; 186*49cdfc7eSAndroid Build Coastguard Worker }; 187*49cdfc7eSAndroid Build Coastguard Worker #endif /* HAVE_STRUCT_FANOTIFY_EVENT_INFO_FID */ 188*49cdfc7eSAndroid Build Coastguard Worker 189*49cdfc7eSAndroid Build Coastguard Worker #ifndef HAVE_STRUCT_FANOTIFY_EVENT_INFO_PIDFD 190*49cdfc7eSAndroid Build Coastguard Worker struct fanotify_event_info_pidfd { 191*49cdfc7eSAndroid Build Coastguard Worker struct fanotify_event_info_header hdr; 192*49cdfc7eSAndroid Build Coastguard Worker int32_t pidfd; 193*49cdfc7eSAndroid Build Coastguard Worker }; 194*49cdfc7eSAndroid Build Coastguard Worker #endif /* HAVE_STRUCT_FANOTIFY_EVENT_INFO_PIDFD */ 195*49cdfc7eSAndroid Build Coastguard Worker 196*49cdfc7eSAndroid Build Coastguard Worker #ifndef HAVE_STRUCT_FANOTIFY_EVENT_INFO_ERROR 197*49cdfc7eSAndroid Build Coastguard Worker struct fanotify_event_info_error { 198*49cdfc7eSAndroid Build Coastguard Worker struct fanotify_event_info_header hdr; 199*49cdfc7eSAndroid Build Coastguard Worker __s32 error; 200*49cdfc7eSAndroid Build Coastguard Worker __u32 error_count; 201*49cdfc7eSAndroid Build Coastguard Worker }; 202*49cdfc7eSAndroid Build Coastguard Worker #endif /* HAVE_STRUCT_FANOTIFY_EVENT_INFO_ERROR */ 203*49cdfc7eSAndroid Build Coastguard Worker 204*49cdfc7eSAndroid Build Coastguard Worker /* NOTE: only for struct fanotify_event_info_fid */ 205*49cdfc7eSAndroid Build Coastguard Worker #ifdef HAVE_STRUCT_FANOTIFY_EVENT_INFO_FID_FSID___VAL 206*49cdfc7eSAndroid Build Coastguard Worker # define FSID_VAL_MEMBER(fsid, i) (fsid.__val[i]) 207*49cdfc7eSAndroid Build Coastguard Worker #else 208*49cdfc7eSAndroid Build Coastguard Worker # define FSID_VAL_MEMBER(fsid, i) (fsid.val[i]) 209*49cdfc7eSAndroid Build Coastguard Worker #endif /* HAVE_STRUCT_FANOTIFY_EVENT_INFO_FID_FSID___VAL */ 210*49cdfc7eSAndroid Build Coastguard Worker 211*49cdfc7eSAndroid Build Coastguard Worker /* linux/exportfs.h */ 212*49cdfc7eSAndroid Build Coastguard Worker #ifndef FILEID_INVALID 213*49cdfc7eSAndroid Build Coastguard Worker # define FILEID_INVALID 0xff 214*49cdfc7eSAndroid Build Coastguard Worker #endif 215*49cdfc7eSAndroid Build Coastguard Worker 216*49cdfc7eSAndroid Build Coastguard Worker #endif /* LAPI_FANOTIFY_H__ */ 217