| From dc8c8437658667be9b11ec25c4b5482ed2becdaa Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Wed, 7 Apr 2021 12:23:29 +0200 |
| Subject: tty: moxa: fix TIOCSSERIAL permission check |
| |
| From: Johan Hovold <johan@kernel.org> |
| |
| commit dc8c8437658667be9b11ec25c4b5482ed2becdaa upstream. |
| |
| Changing the port close delay or type are privileged operations so make |
| sure to return -EPERM if a regular user tries to change them. |
| |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Link: https://lore.kernel.org/r/20210407102334.32361-12-johan@kernel.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/tty/moxa.c | 16 +++++++++++----- |
| 1 file changed, 11 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/tty/moxa.c |
| +++ b/drivers/tty/moxa.c |
| @@ -2050,6 +2050,7 @@ static int moxa_set_serial_info(struct t |
| struct serial_struct *ss) |
| { |
| struct moxa_port *info = tty->driver_data; |
| + unsigned int close_delay; |
| |
| if (tty->index == MAX_PORTS) |
| return -EINVAL; |
| @@ -2061,19 +2062,24 @@ static int moxa_set_serial_info(struct t |
| ss->baud_base != 921600) |
| return -EPERM; |
| |
| + close_delay = msecs_to_jiffies(ss->close_delay * 10); |
| + |
| mutex_lock(&info->port.mutex); |
| if (!capable(CAP_SYS_ADMIN)) { |
| - if (((ss->flags & ~ASYNC_USR_MASK) != |
| + if (close_delay != info->port.close_delay || |
| + ss->type != info->type || |
| + ((ss->flags & ~ASYNC_USR_MASK) != |
| (info->port.flags & ~ASYNC_USR_MASK))) { |
| mutex_unlock(&info->port.mutex); |
| return -EPERM; |
| } |
| - } |
| - info->port.close_delay = msecs_to_jiffies(ss->close_delay * 10); |
| + } else { |
| + info->port.close_delay = close_delay; |
| |
| - MoxaSetFifo(info, ss->type == PORT_16550A); |
| + MoxaSetFifo(info, ss->type == PORT_16550A); |
| |
| - info->type = ss->type; |
| + info->type = ss->type; |
| + } |
| mutex_unlock(&info->port.mutex); |
| return 0; |
| } |