lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 578/775] HID: wacom: Ignore attempts to overwrite the touch_max value from HID
    Date
    From: Jason Gerecke <killertofu@gmail.com>

    commit 88f38846bfb1a452a3d47e38aeab20a4ceb74294 upstream.

    The `wacom_feature_mapping` function is careful to only set the the
    touch_max value a single time, but this care does not extend to the
    `wacom_wac_finger_event` function. In particular, if a device sends
    multiple HID_DG_CONTACTMAX items in a single feature report, the
    driver will end up retaining the value of last item.

    The HID descriptor for the Cintiq Companion 2 does exactly this. It
    incorrectly sets a "Report Count" of 2, which will cause the driver
    to process two HID_DG_CONTACTCOUNT items. The first item has the actual
    count, while the second item should have been declared as a constant
    zero. The constant zero is the value the driver ends up using, however,
    since it is the last HID_DG_CONTACTCOUNT in the report.

    Report ID (16),
    Usage (Contact Count Maximum), ; Contact count maximum (55h, static value)
    Report Count (2),
    Logical Maximum (10),
    Feature (Variable),

    To address this, we add a check that the touch_max is not already set
    within the `wacom_wac_finger_event` function that processes the
    HID_DG_TOUCHMAX item. We emit a warning if the value is set and ignore
    the updated value.

    This could potentially cause problems if there is a tablet which has
    a similar issue but requires the last item to be used. This is unlikely,
    however, since it would have to have a different non-zero value for
    HID_DG_CONTACTMAX earlier in the same report, which makes no sense
    except in the case of a firmware bug. Note that cases where the
    HID_DG_CONTACTMAX items are in different reports is already handled
    (and similarly ignored) by `wacom_feature_mapping` as mentioned above.

    Link: https://github.com/linuxwacom/input-wacom/issues/223
    Fixes: 184eccd40389 ("HID: wacom: generic: read HID_DG_CONTACTMAX from any feature report")
    Signed-off-by: Jason Gerecke <jason.gerecke@wacom.com>
    CC: stable@vger.kernel.org
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/hid/wacom_wac.c | 7 ++++++-
    1 file changed, 6 insertions(+), 1 deletion(-)

    --- a/drivers/hid/wacom_wac.c
    +++ b/drivers/hid/wacom_wac.c
    @@ -2600,7 +2600,12 @@ static void wacom_wac_finger_event(struc
    wacom_wac->is_invalid_bt_frame = !value;
    return;
    case HID_DG_CONTACTMAX:
    - features->touch_max = value;
    + if (!features->touch_max) {
    + features->touch_max = value;
    + } else {
    + hid_warn(hdev, "%s: ignoring attempt to overwrite non-zero touch_max "
    + "%d -> %d\n", __func__, features->touch_max, value);
    + }
    return;
    }


    \
     
     \ /
      Last update: 2021-03-02 14:40    [W:4.687 / U:1.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site