mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-11-17 04:04:55 +00:00
HID: zeroplus: validate output report details
The zeroplus HID driver was not checking the size of allocated values in fields it used. A HID device could send a malicious output report that would cause the driver to write beyond the output report allocation during initialization, causing a heap overflow: [ 1442.728680] usb 1-1: New USB device found, idVendor=0c12, idProduct=0005 ... [ 1466.243173] BUG kmalloc-192 (Tainted: G W ): Redzone overwritten CVE-2013-2889 Signed-off-by: Kees Cook <keescook@chromium.org> Cc: stable@vger.kernel.org Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
331415ff16
commit
78214e81a1
1 changed files with 5 additions and 13 deletions
|
|
@ -68,21 +68,13 @@ static int zpff_init(struct hid_device *hid)
|
||||||
struct hid_report *report;
|
struct hid_report *report;
|
||||||
struct hid_input *hidinput = list_entry(hid->inputs.next,
|
struct hid_input *hidinput = list_entry(hid->inputs.next,
|
||||||
struct hid_input, list);
|
struct hid_input, list);
|
||||||
struct list_head *report_list =
|
|
||||||
&hid->report_enum[HID_OUTPUT_REPORT].report_list;
|
|
||||||
struct input_dev *dev = hidinput->input;
|
struct input_dev *dev = hidinput->input;
|
||||||
int error;
|
int i, error;
|
||||||
|
|
||||||
if (list_empty(report_list)) {
|
for (i = 0; i < 4; i++) {
|
||||||
hid_err(hid, "no output report found\n");
|
report = hid_validate_values(hid, HID_OUTPUT_REPORT, 0, i, 1);
|
||||||
return -ENODEV;
|
if (!report)
|
||||||
}
|
return -ENODEV;
|
||||||
|
|
||||||
report = list_entry(report_list->next, struct hid_report, list);
|
|
||||||
|
|
||||||
if (report->maxfield < 4) {
|
|
||||||
hid_err(hid, "not enough fields in report\n");
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
zpff = kzalloc(sizeof(struct zpff_device), GFP_KERNEL);
|
zpff = kzalloc(sizeof(struct zpff_device), GFP_KERNEL);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue