Jan Kara b20024
From a32e697cda27679a0327ae2cafdad8c7170f548f Mon Sep 17 00:00:00 2001
Jan Kara b20024
From: Amir Goldstein <amir73il@gmail.com>
Jan Kara b20024
Date: Fri, 22 Apr 2022 15:03:12 +0300
Jan Kara b20024
Subject: [PATCH] inotify: show inotify mask flags in proc fdinfo
Jan Kara b20024
Git-commit: a32e697cda27679a0327ae2cafdad8c7170f548f
Jan Kara b20024
Patch-mainline: v5.19-rc1
Jan Kara b20024
References: bsc#1200600
Jan Kara b20024
Jan Kara b20024
The inotify mask flags IN_ONESHOT and IN_EXCL_UNLINK are not "internal
Jan Kara b20024
to kernel" and should be exposed in procfs fdinfo so CRIU can restore
Jan Kara b20024
them.
Jan Kara b20024
Jan Kara b20024
Fixes: 6933599697c9 ("inotify: hide internal kernel bits from fdinfo")
Jan Kara b20024
Link: https://lore.kernel.org/r/20220422120327.3459282-2-amir73il@gmail.com
Jan Kara b20024
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
Jan Kara b20024
Signed-off-by: Jan Kara <jack@suse.cz>
Jan Kara b20024
Acked-by: Jan Kara <jack@suse.cz>
Jan Kara b20024
Jan Kara b20024
---
Jan Kara b20024
 fs/notify/fdinfo.c               | 11 ++---------
Jan Kara b20024
 fs/notify/inotify/inotify.h      | 12 ++++++++++++
Jan Kara b20024
 fs/notify/inotify/inotify_user.c |  2 +-
Jan Kara b20024
 3 files changed, 15 insertions(+), 10 deletions(-)
Jan Kara b20024
Jan Kara b20024
diff --git a/fs/notify/fdinfo.c b/fs/notify/fdinfo.c
Jan Kara b20024
index 57f0d5d9f934..3451708fd035 100644
Jan Kara b20024
--- a/fs/notify/fdinfo.c
Jan Kara b20024
+++ b/fs/notify/fdinfo.c
Jan Kara b20024
@@ -83,16 +83,9 @@ static void inotify_fdinfo(struct seq_file *m, struct fsnotify_mark *mark)
Jan Kara b20024
 	inode_mark = container_of(mark, struct inotify_inode_mark, fsn_mark);
Jan Kara b20024
 	inode = igrab(fsnotify_conn_inode(mark->connector));
Jan Kara b20024
 	if (inode) {
Jan Kara b20024
-		/*
Jan Kara b20024
-		 * IN_ALL_EVENTS represents all of the mask bits
Jan Kara b20024
-		 * that we expose to userspace.  There is at
Jan Kara b20024
-		 * least one bit (FS_EVENT_ON_CHILD) which is
Jan Kara b20024
-		 * used only internally to the kernel.
Jan Kara b20024
-		 */
Jan Kara b20024
-		u32 mask = mark->mask & IN_ALL_EVENTS;
Jan Kara b20024
-		seq_printf(m, "inotify wd:%x ino:%lx sdev:%x mask:%x ignored_mask:%x ",
Jan Kara b20024
+		seq_printf(m, "inotify wd:%x ino:%lx sdev:%x mask:%x ignored_mask:0 ",
Jan Kara b20024
 			   inode_mark->wd, inode->i_ino, inode->i_sb->s_dev,
Jan Kara b20024
-			   mask, mark->ignored_mask);
Jan Kara b20024
+			   inotify_mark_user_mask(mark));
Jan Kara b20024
 		show_mark_fhandle(m, inode);
Jan Kara b20024
 		seq_putc(m, '\n');
Jan Kara b20024
 		iput(inode);
Jan Kara b20024
diff --git a/fs/notify/inotify/inotify.h b/fs/notify/inotify/inotify.h
Jan Kara b20024
index 2007e3711916..8f00151eb731 100644
Jan Kara b20024
--- a/fs/notify/inotify/inotify.h
Jan Kara b20024
+++ b/fs/notify/inotify/inotify.h
Jan Kara b20024
@@ -22,6 +22,18 @@ static inline struct inotify_event_info *INOTIFY_E(struct fsnotify_event *fse)
Jan Kara b20024
 	return container_of(fse, struct inotify_event_info, fse);
Jan Kara b20024
 }
Jan Kara b20024
 
Jan Kara b20024
+/*
Jan Kara b20024
+ * INOTIFY_USER_FLAGS represents all of the mask bits that we expose to
Jan Kara b20024
+ * userspace.  There is at least one bit (FS_EVENT_ON_CHILD) which is
Jan Kara b20024
+ * used only internally to the kernel.
Jan Kara b20024
+ */
Jan Kara b20024
+#define INOTIFY_USER_MASK (IN_ALL_EVENTS | IN_ONESHOT | IN_EXCL_UNLINK)
Jan Kara b20024
+
Jan Kara b20024
+static inline __u32 inotify_mark_user_mask(struct fsnotify_mark *fsn_mark)
Jan Kara b20024
+{
Jan Kara b20024
+	return fsn_mark->mask & INOTIFY_USER_MASK;
Jan Kara b20024
+}
Jan Kara b20024
+
Jan Kara b20024
 extern void inotify_ignored_and_remove_idr(struct fsnotify_mark *fsn_mark,
Jan Kara b20024
 					   struct fsnotify_group *group);
Jan Kara b20024
 extern int inotify_handle_inode_event(struct fsnotify_mark *inode_mark,
Jan Kara b20024
diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c
Jan Kara b20024
index 54583f62dc44..3ef57db0ec9d 100644
Jan Kara b20024
--- a/fs/notify/inotify/inotify_user.c
Jan Kara b20024
+++ b/fs/notify/inotify/inotify_user.c
Jan Kara b20024
@@ -110,7 +110,7 @@ static inline __u32 inotify_arg_to_mask(struct inode *inode, u32 arg)
Jan Kara b20024
 		mask |= FS_EVENT_ON_CHILD;
Jan Kara b20024
 
Jan Kara b20024
 	/* mask off the flags used to open the fd */
Jan Kara b20024
-	mask |= (arg & (IN_ALL_EVENTS | IN_ONESHOT | IN_EXCL_UNLINK));
Jan Kara b20024
+	mask |= (arg & INOTIFY_USER_MASK);
Jan Kara b20024
 
Jan Kara b20024
 	return mask;
Jan Kara b20024
 }
Jan Kara b20024
-- 
Jan Kara b20024
2.35.3
Jan Kara b20024