Merge tag 'fsnotify_for_v6.5-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Jul 2023 21:51:37 +0000 (14:51 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Jul 2023 21:51:37 +0000 (14:51 -0700)
Pull fsnotify fix from Jan Kara:
 "A fix for fanotify to disallow creating of mount or superblock marks
  for kernel internal pseudo filesystems"

* tag 'fsnotify_for_v6.5-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
  fanotify: disallow mount/sb marks on kernel internal pseudo fs

fs/notify/fanotify/fanotify_user.c

index 95d7d87..f69c451 100644 (file)
@@ -1623,6 +1623,20 @@ static int fanotify_events_supported(struct fsnotify_group *group,
                return -EINVAL;
 
        /*
+        * mount and sb marks are not allowed on kernel internal pseudo fs,
+        * like pipe_mnt, because that would subscribe to events on all the
+        * anonynous pipes in the system.
+        *
+        * SB_NOUSER covers all of the internal pseudo fs whose objects are not
+        * exposed to user's mount namespace, but there are other SB_KERNMOUNT
+        * fs, like nsfs, debugfs, for which the value of allowing sb and mount
+        * mark is questionable. For now we leave them alone.
+        */
+       if (mark_type != FAN_MARK_INODE &&
+           path->mnt->mnt_sb->s_flags & SB_NOUSER)
+               return -EINVAL;
+
+       /*
         * We shouldn't have allowed setting dirent events and the directory
         * flags FAN_ONDIR and FAN_EVENT_ON_CHILD in mask of non-dir inode,
         * but because we always allowed it, error only when using new APIs.