HID: fix non-atomic allocation in hid_input_report
authorJiri Kosina <jkosina@suse.cz>
Tue, 15 Sep 2009 09:59:49 +0000 (11:59 +0200)
committerJiri Kosina <jkosina@suse.cz>
Tue, 15 Sep 2009 10:31:06 +0000 (12:31 +0200)
'interrupt' variable can't be used to safely determine whether
we are running in atomic context or not, as we might be called from
during control transfer completion through hid_ctrl() in atomic
context with interrupt == 0.

Reported-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-core.c

index 342b7d36d7bbb91d57f33d04f7c00f61dca2ca0b..ca9bb26c2076ea0b95f6c70cfbab8eabc0c9a80c 100644 (file)
@@ -1089,8 +1089,7 @@ int hid_input_report(struct hid_device *hid, int type, u8 *data, int size, int i
                return -1;
        }
 
-       buf = kmalloc(sizeof(char) * HID_DEBUG_BUFSIZE,
-                       interrupt ? GFP_ATOMIC : GFP_KERNEL);
+       buf = kmalloc(sizeof(char) * HID_DEBUG_BUFSIZE, GFP_ATOMIC);
 
        if (!buf) {
                report = hid_get_report(report_enum, data);