Skip to content

Commit 4ab2578

Browse files
author
Jiri Kosina
committed
HID: fix a couple of off-by-ones
There are a few very theoretical off-by-one bugs in report descriptor size checking when performing a pre-parsing fixup. Fix those. Cc: [email protected] Reported-by: Ben Hawkes <[email protected]> Reviewed-by: Benjamin Tissoires <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent ad3e14d commit 4ab2578

File tree

6 files changed

+7
-7
lines changed

6 files changed

+7
-7
lines changed

drivers/hid/hid-cherry.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
static __u8 *ch_report_fixup(struct hid_device *hdev, __u8 *rdesc,
2929
unsigned int *rsize)
3030
{
31-
if (*rsize >= 17 && rdesc[11] == 0x3c && rdesc[12] == 0x02) {
31+
if (*rsize >= 18 && rdesc[11] == 0x3c && rdesc[12] == 0x02) {
3232
hid_info(hdev, "fixing up Cherry Cymotion report descriptor\n");
3333
rdesc[11] = rdesc[16] = 0xff;
3434
rdesc[12] = rdesc[17] = 0x03;

drivers/hid/hid-kye.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ static __u8 *kye_report_fixup(struct hid_device *hdev, __u8 *rdesc,
300300
* - change the button usage range to 4-7 for the extra
301301
* buttons
302302
*/
303-
if (*rsize >= 74 &&
303+
if (*rsize >= 75 &&
304304
rdesc[61] == 0x05 && rdesc[62] == 0x08 &&
305305
rdesc[63] == 0x19 && rdesc[64] == 0x08 &&
306306
rdesc[65] == 0x29 && rdesc[66] == 0x0f &&

drivers/hid/hid-lg.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -345,14 +345,14 @@ static __u8 *lg_report_fixup(struct hid_device *hdev, __u8 *rdesc,
345345
struct usb_device_descriptor *udesc;
346346
__u16 bcdDevice, rev_maj, rev_min;
347347

348-
if ((drv_data->quirks & LG_RDESC) && *rsize >= 90 && rdesc[83] == 0x26 &&
348+
if ((drv_data->quirks & LG_RDESC) && *rsize >= 91 && rdesc[83] == 0x26 &&
349349
rdesc[84] == 0x8c && rdesc[85] == 0x02) {
350350
hid_info(hdev,
351351
"fixing up Logitech keyboard report descriptor\n");
352352
rdesc[84] = rdesc[89] = 0x4d;
353353
rdesc[85] = rdesc[90] = 0x10;
354354
}
355-
if ((drv_data->quirks & LG_RDESC_REL_ABS) && *rsize >= 50 &&
355+
if ((drv_data->quirks & LG_RDESC_REL_ABS) && *rsize >= 51 &&
356356
rdesc[32] == 0x81 && rdesc[33] == 0x06 &&
357357
rdesc[49] == 0x81 && rdesc[50] == 0x06) {
358358
hid_info(hdev,

drivers/hid/hid-monterey.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
static __u8 *mr_report_fixup(struct hid_device *hdev, __u8 *rdesc,
2525
unsigned int *rsize)
2626
{
27-
if (*rsize >= 30 && rdesc[29] == 0x05 && rdesc[30] == 0x09) {
27+
if (*rsize >= 31 && rdesc[29] == 0x05 && rdesc[30] == 0x09) {
2828
hid_info(hdev, "fixing up button/consumer in HID report descriptor\n");
2929
rdesc[30] = 0x0c;
3030
}

drivers/hid/hid-petalynx.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
static __u8 *pl_report_fixup(struct hid_device *hdev, __u8 *rdesc,
2626
unsigned int *rsize)
2727
{
28-
if (*rsize >= 60 && rdesc[39] == 0x2a && rdesc[40] == 0xf5 &&
28+
if (*rsize >= 62 && rdesc[39] == 0x2a && rdesc[40] == 0xf5 &&
2929
rdesc[41] == 0x00 && rdesc[59] == 0x26 &&
3030
rdesc[60] == 0xf9 && rdesc[61] == 0x00) {
3131
hid_info(hdev, "fixing up Petalynx Maxter Remote report descriptor\n");

drivers/hid/hid-sunplus.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
static __u8 *sp_report_fixup(struct hid_device *hdev, __u8 *rdesc,
2525
unsigned int *rsize)
2626
{
27-
if (*rsize >= 107 && rdesc[104] == 0x26 && rdesc[105] == 0x80 &&
27+
if (*rsize >= 112 && rdesc[104] == 0x26 && rdesc[105] == 0x80 &&
2828
rdesc[106] == 0x03) {
2929
hid_info(hdev, "fixing up Sunplus Wireless Desktop report descriptor\n");
3030
rdesc[105] = rdesc[110] = 0x03;

0 commit comments

Comments
 (0)