summaryrefslogtreecommitdiff
path: root/drivers/hid/hid-core.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2020-01-10 18:52:11 +0100
committerIngo Molnar <mingo@kernel.org>2020-01-10 18:52:11 +0100
commit02df083201272c0c2e061b18d9c20635974abf6d (patch)
tree788321ae7a4867c4c06bd1d070cb98d49d009b76 /drivers/hid/hid-core.c
parent0679715e714345d273c0e1eb78078535ffc4b2a1 (diff)
parentbef1d88263ff769f15aa0e1515cdcede84e61d15 (diff)
Merge branch 'linus' into efi/core, to pick up fixes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/hid/hid-core.c')
-rw-r--r--drivers/hid/hid-core.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index e0b241bd3070..851fe54ea59e 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -288,6 +288,12 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
offset = report->size;
report->size += parser->global.report_size * parser->global.report_count;
+ /* Total size check: Allow for possible report index byte */
+ if (report->size > (HID_MAX_BUFFER_SIZE - 1) << 3) {
+ hid_err(parser->device, "report is too long\n");
+ return -1;
+ }
+
if (!parser->local.usage_index) /* Ignore padding fields */
return 0;