Blame view

include/linux/fanotify.h 2.92 KB
ff0b16a98   Eric Paris   fanotify: fscking...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  #ifndef _LINUX_FANOTIFY_H
  #define _LINUX_FANOTIFY_H
  
  #include <linux/types.h>
  
  /* the following events that user-space can register for */
  #define FAN_ACCESS		0x00000001	/* File was accessed */
  #define FAN_MODIFY		0x00000002	/* File was modified */
  #define FAN_CLOSE_WRITE		0x00000008	/* Unwrittable file closed */
  #define FAN_CLOSE_NOWRITE	0x00000010	/* Writtable file closed */
  #define FAN_OPEN		0x00000020	/* File was opened */
  
  #define FAN_EVENT_ON_CHILD	0x08000000	/* interested in child events */
  
  /* FIXME currently Q's have no limit.... */
  #define FAN_Q_OVERFLOW		0x00004000	/* Event queued overflowed */
9e66e4233   Eric Paris   fanotify: permiss...
17
18
  #define FAN_OPEN_PERM		0x00010000	/* File open in perm check */
  #define FAN_ACCESS_PERM		0x00020000	/* File accessed in perm check */
ff0b16a98   Eric Paris   fanotify: fscking...
19
20
  /* helper events */
  #define FAN_CLOSE		(FAN_CLOSE_WRITE | FAN_CLOSE_NOWRITE) /* close */
2a3edf860   Eric Paris   fanotify: fanotif...
21
  /* flags used for fanotify_init() */
52c923dd0   Eric Paris   fanotify: fanotif...
22
23
24
25
  #define FAN_CLOEXEC		0x00000001
  #define FAN_NONBLOCK		0x00000002
  
  #define FAN_ALL_INIT_FLAGS	(FAN_CLOEXEC | FAN_NONBLOCK)
2a3edf860   Eric Paris   fanotify: fanotif...
26
27
28
29
30
31
  
  /* flags used for fanotify_modify_mark() */
  #define FAN_MARK_ADD		0x00000001
  #define FAN_MARK_REMOVE		0x00000002
  #define FAN_MARK_DONT_FOLLOW	0x00000004
  #define FAN_MARK_ONLYDIR	0x00000008
eac8e9e80   Andreas Gruenbacher   fanotify: rename ...
32
  #define FAN_MARK_MOUNT		0x00000010
b9e4e3bd0   Eric Paris   fanotify: allow u...
33
  #define FAN_MARK_IGNORED_MASK	0x00000020
c9778a98e   Eric Paris   fanotify: allow i...
34
  #define FAN_MARK_IGNORED_SURV_MODIFY	0x00000040
4d92604cc   Eric Paris   fanotify: clear a...
35
  #define FAN_MARK_FLUSH		0x00000080
2a3edf860   Eric Paris   fanotify: fanotif...
36
37
38
39
  
  #define FAN_ALL_MARK_FLAGS	(FAN_MARK_ADD |\
  				 FAN_MARK_REMOVE |\
  				 FAN_MARK_DONT_FOLLOW |\
0ff21db9f   Eric Paris   fanotify: hooks t...
40
  				 FAN_MARK_ONLYDIR |\
b9e4e3bd0   Eric Paris   fanotify: allow u...
41
  				 FAN_MARK_MOUNT |\
c9778a98e   Eric Paris   fanotify: allow i...
42
43
  				 FAN_MARK_IGNORED_MASK |\
  				 FAN_MARK_IGNORED_SURV_MODIFY)
2a3edf860   Eric Paris   fanotify: fanotif...
44

ff0b16a98   Eric Paris   fanotify: fscking...
45
46
47
48
49
50
51
52
53
  /*
   * All of the events - we build the list by hand so that we can add flags in
   * the future and not break backward compatibility.  Apps will get only the
   * events that they originally wanted.  Be sure to add new events here!
   */
  #define FAN_ALL_EVENTS (FAN_ACCESS |\
  			FAN_MODIFY |\
  			FAN_CLOSE |\
  			FAN_OPEN)
9e66e4233   Eric Paris   fanotify: permiss...
54
55
56
57
58
  /*
   * All events which require a permission response from userspace
   */
  #define FAN_ALL_PERM_EVENTS (FAN_OPEN_PERM |\
  			     FAN_ACCESS_PERM)
a1014f102   Eric Paris   fanotify: send ev...
59
  #define FAN_ALL_OUTGOING_EVENTS	(FAN_ALL_EVENTS |\
9e66e4233   Eric Paris   fanotify: permiss...
60
  				 FAN_ALL_PERM_EVENTS |\
a1014f102   Eric Paris   fanotify: send ev...
61
  				 FAN_Q_OVERFLOW)
0fb85621d   Tvrtko Ursulin   fanotify: resize ...
62
  #define FANOTIFY_METADATA_VERSION	2
a1014f102   Eric Paris   fanotify: send ev...
63
64
65
66
  
  struct fanotify_event_metadata {
  	__u32 event_len;
  	__u32 vers;
a1014f102   Eric Paris   fanotify: send ev...
67
  	__u64 mask;
0fb85621d   Tvrtko Ursulin   fanotify: resize ...
68
69
  	__s32 fd;
  	__s32 pid;
a1014f102   Eric Paris   fanotify: send ev...
70
  } __attribute__ ((packed));
b2d879096   Eric Paris   fanotify: userspa...
71
72
73
74
  struct fanotify_response {
  	__s32 fd;
  	__u32 response;
  } __attribute__ ((packed));
9e66e4233   Eric Paris   fanotify: permiss...
75
76
77
  /* Legit userspace responses to a _PERM event */
  #define FAN_ALLOW	0x01
  #define FAN_DENY	0x02
a1014f102   Eric Paris   fanotify: send ev...
78
79
80
81
82
83
84
85
86
87
  /* Helper functions to deal with fanotify_event_metadata buffers */
  #define FAN_EVENT_METADATA_LEN (sizeof(struct fanotify_event_metadata))
  
  #define FAN_EVENT_NEXT(meta, len) ((len) -= (meta)->event_len, \
  				   (struct fanotify_event_metadata*)(((char *)(meta)) + \
  				   (meta)->event_len))
  
  #define FAN_EVENT_OK(meta, len)	((long)(len) >= (long)FAN_EVENT_METADATA_LEN && \
  				(long)(meta)->event_len >= (long)FAN_EVENT_METADATA_LEN && \
  				(long)(meta)->event_len <= (long)(len))
ff0b16a98   Eric Paris   fanotify: fscking...
88
  #endif /* _LINUX_FANOTIFY_H */