serial: fix TIOCSRS485 locking
authorJohan Hovold <johan@kernel.org>
Wed, 12 Apr 2023 12:48:11 +0000 (14:48 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 20 Apr 2023 11:42:24 +0000 (13:42 +0200)
The RS485 multipoint addressing support for some reason added a new
ADDRB termios cflag which is (only!) updated from one of the RS485
ioctls.

Make sure to take the termios rw semaphore for the right ioctl (i.e.
set, not get).

Fixes: ae50bb275283 ("serial: take termios_rwsem for ->rs485_config() & pass termios as param")
Cc: stable@vger.kernel.org # 6.0
Cc: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Link: https://lore.kernel.org/r/20230412124811.11217-1-johan@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/serial_core.c

index afafbb7edb4adc2d22d18a78d9609bbbdb258157..59b62fa2e287363821255f485488512393f5c989 100644 (file)
@@ -1549,7 +1549,7 @@ uart_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg)
                goto out;
 
        /* rs485_config requires more locking than others */
-       if (cmd == TIOCGRS485)
+       if (cmd == TIOCSRS485)
                down_write(&tty->termios_rwsem);
 
        mutex_lock(&port->mutex);
@@ -1592,7 +1592,7 @@ uart_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg)
        }
 out_up:
        mutex_unlock(&port->mutex);
-       if (cmd == TIOCGRS485)
+       if (cmd == TIOCSRS485)
                up_write(&tty->termios_rwsem);
 out:
        return ret;