mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 13:14:02 +02:00
HID: roccat: bound device-supplied profile index
kone_keep_values_up_to_date() and kone_profile_activated() use an
8-bit, device-supplied profile value as an index into the 5-element
kone->profiles[] array without a range check. A malicious USB device
claiming the Roccat Kone id can send a switch-profile event (or a
startup_profile read at probe) with an out-of-range value and make the
driver read out of bounds; the result is exposed via the actual_dpi
sysfs attribute.
Reject out-of-range indices in both paths.
This was found with static analysis and confirmed with the KUnit test
added in the following patch (KASAN: slab-out-of-bounds).
Fixes: 14bf62cde7 ("HID: add driver for Roccat Kone gaming mouse")
Assisted-by: Claude:claude-opus-4-8
Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
parent
b7556c8e71
commit
43fae42628
|
|
@ -36,6 +36,8 @@ static uint profile_numbers[5] = {0, 1, 2, 3, 4};
|
|||
|
||||
static void kone_profile_activated(struct kone_device *kone, uint new_profile)
|
||||
{
|
||||
if (new_profile < 1 || new_profile > ARRAY_SIZE(kone->profiles))
|
||||
new_profile = 1;
|
||||
kone->actual_profile = new_profile;
|
||||
kone->actual_dpi = kone->profiles[new_profile - 1].startup_dpi;
|
||||
}
|
||||
|
|
@ -793,8 +795,10 @@ static void kone_keep_values_up_to_date(struct kone_device *kone,
|
|||
{
|
||||
switch (event->event) {
|
||||
case kone_mouse_event_switch_profile:
|
||||
kone->actual_dpi = kone->profiles[event->value - 1].
|
||||
startup_dpi;
|
||||
if (event->value >= 1 &&
|
||||
event->value <= ARRAY_SIZE(kone->profiles))
|
||||
kone->actual_dpi =
|
||||
kone->profiles[event->value - 1].startup_dpi;
|
||||
fallthrough;
|
||||
case kone_mouse_event_osd_profile:
|
||||
kone->actual_profile = event->value;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user