From: sashiko-bot@kernel.org
To: "Dmitriy Geels" <dmitriy.geels@gmail.com>
Cc: dmitry.torokhov@gmail.com, linux-input@vger.kernel.org
Subject: Re: [PATCH v2] HID: logitech-hidpp: add native touchpad support for K400 Plus
Date: Mon, 24 Aug 2026 17:44:06 +0000 [thread overview]
Message-ID: <20260824174407.0E4811F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260824173042.13679-1-dmitriy.geels@gmail.com>
Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
- [High] Use-after-free of `wd->input` on input device registration failure.
- [Medium] Devres memory leak of `devm_name` on connection error paths.
- [Medium] Mismatch between advertised clickpad capabilities and actual button events.
- [Low] Compilation failure due to use of undeclared variable `wd`.
- [Low] Missing READ_ONCE barrier when accessing `wd->input`.
--
--- Patch [1]: [PATCH v2] HID: logitech-hidpp: add native touchpad support for K400 Plus ---
commit b543fab9a342a739672bb20ebed2d0f4a5885b83
Author: Dmitriy Geels <dmitriy.geels@gmail.com>
HID: logitech-hidpp: add native touchpad support for K400 Plus
This commit adds support for the native raw touchpad reports on the
Logitech K400 Plus by creating a separate multitouch input device.
Link: https://lore.kernel.org/linux-input/20260824132445.C64EE1F000E9@smtp.kernel.org/
> diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
> index 1504de32b1c84..9a6b04283130f 100644
> --- a/drivers/hid/hid-logitech-hidpp.c
> +++ b/drivers/hid/hid-logitech-hidpp.c
> @@ -2963,8 +2966,13 @@ static int wtp_populate_input(struct hidpp_device *hidpp,
>
> [ ... ]
>
> - /* Max pressure is not given by the devices, pick one */
> - input_set_abs_params(input_dev, ABS_MT_PRESSURE, 0, 50, 0, 0);
> + /*
> + * The driver exposes contact area as pressure. Do not advertise a
> + * pressure axis when the device does not report contact area; userspace
> + * may otherwise interpret a permanently-zero pressure value as hover.
> + */
> + if (wd->area_range)
> + input_set_abs_params(input_dev, ABS_MT_PRESSURE, 0, 50, 0, 0);
>
> input_set_capability(input_dev, EV_KEY, BTN_LEFT);
>
> if (hidpp->quirks & HIDPP_QUIRK_WTP_PHYSICAL_BUTTONS)
> input_set_capability(input_dev, EV_KEY, BTN_RIGHT);
> else
> __set_bit(INPUT_PROP_BUTTONPAD, input_dev->propbit);
[Severity: Medium]
Are these capabilities accurately reflecting the device's behavior?
The commit message states that clickpad buttons should not be exposed
for the CLASS_KBD_WTP device. However, wtp_populate_input() still sets
the INPUT_PROP_BUTTONPAD property and the BTN_LEFT capability.
Userspace input stacks might see these capabilities and treat the device
as a clickpad, waiting for physical clicks that the driver explicitly
suppresses.
> @@ -3066,8 +3079,13 @@ static int wtp_raw_event(struct hid_device *hdev, u8 *data, int size)
> struct wtp_data *wd = hidpp->private_data;
> struct hidpp_report *report = (struct hidpp_report *)data;
> struct hidpp_touchpad_raw_xy raw;
> + struct input_dev *input;
>
> - if (!wd || !hidpp->input)
> + if (!wd)
> + return 1;
> +
> + input = wd->input;
> + if (!input)
> return 1;
[Severity: Low]
Since wd->input is published locklessly using WRITE_ONCE() in
hidpp_connect_event(), shouldn't we use READ_ONCE() here in
wtp_raw_event() to ensure proper memory ordering?
> @@ -4524,7 +4562,54 @@ static void hidpp_connect_event(struct work_struct *work)
> return;
> }
>
> - if (hidpp->quirks & HIDPP_QUIRK_CLASS_WTP) {
> + if (hidpp->quirks & HIDPP_QUIRK_CLASS_KBD_WTP) {
> + if (!wd->input) {
> + struct wtp_data *wd = hidpp->private_data;
[Severity: Low]
Does this cause a compilation failure? The if condition evaluates
wd->input before the wd variable is declared and initialized on the
very next line.
> +
> + ret = wtp_get_config(hidpp);
> + if (ret) {
> + hid_err(hdev, "cannot get WTP config: %d\n", ret);
> + return;
> + }
> +
> + input = hidpp_allocate_input(hdev);
> + if (!input) {
> + hid_err(hdev, "cannot allocate touchpad input device\n");
> + return;
> + }
> +
> + devm_name = devm_kasprintf(&hdev->dev, GFP_KERNEL,
> + "%s Touchpad", hidpp->name);
> + if (!devm_name)
> + return;
[Severity: Medium]
Can this cause a memory leak if a subsequent step like
wtp_populate_input() or input_register_device() fails?
If a failure occurs, the function returns without setting wd->input.
Because the string is devres-managed and bound to the parent HID device,
the next time hidpp_connect_event() runs, the if (!wd->input) check will
still be true, allocating another string that won't be freed until the
parent device is unbound.
> @@ -4615,7 +4700,12 @@ static void hidpp_connect_event(struct work_struct *work)
> return;
> }
>
> - hidpp_populate_input(hidpp, input);
> + ret = hidpp_populate_input(hidpp, input);
> + if (ret) {
> + hidpp->input = NULL;
> + input_free_device(input);
> + return;
> + }
[Severity: High]
Could this lead to a use-after-free on the event reporting path if
registration fails?
In hidpp_populate_input(), the pointer is assigned to the private
structure:
hidpp_populate_input() {
...
wd->input = input;
...
}
If input_register_device() fails shortly after, this error path frees the
input device and clears hidpp->input, but does not clear wd->input.
When the hardware sends a raw HID event, wtp_raw_event() will fetch and
dereference the dangling wd->input pointer.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260824173042.13679-1-dmitriy.geels@gmail.com?part=1
prev parent reply other threads:[~2026-08-24 17:44 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-24 17:30 [PATCH v2] HID: logitech-hidpp: add native touchpad support for K400 Plus Dmitriy Geels
2026-08-24 17:44 ` sashiko-bot [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260824174407.0E4811F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dmitriy.geels@gmail.com \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.