mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-04 09:59:32 +00:00
![Amir Goldstein](/assets/img/avatar_default.png)
Introduce a new fanotify_init() flag FAN_REPORT_NAME. It requires the flag FAN_REPORT_DIR_FID and there is a constant for setting both flags named FAN_REPORT_DFID_NAME. For a group with flag FAN_REPORT_NAME, the parent fid and name are reported for directory entry modification events (create/detete/move) and for events on non-directory objects. Events on directories themselves are reported with their own fid and "." as the name. The parent fid and name are reported with an info record of type FAN_EVENT_INFO_TYPE_DFID_NAME, similar to the way that parent fid is reported with into type FAN_EVENT_INFO_TYPE_DFID, but with an appended null terminated name string. Link: https://lore.kernel.org/r/20200716084230.30611-21-amir73il@gmail.com Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Jan Kara <jack@suse.cz>
85 lines
2.7 KiB
C
85 lines
2.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_FANOTIFY_H
|
|
#define _LINUX_FANOTIFY_H
|
|
|
|
#include <uapi/linux/fanotify.h>
|
|
|
|
#define FAN_GROUP_FLAG(group, flag) \
|
|
((group)->fanotify_data.flags & (flag))
|
|
|
|
/*
|
|
* Flags allowed to be passed from/to userspace.
|
|
*
|
|
* We intentionally do not add new bits to the old FAN_ALL_* constants, because
|
|
* they are uapi exposed constants. If there are programs out there using
|
|
* these constant, the programs may break if re-compiled with new uapi headers
|
|
* and then run on an old kernel.
|
|
*/
|
|
#define FANOTIFY_CLASS_BITS (FAN_CLASS_NOTIF | FAN_CLASS_CONTENT | \
|
|
FAN_CLASS_PRE_CONTENT)
|
|
|
|
#define FANOTIFY_FID_BITS (FAN_REPORT_FID | FAN_REPORT_DFID_NAME)
|
|
|
|
#define FANOTIFY_INIT_FLAGS (FANOTIFY_CLASS_BITS | FANOTIFY_FID_BITS | \
|
|
FAN_REPORT_TID | \
|
|
FAN_CLOEXEC | FAN_NONBLOCK | \
|
|
FAN_UNLIMITED_QUEUE | FAN_UNLIMITED_MARKS)
|
|
|
|
#define FANOTIFY_MARK_TYPE_BITS (FAN_MARK_INODE | FAN_MARK_MOUNT | \
|
|
FAN_MARK_FILESYSTEM)
|
|
|
|
#define FANOTIFY_MARK_FLAGS (FANOTIFY_MARK_TYPE_BITS | \
|
|
FAN_MARK_ADD | \
|
|
FAN_MARK_REMOVE | \
|
|
FAN_MARK_DONT_FOLLOW | \
|
|
FAN_MARK_ONLYDIR | \
|
|
FAN_MARK_IGNORED_MASK | \
|
|
FAN_MARK_IGNORED_SURV_MODIFY | \
|
|
FAN_MARK_FLUSH)
|
|
|
|
/*
|
|
* Events that can be reported with data type FSNOTIFY_EVENT_PATH.
|
|
* Note that FAN_MODIFY can also be reported with data type
|
|
* FSNOTIFY_EVENT_INODE.
|
|
*/
|
|
#define FANOTIFY_PATH_EVENTS (FAN_ACCESS | FAN_MODIFY | \
|
|
FAN_CLOSE | FAN_OPEN | FAN_OPEN_EXEC)
|
|
|
|
/*
|
|
* Directory entry modification events - reported only to directory
|
|
* where entry is modified and not to a watching parent.
|
|
*/
|
|
#define FANOTIFY_DIRENT_EVENTS (FAN_MOVE | FAN_CREATE | FAN_DELETE)
|
|
|
|
/* Events that can only be reported with data type FSNOTIFY_EVENT_INODE */
|
|
#define FANOTIFY_INODE_EVENTS (FANOTIFY_DIRENT_EVENTS | \
|
|
FAN_ATTRIB | FAN_MOVE_SELF | FAN_DELETE_SELF)
|
|
|
|
/* Events that user can request to be notified on */
|
|
#define FANOTIFY_EVENTS (FANOTIFY_PATH_EVENTS | \
|
|
FANOTIFY_INODE_EVENTS)
|
|
|
|
/* Events that require a permission response from user */
|
|
#define FANOTIFY_PERM_EVENTS (FAN_OPEN_PERM | FAN_ACCESS_PERM | \
|
|
FAN_OPEN_EXEC_PERM)
|
|
|
|
/* Extra flags that may be reported with event or control handling of events */
|
|
#define FANOTIFY_EVENT_FLAGS (FAN_EVENT_ON_CHILD | FAN_ONDIR)
|
|
|
|
/* Events that may be reported to user */
|
|
#define FANOTIFY_OUTGOING_EVENTS (FANOTIFY_EVENTS | \
|
|
FANOTIFY_PERM_EVENTS | \
|
|
FAN_Q_OVERFLOW | FAN_ONDIR)
|
|
|
|
#define ALL_FANOTIFY_EVENT_BITS (FANOTIFY_OUTGOING_EVENTS | \
|
|
FANOTIFY_EVENT_FLAGS)
|
|
|
|
/* Do not use these old uapi constants internally */
|
|
#undef FAN_ALL_CLASS_BITS
|
|
#undef FAN_ALL_INIT_FLAGS
|
|
#undef FAN_ALL_MARK_FLAGS
|
|
#undef FAN_ALL_EVENTS
|
|
#undef FAN_ALL_PERM_EVENTS
|
|
#undef FAN_ALL_OUTGOING_EVENTS
|
|
|
|
#endif /* _LINUX_FANOTIFY_H */
|