From: sashiko-bot@kernel.org
To: "Denis Benato" <denis.benato@linux.dev>
Cc: dmitry.torokhov@gmail.com, linux-input@vger.kernel.org
Subject: Re: [PATCH v3 09/12] HID: asus: add support to force feedback
Date: Sun, 23 Aug 2026 19:14:52 +0000 [thread overview]
Message-ID: <20260823191452.A883C1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260823185849.2478673-10-denis.benato@linux.dev>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Concurrent unbind of the gamepad interface during the config interface probe causes a Use-After-Free in hid_hw_output_report().
- [Low] Missing return statement after `scoped_guard` loop causes `-Wreturn-type` warning.
--
--- Patch [9]: [PATCH v3 09/12] HID: asus: add support to force feedback ---
commit c9da8775d34d1910105c3e14e76fe75184d40841
Author: Denis Benato <denis.benato@linux.dev>
HID: asus: add support to force feedback
Unlike ROG ally the X version and following ones uses DInput protocol
and the force feedback needs to be implemented as its protocol is
vendor-specific, therefore add support for FF_RUMBLE with magnitude
scaling on a work-queue based approach to avoid using possibly
sleeping calls in atomic context.
> diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
> index dc7a504e84cb6..04bf2c6ca449b 100644
> --- a/drivers/hid/hid-asus.c
> +++ b/drivers/hid/hid-asus.c
[ ... ]
> +static int ally_x_send_ff_report(struct ally_handheld *ally,
> + struct hid_device *hdev,
> + const u8 *buf, size_t len)
> +{
> + u8 *dmabuf __free(kfree) = kmemdup(buf, len, GFP_KERNEL);
> +
> + if (!dmabuf)
> + return -ENOMEM;
> +
> + scoped_guard(mutex, &ally->intf_mutex)
> + return hid_hw_output_report(hdev, dmabuf, len);
> +}
[Severity: Low]
Does returning directly from within a scoped_guard leave the function
without a top-level return statement?
Because scoped_guard expands into a for loop, the compiler's static analysis
assumes the loop condition could evaluate to false, causing execution to fall
through to the end of the non-void function.
This emits a -Wreturn-type warning, which causes build failures on
configurations using -Werror.
Could this use guard() instead?
guard(mutex)(&ally->intf_mutex);
return hid_hw_output_report(hdev, dmabuf, len);
[ ... ]
> static int hid_asus_ally_init(struct hid_device *hdev, struct ally_handheld *all
> {
> int ret;
> struct ally_config *cfg;
> + struct hid_device *x_hdev;
> + unsigned long flags;
>
> - /* Failure at this point is non-critical */
> - ret = ally_gamepad_send_packet(ally, hdev, ALLY_FORCE_FEEDBACK_OFF,
> - sizeof(ALLY_FORCE_FEEDBACK_OFF));
> - if (ret < 0)
> - hid_err(hdev, "Ally failed to init force-feedback off: %d\n", ret);
> + /*
> + * The force-feedback "off" packet belongs to the gamepad interface,
> + * which consumes it as an output report: the config interface probed
> + * here would reject it. The gamepad probe path sends the packet itself,
> + * so this only matters when the gamepad interface is already bound,
> + * e.g. after a reset resume that re-initialized the MCU.
> + */
> + spin_lock_irqsave(&ally_data_lock, flags);
> + x_hdev = ally->ally_x_hdev;
> + if (x_hdev)
> + get_device(&x_hdev->dev);
> + spin_unlock_irqrestore(&ally_data_lock, flags);
> +
> + if (x_hdev) {
> + /* Failure at this point is non-critical */
> + ret = ally_x_send_ff_off(ally, x_hdev);
[Severity: High]
Can this lead to a use-after-free if the gamepad interface is unbound
concurrently (e.g., via sysfs or USB hot-unplug) during the config probe?
While get_device() prevents the hid_device struct from being freed, it does
not stop the underlying transport driver (like usbhid) from unbinding.
When the transport driver unbinds, it removes the device and frees its
private data. If that happens before ally_x_send_ff_off() calls
hid_hw_output_report(), the transport's output_report callback will
dereference the already freed hdev->driver_data.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260823185849.2478673-1-denis.benato@linux.dev?part=9
next prev parent reply other threads:[~2026-08-23 19:14 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-23 18:58 [PATCH v3 00/12] HID: asus: add support for ROG Ally handhelds Denis Benato
2026-08-23 18:58 ` [PATCH v3 01/12] HID: asus: reinitialize the device after exiting a sleep state Denis Benato
2026-08-23 18:58 ` [PATCH v3 02/12] HID: asus: add support for ROG Ally handhelds Denis Benato
2026-08-23 19:10 ` sashiko-bot
2026-08-23 18:58 ` [PATCH v3 03/12] HID: asus: add gamepad configuration Denis Benato
2026-08-23 19:15 ` sashiko-bot
2026-08-23 18:58 ` [PATCH v3 04/12] HID: asus: add vibration strength configuration Denis Benato
2026-08-23 19:17 ` sashiko-bot
2026-08-23 18:58 ` [PATCH v3 05/12] HID: asus: add joysticks inner and outer range configuration Denis Benato
2026-08-23 18:58 ` [PATCH v3 06/12] HID: asus: add triggers " Denis Benato
2026-08-23 18:58 ` [PATCH v3 07/12] HID: asus: add joysticks anti-deadzone configuration Denis Benato
2026-08-23 18:58 ` [PATCH v3 08/12] HID: asus: add support for response curve Denis Benato
2026-08-23 18:58 ` [PATCH v3 09/12] HID: asus: add support to force feedback Denis Benato
2026-08-23 19:14 ` sashiko-bot [this message]
2026-08-23 18:58 ` [PATCH v3 10/12] HID: asus: add support for gamepad mode Denis Benato
2026-08-23 18:58 ` [PATCH v3 11/12] HID: asus: add support for turbo buttons Denis Benato
2026-08-23 18:58 ` [PATCH v3 12/12] HID: asus: add support for btn remapping Denis Benato
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=20260823191452.A883C1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=denis.benato@linux.dev \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox