fanotify: disallow mount/sb marks on kernel internal pseudo fs
[sfrench/cifs-2.6.git] / fs / notify / fanotify / fanotify_user.c
index 95d7d8790bc36abcfc1354e5f1f66ebc963cbfe7..f69c451018e33defb493eef93b538b6507138422 100644 (file)
@@ -1622,6 +1622,20 @@ static int fanotify_events_supported(struct fsnotify_group *group,
            path->mnt->mnt_sb->s_type->fs_flags & FS_DISALLOW_NOTIFY_PERM)
                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,