aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/fs/exec.c
diff options
context:
space:
mode:
authorAmir Goldstein <amir73il@gmail.com>2023-06-11 15:24:29 +0300
committerJan Kara <jack@suse.cz>2023-06-12 10:43:45 +0200
commit7b8c9d7bb4570ee4800642009c8f2d9756004552 (patch)
tree807f50d866296846244e9cc88196c6dbd7e72022 /fs/exec.c
parentexportfs: check for error return value from exportfs_encode_*() (diff)
downloadwireguard-linux-7b8c9d7bb4570ee4800642009c8f2d9756004552.tar.xz
wireguard-linux-7b8c9d7bb4570ee4800642009c8f2d9756004552.zip
fsnotify: move fsnotify_open() hook into do_dentry_open()
fsnotify_open() hook is called only from high level system calls context and not called for the very many helpers to open files. This may makes sense for many of the special file open cases, but it is inconsistent with fsnotify_close() hook that is called for every last fput() of on a file object with FMODE_OPENED. As a result, it is possible to observe ACCESS, MODIFY and CLOSE events without ever observing an OPEN event. Fix this inconsistency by replacing all the fsnotify_open() hooks with a single hook inside do_dentry_open(). If there are special cases that would like to opt-out of the possible overhead of fsnotify() call in fsnotify_open(), they would probably also want to avoid the overhead of fsnotify() call in the rest of the fsnotify hooks, so they should be opening that file with the __FMODE_NONOTIFY flag. However, in the majority of those cases, the s_fsnotify_connectors optimization in fsnotify_parent() would be sufficient to avoid the overhead of fsnotify() call anyway. Signed-off-by: Amir Goldstein <amir73il@gmail.com> Signed-off-by: Jan Kara <jack@suse.cz> Message-Id: <20230611122429.1499617-1-amir73il@gmail.com>
Diffstat (limited to 'fs/exec.c')
-rw-r--r--fs/exec.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/fs/exec.c b/fs/exec.c
index a466e797c8e2..238473de1ec5 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -152,8 +152,6 @@ SYSCALL_DEFINE1(uselib, const char __user *, library)
path_noexec(&file->f_path)))
goto exit;
- fsnotify_open(file);
-
error = -ENOEXEC;
read_lock(&binfmt_lock);
@@ -934,9 +932,6 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)
if (err)
goto exit;
- if (name->name[0] != '\0')
- fsnotify_open(file);
-
out:
return file;