From: Seyediman Seyedarab <imandevel@gmail.com>
To: jack@suse.cz, amir73il@gmail.com
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kernel-mentees@lists.linux.dev,
Seyediman Seyedarab <ImanDevel@gmail.com>
Subject: [PATCH] inotify: disallow watches on unsupported filesystems
Date: Tue, 4 Mar 2025 03:00:44 -0500 [thread overview]
Message-ID: <20250304080044.7623-1-ImanDevel@gmail.com> (raw)
currently, inotify_add_watch() allows adding watches on filesystems
where inotify does not work correctly, without returning an explicit
error. This behavior is misleading and can cause confusion for users
expecting inotify to work on a certain filesystem.
This patch explicitly rejects inotify usage on filesystems where it
is known to be unreliable, such as sysfs, procfs, overlayfs, 9p, fuse,
and others.
By returning -EOPNOTSUPP, the limitation is made explicit, preventing
users from making incorrect assumptions about inotify behavior.
Signed-off-by: Seyediman Seyedarab <ImanDevel@gmail.com>
---
fs/notify/inotify/inotify_user.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c
index b372fb2c56bd..9b96438f4d46 100644
--- a/fs/notify/inotify/inotify_user.c
+++ b/fs/notify/inotify/inotify_user.c
@@ -87,6 +87,13 @@ static const struct ctl_table inotify_table[] = {
},
};
+static const unsigned long unwatchable_fs[] = {
+ PROC_SUPER_MAGIC, SYSFS_MAGIC, TRACEFS_MAGIC,
+ DEBUGFS_MAGIC, CGROUP_SUPER_MAGIC, SECURITYFS_MAGIC,
+ RAMFS_MAGIC, DEVPTS_SUPER_MAGIC, BPF_FS_MAGIC,
+ OVERLAYFS_SUPER_MAGIC, FUSE_SUPER_MAGIC, NFS_SUPER_MAGIC
+};
+
static void __init inotify_sysctls_init(void)
{
register_sysctl("fs/inotify", inotify_table);
@@ -690,6 +697,14 @@ static struct fsnotify_group *inotify_new_group(unsigned int max_events)
}
+static inline bool is_unwatchable_fs(struct inode *inode)
+{
+ for (int i = 0; i < ARRAY_SIZE(unwatchable_fs); i++)
+ if (inode->i_sb->s_magic == unwatchable_fs[i])
+ return true;
+ return false;
+}
+
/* inotify syscalls */
static int do_inotify_init(int flags)
{
@@ -777,6 +792,13 @@ SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname,
inode = path.dentry->d_inode;
group = fd_file(f)->private_data;
+ /* ensure that inotify is only used on supported filesystems */
+ if (is_unwatchable_fs(inode)) {
+ pr_debug("%s: inotify is not supported on filesystem with s_magic=0x%lx\n",
+ __func__, inode->i_sb->s_magic);
+ return -EOPNOTSUPP;
+ }
+
/* create/update an inode mark */
ret = inotify_update_watch(group, inode, mask);
path_put(&path);
--
2.48.1
next reply other threads:[~2025-03-04 7:59 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-04 8:00 Seyediman Seyedarab [this message]
2025-03-04 11:57 ` [PATCH] inotify: disallow watches on unsupported filesystems Amir Goldstein
2025-03-04 16:06 ` Seyediman Seyedarab
2025-03-04 16:41 ` Amir Goldstein
2025-03-04 19:07 ` Seyediman Seyedarab
2025-03-04 20:04 ` Amir Goldstein
2025-03-05 10:28 ` kernel test robot
2025-03-05 15:08 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250304080044.7623-1-ImanDevel@gmail.com \
--to=imandevel@gmail.com \
--cc=amir73il@gmail.com \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel-mentees@lists.linux.dev \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).