These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / fs / notify / inotify / inotify_user.c
index 4506486..b8d08d0 100644 (file)
@@ -26,7 +26,7 @@
 #include <linux/fs.h> /* struct inode */
 #include <linux/fsnotify_backend.h>
 #include <linux/idr.h>
-#include <linux/init.h> /* module_init */
+#include <linux/init.h> /* fs_initcall */
 #include <linux/inotify.h>
 #include <linux/kernel.h> /* roundup() */
 #include <linux/namei.h> /* LOOKUP_FOLLOW */
@@ -706,7 +706,19 @@ SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname,
        int ret;
        unsigned flags = 0;
 
-       /* don't allow invalid bits: we don't want flags set */
+       /*
+        * We share a lot of code with fs/dnotify.  We also share
+        * the bit layout between inotify's IN_* and the fsnotify
+        * FS_*.  This check ensures that only the inotify IN_*
+        * bits get passed in and set in watches/events.
+        */
+       if (unlikely(mask & ~ALL_INOTIFY_BITS))
+               return -EINVAL;
+       /*
+        * Require at least one valid bit set in the mask.
+        * Without _something_ set, we would have no events to
+        * watch for.
+        */
        if (unlikely(!(mask & ALL_INOTIFY_BITS)))
                return -EINVAL;
 
@@ -812,4 +824,4 @@ static int __init inotify_user_setup(void)
 
        return 0;
 }
-module_init(inotify_user_setup);
+fs_initcall(inotify_user_setup);