From: sashiko-bot@kernel.org
To: "Michael Zaidman" <michael.zaidman@gmail.com>
Cc: dmitry.torokhov@gmail.com, linux-input@vger.kernel.org
Subject: Re: [PATCH 10/13] HID: ft260: uart: fix active-low RTS/CTS/DTR/DSR polarity
Date: Sat, 22 Aug 2026 22:03:07 +0000 [thread overview]
Message-ID: <20260822220307.EF13D1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260822213941.98882-11-michael.zaidman@gmail.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
Pre-existing issues:
- [High] Read-modify-write race condition in ft260_uart_tiocmset() due to reading shared state outside of a mutex.
- [High] ft260_uart_tiocmget() fails to check if ft260_gpio_get_all() returns an error code, silently returning a corrupted modem status bitmask to userspace.
--
--- Patch [10]: [PATCH 10/13] HID: ft260: uart: fix active-low RTS/CTS/DTR/DSR polarity ---
commit 1c4e1ea308d880a16bd5a589b4e5e279a4dec5e8
Author: Rio Liu <rio@r26.me>
HID: ft260: uart: fix active-low RTS/CTS/DTR/DSR polarity
This commit inverts the TIOCMGET sense and the TIOCMSET drive levels for
the active-low FT260 modem control GPIOs (RTS, CTS, DTR, and DSR). This
aligns the userspace ioctl state with the electrical lines, leaving DCD
and RI unchanged.
> diff --git a/drivers/hid/hid-ft260.c b/drivers/hid/hid-ft260.c
> index 0a1875a1a7eca..a2f4b6e5a16bb 100644
> --- a/drivers/hid/hid-ft260.c
> +++ b/drivers/hid/hid-ft260.c
> @@ -1985,10 +1985,10 @@ static int ft260_uart_tiocmget(struct tty_struct *tty)
>
> gpios = ft260_gpio_get_all(port->gc, FT260_GPIO_VALUE);
>
[Severity: High]
This isn't a bug introduced by this patch, but ft260_gpio_get_all() can return
a negative error code (such as -EIO) if a hardware or transport error occurs.
Does evaluating this negative error code as a bitmask in the return statement
below risk masking the hardware error and returning a corrupted modem status
to userspace instead of propagating the error?
> - return (((gpios & FT260_GPIO_B) ? TIOCM_RTS : 0) |
> - ((gpios & FT260_GPIO_E) ? TIOCM_CTS : 0) |
> - ((gpios & FT260_GPIO_F) ? TIOCM_DTR : 0) |
> - ((gpios & FT260_GPIO_H) ? TIOCM_DSR : 0) |
> + return ((!(gpios & FT260_GPIO_B) ? TIOCM_RTS : 0) |
> + (!(gpios & FT260_GPIO_E) ? TIOCM_CTS : 0) |
> + (!(gpios & FT260_GPIO_F) ? TIOCM_DTR : 0) |
> + (!(gpios & FT260_GPIO_H) ? TIOCM_DSR : 0) |
> ((gpios & FT260_GPIO_4) ? TIOCM_CAR : 0) |
> ((gpios & FT260_GPIO_5) ? TIOCM_RNG : 0));
> }
> @@ -2013,13 +2013,13 @@ static int ft260_uart_tiocmset(struct tty_struct *tty,
> mutex_lock(&port->lock);
[Severity: High]
This is also a pre-existing issue, but in ft260_uart_tiocmset(), the local
variable rep.gpio is populated from the shared state port->gpio before
acquiring port->lock:
rep.gpio = port->gpio;
mutex_lock(&port->lock);
Could this result in a read-modify-write race where a concurrent GPIO
modification (e.g., via sysfs) is silently reverted by the TTY ioctl?
Should rep.gpio be populated inside the critical section instead?
>
> if (set & TIOCM_RTS)
> - ft260_gpio_output_cfg(&rep.gpio, FT260_GPIO_UART_RTS, 1);
> + ft260_gpio_output_cfg(&rep.gpio, FT260_GPIO_UART_RTS, 0);
> if (set & TIOCM_DTR)
> - ft260_gpio_output_cfg(&rep.gpio, FT260_GPIO_UART_DTR, 1);
> + ft260_gpio_output_cfg(&rep.gpio, FT260_GPIO_UART_DTR, 0);
> if (clear & TIOCM_RTS)
> - ft260_gpio_output_cfg(&rep.gpio, FT260_GPIO_UART_RTS, 0);
> + ft260_gpio_output_cfg(&rep.gpio, FT260_GPIO_UART_RTS, 1);
> if (clear & TIOCM_DTR)
> - ft260_gpio_output_cfg(&rep.gpio, FT260_GPIO_UART_DTR, 0);
> + ft260_gpio_output_cfg(&rep.gpio, FT260_GPIO_UART_DTR, 1);
>
> ft260_dbg("dirs %#02x vals %#02x ex_dirs %#02x ex_vals %#02x\n",
> rep.gpio.dirs, rep.gpio.vals,
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260822213941.98882-1-michael.zaidman@gmail.com?part=10
next prev parent reply other threads:[~2026-08-22 22:03 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-22 21:39 [PATCH 00/13] HID: ft260: add UART and GPIO support, plus I2C fixes Michael Zaidman
2026-08-22 21:39 ` [PATCH 01/13] HID: ft260: add serial driver Michael Zaidman
2026-08-22 22:00 ` sashiko-bot
2026-08-25 7:49 ` Linus Walleij
2026-08-25 8:12 ` Linus Walleij
2026-08-27 19:16 ` Michael Zaidman
2026-08-22 21:39 ` [PATCH 02/13] HID: ft260: uart: bring-up fixes Michael Zaidman
2026-08-22 21:56 ` sashiko-bot
2026-08-22 21:39 ` [PATCH 03/13] HID: ft260: add GPIO support on top of UART Michael Zaidman
2026-08-22 21:56 ` sashiko-bot
2026-08-25 7:44 ` Linus Walleij
2026-08-27 20:39 ` Michael Zaidman
2026-08-22 21:39 ` [PATCH 04/13] HID: ft260: i2c: reduce driver module loading time Michael Zaidman
2026-08-22 21:51 ` sashiko-bot
2026-08-22 21:39 ` [PATCH 05/13] HID: ft260: i2c: silence sysfs store big-numbers Michael Zaidman
2026-08-22 21:51 ` sashiko-bot
2026-08-22 21:39 ` [PATCH 06/13] HID: ft260: i2c: reduce bus-error message severity Michael Zaidman
2026-08-22 21:52 ` sashiko-bot
2026-08-22 21:39 ` [PATCH 07/13] HID: ft260: uart: enable flow control Michael Zaidman
2026-08-22 21:52 ` sashiko-bot
2026-08-22 21:39 ` [PATCH 08/13] HID: ft260: uart: add modem pins control via ioctl Michael Zaidman
2026-08-22 21:54 ` sashiko-bot
2026-08-25 8:08 ` Linus Walleij
2026-08-27 22:08 ` Michael Zaidman
2026-08-22 21:39 ` [PATCH 09/13] HID: ft260: gpio: group sysfs attrs per HID interface Michael Zaidman
2026-08-22 21:54 ` sashiko-bot
2026-08-25 8:13 ` Linus Walleij
2026-08-27 20:50 ` Michael Zaidman
2026-08-22 21:39 ` [PATCH 10/13] HID: ft260: uart: fix active-low RTS/CTS/DTR/DSR polarity Michael Zaidman
2026-08-22 22:03 ` sashiko-bot [this message]
2026-08-25 8:16 ` Linus Walleij
2026-08-27 21:08 ` Michael Zaidman
2026-08-22 21:39 ` [PATCH 11/13] HID: ft260: i2c: fix large write transaction failure Michael Zaidman
2026-08-22 22:02 ` sashiko-bot
2026-08-22 21:39 ` [PATCH 12/13] HID: ft260: workaround for TN_189 errata endpoint STALL after enumeration Michael Zaidman
2026-08-22 22:03 ` sashiko-bot
2026-08-22 21:39 ` [PATCH 13/13] HID: ft260: i2c: abort in-flight transfers with STOP before reset Michael Zaidman
2026-08-22 22:12 ` sashiko-bot
2026-08-25 8:21 ` [PATCH 00/13] HID: ft260: add UART and GPIO support, plus I2C fixes Linus Walleij
2026-08-27 13:27 ` Lee Jones
2026-08-27 18:53 ` Michael Zaidman
2026-08-27 20:51 ` Lee Jones
2026-08-27 22:25 ` Michael Zaidman
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=20260822220307.EF13D1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=michael.zaidman@gmail.com \
--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