summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdrian Salido <salidoa@google.com>2017-09-08 10:55:27 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-10-12 09:18:03 +0200
commit884d5129c355a200103c49089b420873241daa04 (patch)
tree38a0f73a83354de6e6c00ee559096009618b3e1d
parent389721fabce2457414c4f128bc0b3a7d77c8f833 (diff)
downloadlinux-stable-884d5129c355a200103c49089b420873241daa04.tar.gz
linux-stable-884d5129c355a200103c49089b420873241daa04.tar.bz2
linux-stable-884d5129c355a200103c49089b420873241daa04.zip
HID: i2c-hid: allocate hid buffers for real worst case
commit 8320caeeffdefec3b58b9d4a7ed8e1079492fe7b upstream. The buffer allocation is not currently accounting for an extra byte for the report id. This can cause an out of bounds access in function i2c_hid_set_or_send_report() with reportID > 15. Signed-off-by: Adrian Salido <salidoa@google.com> Reviewed-by: Benson Leung <bleung@chromium.org> Signed-off-by: Guenter Roeck <groeck@chromium.org> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/hid/i2c-hid/i2c-hid.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c
index fdcce357f395..462b0a383353 100644
--- a/drivers/hid/i2c-hid/i2c-hid.c
+++ b/drivers/hid/i2c-hid/i2c-hid.c
@@ -526,7 +526,8 @@ static int i2c_hid_alloc_buffers(struct i2c_hid *ihid, size_t report_size)
{
/* the worst case is computed from the set_report command with a
* reportID > 15 and the maximum report length */
- int args_len = sizeof(__u8) + /* optional ReportID byte */
+ int args_len = sizeof(__u8) + /* ReportID */
+ sizeof(__u8) + /* optional ReportID byte */
sizeof(__u16) + /* data register */
sizeof(__u16) + /* size of the report */
report_size; /* report */