• Andrey Smirnov's avatar
    HID: logitech-hidpp: rework device validation · 905d754c
    Andrey Smirnov authored
    G920 device only advertises REPORT_ID_HIDPP_LONG and
    REPORT_ID_HIDPP_VERY_LONG in its HID report descriptor, so querying
    for REPORT_ID_HIDPP_SHORT with optional=false will always fail and
    prevent G920 to be recognized as a valid HID++ device.
    
    To fix this and improve some other aspects, modify
    hidpp_validate_device() as follows:
    
      - Inline the code of hidpp_validate_report() to simplify
        distingushing between non-present and invalid report descriptors
    
      - Drop the check for id >= HID_MAX_IDS || id < 0 since all of our
        IDs are static and known to satisfy that at compile time
    
      - Change the algorithms to check all possible report
        types (including very long report) and deem the device as a valid
        HID++ device if it supports at least one
    
      - Treat invalid report length as a hard stop for the validation
        algorithm, meaning that if any of the supported reports has
        invalid length we assume the worst and treat the device as a
        generic HID device.
    
      - Fold initialization of hidpp->very_long_report_length into
        hidpp_validate_device() since it already fetches very long report
        length and validates its value
    
    Fixes: fe3ee1ec ("HID: logitech-hidpp: allow non HID++ devices to be handled by this module")
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=204191Reported-by: default avatarSam Bazely <sambazley@fastmail.com>
    Signed-off-by: default avatarAndrey Smirnov <andrew.smirnov@gmail.com>
    Cc: Jiri Kosina <jikos@kernel.org>
    Cc: Benjamin Tissoires <benjamin.tissoires@redhat.com>
    Cc: Henrik Rydberg <rydberg@bitmath.org>
    Cc: Pierre-Loup A. Griffais <pgriffais@valvesoftware.com>
    Cc: Austin Palmer <austinp@valvesoftware.com>
    Cc: linux-input@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Cc: stable@vger.kernel.org # 5.2+
    Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
    905d754c
hid-logitech-hidpp.c 107 KB