Skip to content

Commit 50220de

Browse files
bentissJiri Kosina
authored andcommitted
HID: core: prevent out-of-bound readings
Plugging a Logitech DJ receiver with KASAN activated raises a bunch of out-of-bound readings. The fields are allocated up to MAX_USAGE, meaning that potentially, we do not have enough fields to fit the incoming values. Add checks and silence KASAN. Signed-off-by: Benjamin Tissoires <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent 5137b35 commit 50220de

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

drivers/hid/hid-core.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1293,6 +1293,7 @@ static void hid_input_field(struct hid_device *hid, struct hid_field *field,
12931293
/* Ignore report if ErrorRollOver */
12941294
if (!(field->flags & HID_MAIN_ITEM_VARIABLE) &&
12951295
value[n] >= min && value[n] <= max &&
1296+
value[n] - min < field->maxusage &&
12961297
field->usage[value[n] - min].hid == HID_UP_KEYBOARD + 1)
12971298
goto exit;
12981299
}
@@ -1305,11 +1306,13 @@ static void hid_input_field(struct hid_device *hid, struct hid_field *field,
13051306
}
13061307

13071308
if (field->value[n] >= min && field->value[n] <= max
1309+
&& field->value[n] - min < field->maxusage
13081310
&& field->usage[field->value[n] - min].hid
13091311
&& search(value, field->value[n], count))
13101312
hid_process_event(hid, field, &field->usage[field->value[n] - min], 0, interrupt);
13111313

13121314
if (value[n] >= min && value[n] <= max
1315+
&& value[n] - min < field->maxusage
13131316
&& field->usage[value[n] - min].hid
13141317
&& search(field->value, value[n], count))
13151318
hid_process_event(hid, field, &field->usage[value[n] - min], 1, interrupt);

0 commit comments

Comments
 (0)