HID: fix possible deadlock in hidraw_read
[cascardo/linux.git] / drivers / hid / hidraw.c
index 00ccf4b..b079a9c 100644 (file)
@@ -47,10 +47,9 @@ static ssize_t hidraw_read(struct file *file, char __user *buffer, size_t count,
        char *report;
        DECLARE_WAITQUEUE(wait, current);
 
-       while (ret == 0) {
-
-               mutex_lock(&list->read_mutex);
+       mutex_lock(&list->read_mutex);
 
+       while (ret == 0) {
                if (list->head == list->tail) {
                        add_wait_queue(&list->hidraw->wait, &wait);
                        set_current_state(TASK_INTERRUPTIBLE);
@@ -349,10 +348,7 @@ int hidraw_connect(struct hid_device *hid)
        int minor, result;
        struct hidraw *dev;
 
-       /* TODO currently we accept any HID device. This should later
-        * probably be fixed to accept only those devices which provide
-        * non-input applications
-        */
+       /* we accept any HID device, no matter the applications */
 
        dev = kzalloc(sizeof(struct hidraw), GFP_KERNEL);
        if (!dev)