/* #define DEBUG */
 
 #include <linux/input.h>
+#include <linux/limits.h>
 #include <linux/module.h>
 #include <linux/mutex.h>
+#include <linux/overflow.h>
 #include <linux/sched.h>
 #include <linux/slab.h>
 
                return -EINVAL;
        }
 
-       ff_dev_size = sizeof(struct ff_device) +
-                               max_effects * sizeof(struct file *);
-       if (ff_dev_size < max_effects) /* overflow */
+       ff_dev_size = struct_size(ff, effect_owners, max_effects);
+       if (ff_dev_size == SIZE_MAX) /* overflow */
                return -EINVAL;
 
        ff = kzalloc(ff_dev_size, GFP_KERNEL);