chardev: add a check for given minor range
[linux-2.6-microblaze.git] / fs / char_dev.c
index 8a63cfa..6803e98 100644 (file)
@@ -104,6 +104,12 @@ __register_chrdev_region(unsigned int major, unsigned int baseminor,
        int ret = 0;
        int i;
 
+       if (minorct > MINORMASK + 1 - baseminor) {
+               pr_err("CHRDEV \"%s\" minor range requested (%u-%u) is out of range of maximum range (%u-%u) for a single major\n",
+                       name, baseminor, baseminor + minorct - 1, 0, MINORMASK);
+               return ERR_PTR(-EINVAL);
+       }
+
        cd = kzalloc(sizeof(struct char_device_struct), GFP_KERNEL);
        if (cd == NULL)
                return ERR_PTR(-ENOMEM);