linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 04/14] HID: sony: validate HID output report details
@ 2013-08-28 20:30 Jiri Kosina
  2013-08-29  9:48 ` Benjamin Tissoires
  0 siblings, 1 reply; 6+ messages in thread
From: Jiri Kosina @ 2013-08-28 20:30 UTC (permalink / raw)
  To: linux-input; +Cc: Kees Cook

From: Kees Cook <keescook@chromium.org>

This driver must validate the availability of the HID output report and
its size before it can write LED states via buzz_set_leds(). This stops
a heap overflow that is possible if a device provides a malicious HID
output report:

[  108.171280] usb 1-1: New USB device found, idVendor=054c, idProduct=0002
...
[  117.507877] BUG kmalloc-192 (Not tainted): Redzone overwritten

CVE-2013-2890

Signed-off-by: Kees Cook <keescook@chromium.org>
Cc: stable@kernel.org
---
 drivers/hid/hid-sony.c |    4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index 87fbe29..b987926 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -537,6 +537,10 @@ static int buzz_init(struct hid_device *hdev)
 	drv_data = hid_get_drvdata(hdev);
 	BUG_ON(!(drv_data->quirks & BUZZ_CONTROLLER));
 
+	/* Validate expected report characteristics. */
+	if (!hid_validate_report(hdev, HID_OUTPUT_REPORT, 0, 1, 7))
+		return -ENODEV;
+
 	buzz = kzalloc(sizeof(*buzz), GFP_KERNEL);
 	if (!buzz) {
 		hid_err(hdev, "Insufficient memory, cannot allocate driver data\n");

-- 
Jiri Kosina
SUSE Labs

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-08-30 13:39 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-28 20:30 [PATCH 04/14] HID: sony: validate HID output report details Jiri Kosina
2013-08-29  9:48 ` Benjamin Tissoires
2013-08-29 14:40   ` Kees Cook
2013-08-29 14:50     ` Benjamin Tissoires
2013-08-29 19:58       ` Kees Cook
2013-08-30 13:39         ` Benjamin Tissoires

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).