HID: fix a crash in hid_report_raw_event() function.
authorArmando Visconti <armando.visconti@st.com>
Thu, 19 May 2011 19:41:22 +0000 (21:41 +0200)
committerJiri Kosina <jkosina@suse.cz>
Fri, 20 May 2011 08:25:23 +0000 (10:25 +0200)
I'm using a Data Modul EasyTouch USB multitouch controller,
which is issuing a hid report with a size equals to 0. The rsize
value gets set to 536870912 and Linux is crashing in the memset
because the value is too big.

Signed-off-by: Armando Visconti <armando.visconti@st.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-core.c

index 852989f..84df80e 100644 (file)
@@ -1045,6 +1045,9 @@ void hid_report_raw_event(struct hid_device *hid, int type, u8 *data, int size,
 
        rsize = ((report->size - 1) >> 3) + 1;
 
+       if (rsize > HID_MAX_BUFFER_SIZE)
+               rsize = HID_MAX_BUFFER_SIZE;
+
        if (csize < rsize) {
                dbg_hid("report %d is too short, (%d < %d)\n", report->id,
                                csize, rsize);