From: David Laight <David.Laight@ACULAB.COM>
To: 'Jarkko Sonninen' <kasper@iki.fi>
Cc: Johan Hovold <johan@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: [PATCH v2] USB: serial: xr: Add TIOCGRS485 and TIOCSRS485 ioctls
Date: Mon, 13 Mar 2023 23:02:22 +0000 [thread overview]
Message-ID: <f17e5d7c4ccd4db7a5d5001d7dde42da@AcuMS.aculab.com> (raw)
In-Reply-To: <20230313082734.886890-1-kasper@iki.fi>
From: Jarkko Sonninen
> Sent: 13 March 2023 08:28
>
> Add support for RS-485 in Exar USB adapters.
> RS-485 mode is controlled by TIOCGRS485 and TIOCSRS485 ioctls.
> Gpio mode register is set to enable RS-485.
The locking is entirely dubious.
Summary:
Taking the lock to read the flags is pretty pointless.
You are only looking at one bit and nothing else is tied
to the lock.
Even a READ_ONCE() isn't needed.
> + spin_lock_irqsave(&data->lock, flags);
> + rs485_flags = data->rs485.flags;
> + spin_unlock_irqrestore(&data->lock, flags);
> + if (rs485_flags & SER_RS485_ENABLED)
> + gpio_mode |= XR_GPIO_MODE_SEL_RS485 | XR_GPIO_MODE_RS485_TX_H;
> + else if (C_CRTSCTS(tty) && C_BAUD(tty) != B0)
> + gpio_mode |= XR_GPIO_MODE_SEL_RTS_CTS;
> +
The ioctl read code reads the data unlocked.
> + if (copy_to_user(argp, &data->rs485, sizeof(data->rs485)))
> + return -EFAULT;
So could return old and new data if the ioctl write code
runs concurrently (and you get a hardware interrupt or page
fault mid-buffer).
The ioctl write code acquires the lock across a structure copy.
(which should be a structure copy, not a memcpy).
The only way the lock will have any effect is if multiple
threads are doing updates at the same time.
Code doing that won't work anyway.
> + if (copy_from_user(&rs485, argp, sizeof(rs485)))
> + return -EFAULT;
> +
> + dev_dbg(tty->dev, "Flags %02x\n", rs485.flags);
> + rs485.flags &= SER_RS485_ENABLED;
> + spin_lock_irqsave(&data->lock, flags);
> + memcpy(&data->rs485, &rs485, sizeof(rs485));
> + spin_unlock_irqrestore(&data->lock, flags);
In any case you one seem to be implementing one bit of
the flags - so the rest of the data can be ignored.
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
next prev parent reply other threads:[~2023-03-13 23:04 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-13 1:04 [PATCH] USB: serial: xr: Add TIOCGRS485 and TIOCSRS485 ioctls Jarkko Sonninen
2023-03-13 7:00 ` Greg Kroah-Hartman
2023-03-13 7:49 ` Jarkko Sonninen
2023-03-13 7:53 ` Greg Kroah-Hartman
2023-03-13 8:27 ` [PATCH v2] " Jarkko Sonninen
2023-03-13 8:45 ` Greg Kroah-Hartman
2023-03-13 9:54 ` Oliver Neukum
2023-03-13 10:47 ` Jarkko Sonninen
2023-03-13 11:27 ` Oliver Neukum
2023-03-13 23:02 ` David Laight [this message]
2023-03-14 6:19 ` kernel test robot
2023-03-13 15:07 ` [PATCH] " Jarkko Sonninen
2023-03-13 15:50 ` Greg Kroah-Hartman
2023-03-13 15:53 ` Jarkko Sonninen
2023-03-13 20:18 ` Oliver Neukum
2023-03-14 7:00 ` [PATCH v3] " Jarkko Sonninen
2023-03-14 7:37 ` Greg Kroah-Hartman
2023-03-14 8:00 ` Jarkko Sonninen
2023-04-13 8:57 ` Johan Hovold
2023-04-13 8:53 ` Johan Hovold
2023-04-16 8:40 ` Jarkko Sonninen
2023-04-17 14:50 ` Johan Hovold
2023-04-23 18:59 ` [PATCH v4] " Jarkko Sonninen
2023-04-24 5:32 ` kernel test robot
2023-06-20 12:38 ` Johan Hovold
2023-07-06 19:37 ` Jarkko Sonninen
2023-07-20 13:46 ` Johan Hovold
2023-07-08 14:56 ` [PATCH v5] " Jarkko Sonninen
2023-07-20 13:52 ` Johan Hovold
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=f17e5d7c4ccd4db7a5d5001d7dde42da@AcuMS.aculab.com \
--to=david.laight@aculab.com \
--cc=gregkh@linuxfoundation.org \
--cc=johan@kernel.org \
--cc=kasper@iki.fi \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/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