• Thomas Weißschuh's avatar
    HID: input: set usage type to key on keycode remap · 3e6a950d
    Thomas Weißschuh authored
    When a scancode is manually remapped that previously was not handled as
    key, then the old usage type was incorrectly reused.
    
    This caused issues on a "04b3:301b IBM Corp. SK-8815 Keyboard" which has
    marked some of its keys with an invalid HID usage.  These invalid usage
    keys are being ignored since support for USB programmable buttons was
    added.
    
    The scancodes are however remapped explicitly by the systemd hwdb to the
    keycodes that are printed on the physical buttons.  During this mapping
    step the existing usage is retrieved which will be found with a default
    type of 0 (EV_SYN) instead of EV_KEY.
    
    The events with the correct code but EV_SYN type are not forwarded to
    userspace.
    
    This also leads to a kernel oops when trying to print the report descriptor
    via debugfs.  hid_resolv_event() tries to resolve a EV_SYN event with an
    EV_KEY code which leads to an out-of-bounds access in the EV_SYN names
    array.
    
    Fixes: bcfa8d14 ("HID: input: Add support for Programmable Buttons")
    Fixes: f5854fad ("Input: hid-input - allow mapping unknown usages")
    Reported-by: default avatarBrent Roman <brent@mbari.org>
    Tested-by: default avatarBrent Roman <brent@mbari.org>
    Signed-off-by: default avatarThomas Weißschuh <linux@weissschuh.net>
    Reviewed-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
    3e6a950d
hid-input.c 58.4 KB