HID: fix lock imbalance in hidraw
[pandora-kernel.git] / drivers / hid / hidraw.c
index 4be240e..894d52e 100644 (file)
@@ -113,7 +113,7 @@ static ssize_t hidraw_write(struct file *file, const char __user *buffer, size_t
        if (!dev->hid_output_raw_report)
                return -ENODEV;
 
-       if (count > HID_MIN_BUFFER_SIZE) {
+       if (count > HID_MAX_BUFFER_SIZE) {
                printk(KERN_WARNING "hidraw: pid %d passed too large report\n",
                                task_pid_nr(current));
                return -EINVAL;
@@ -264,6 +264,7 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd,
                default:
                        ret = -ENOTTY;
        }
+       unlock_kernel();
        return ret;
 }
 
@@ -326,9 +327,8 @@ int hidraw_connect(struct hid_device *hid)
                goto out;
        }
 
-       dev->dev = device_create_drvdata(hidraw_class, NULL,
-                                        MKDEV(hidraw_major, minor), NULL,
-                                        "%s%d", "hidraw", minor);
+       dev->dev = device_create(hidraw_class, NULL, MKDEV(hidraw_major, minor),
+                                NULL, "%s%d", "hidraw", minor);
 
        if (IS_ERR(dev->dev)) {
                spin_lock(&minors_lock);
@@ -404,7 +404,7 @@ out:
        return result;
 }
 
-void __exit hidraw_exit(void)
+void hidraw_exit(void)
 {
        dev_t dev_id = MKDEV(hidraw_major, 0);