• Guilherme G. Piccoli's avatar
    HID: nintendo: Prevent divide-by-zero on code · 6eb04ca8
    Guilherme G. Piccoli authored
    It was reported [0] that adding a generic joycon to the system caused
    a kernel crash on Steam Deck, with the below panic spew:
    
    divide error: 0000 [#1] PREEMPT SMP NOPTI
    [...]
    Hardware name: Valve Jupiter/Jupiter, BIOS F7A0119 10/24/2023
    RIP: 0010:nintendo_hid_event+0x340/0xcc1 [hid_nintendo]
    [...]
    Call Trace:
     [...]
     ? exc_divide_error+0x38/0x50
     ? nintendo_hid_event+0x340/0xcc1 [hid_nintendo]
     ? asm_exc_divide_error+0x1a/0x20
     ? nintendo_hid_event+0x307/0xcc1 [hid_nintendo]
     hid_input_report+0x143/0x160
     hidp_session_run+0x1ce/0x700 [hidp]
    
    Since it's a divide-by-0 error, by tracking the code for potential
    denominator issues, we've spotted 2 places in which this could happen;
    so let's guard against the possibility and log in the kernel if the
    condition happens. This is specially useful since some data that
    fills some denominators are read from the joycon HW in some cases,
    increasing the potential for flaws.
    
    [0] https://github.com/ValveSoftware/SteamOS/issues/1070Signed-off-by: default avatarGuilherme G. Piccoli <gpiccoli@igalia.com>
    Tested-by: default avatarSam Lantinga <slouken@libsdl.org>
    Signed-off-by: default avatarJiri Kosina <jkosina@suse.com>
    6eb04ca8
hid-nintendo.c 76.6 KB