mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 07:04:10 +08:00
fanotify: do not send events for irregular files
fanotify_should_send_event has a test to see if an object is a file or directory and does not send an event otherwise. The problem is that the test is actually checking if the object with a mark is a file or directory, not if the object the event happened on is a file or directory. We should check the latter. Signed-off-by: Eric Paris <eparis@redhat.com>
This commit is contained in:
parent
4afeff8505
commit
e1c048ba78
@ -160,20 +160,21 @@ static bool fanotify_should_send_event(struct fsnotify_group *group,
|
||||
__u32 event_mask, void *data, int data_type)
|
||||
{
|
||||
__u32 marks_mask, marks_ignored_mask;
|
||||
struct path *path = data;
|
||||
|
||||
pr_debug("%s: group=%p to_tell=%p inode_mark=%p vfsmnt_mark=%p "
|
||||
"mask=%x data=%p data_type=%d\n", __func__, group, to_tell,
|
||||
inode_mark, vfsmnt_mark, event_mask, data, data_type);
|
||||
|
||||
/* sorry, fanotify only gives a damn about files and dirs */
|
||||
if (!S_ISREG(to_tell->i_mode) &&
|
||||
!S_ISDIR(to_tell->i_mode))
|
||||
return false;
|
||||
|
||||
/* if we don't have enough info to send an event to userspace say no */
|
||||
if (data_type != FSNOTIFY_EVENT_PATH)
|
||||
return false;
|
||||
|
||||
/* sorry, fanotify only gives a damn about files and dirs */
|
||||
if (!S_ISREG(path->dentry->d_inode->i_mode) &&
|
||||
!S_ISDIR(path->dentry->d_inode->i_mode))
|
||||
return false;
|
||||
|
||||
if (inode_mark && vfsmnt_mark) {
|
||||
marks_mask = (vfsmnt_mark->mask | inode_mark->mask);
|
||||
marks_ignored_mask = (vfsmnt_mark->ignored_mask | inode_mark->ignored_mask);
|
||||
|
Loading…
Reference in New Issue
Block a user