HID: validate HID report id size

The "Report ID" field of a HID report is used to build indexes of
reports. The kernel's index of these is limited to 256 entries, so any
malicious device that sets a Report ID greater than 255 will trigger
memory corruption on the host:

[ 1347.156239] BUG: unable to handle kernel paging request at ffff88094958a878
[ 1347.156261] IP: [<ffffffff813e4da0>] hid_register_report+0x2a/0x8b

CVE-2013-2888

Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: stable@kernel.org
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
Kees Cook
2013-08-28 22:29:55 +02:00
committed by Jiri Kosina
parent 58c59bc997
commit 43622021d2
2 changed files with 10 additions and 4 deletions

View File

@@ -393,10 +393,12 @@ struct hid_report {
struct hid_device *device; /* associated device */
};
#define HID_MAX_IDS 256
struct hid_report_enum {
unsigned numbered;
struct list_head report_list;
struct hid_report *report_id_hash[256];
struct hid_report *report_id_hash[HID_MAX_IDS];
};
#define HID_REPORT_TYPES 3