fsnotify: implement a default maximum queue depth
authorEric Paris <eparis@redhat.com>
Thu, 28 Oct 2010 21:21:57 +0000 (17:21 -0400)
committerEric Paris <eparis@redhat.com>
Thu, 28 Oct 2010 21:22:14 +0000 (17:22 -0400)
Currently fanotify has no maximum queue depth.  Since fanotify is
CAP_SYS_ADMIN only this does not pose a normal user DoS issue, but it
certianly is possible that an fanotify listener which can't keep up could
OOM the box.  This patch implements a default 16k depth.  This is the same
default depth used by inotify, but given fanotify's better queue merging in
many situations this queue will contain many additional useful events by
comparison.

Signed-off-by: Eric Paris <eparis@redhat.com>
fs/notify/fanotify/fanotify_user.c
include/linux/fanotify.h

index b265936e92d6240bab60e0f11306aacf04a14006..04f2fe47b66a35be8df40127f8b1608419bc46f7 100644 (file)
@@ -16,6 +16,8 @@
 
 #include <asm/ioctls.h>
 
+#define FANOTIFY_DEFAULT_MAX_EVENTS    16384
+
 extern const struct fsnotify_ops fanotify_fsnotify_ops;
 
 static struct kmem_cache *fanotify_mark_cache __read_mostly;
@@ -689,6 +691,8 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
                goto out_put_group;
        }
 
+       group->max_events = FANOTIFY_DEFAULT_MAX_EVENTS;
+
        fd = anon_inode_getfd("[fanotify]", &fanotify_fops, group, f_flags);
        if (fd < 0)
                goto out_put_group;
index a97c96d28c07b64d4717bc65a341f4ed4a59fe91..ed479b6fef7b065b0d612dc9cfbbd3d8a78743cd 100644 (file)
@@ -12,7 +12,6 @@
 
 #define FAN_EVENT_ON_CHILD     0x08000000      /* interested in child events */
 
-/* FIXME currently Q's have no limit.... */
 #define FAN_Q_OVERFLOW         0x00004000      /* Event queued overflowed */
 
 #define FAN_OPEN_PERM          0x00010000      /* File open in perm check */