| From 2104eb283df66a482b60254299acbe3c68c03412 Mon Sep 17 00:00:00 2001 |
| From: Johan Hovold <johan@kernel.org> |
| Date: Wed, 7 Apr 2021 12:23:20 +0200 |
| Subject: staging: fwserial: fix TIOCSSERIAL permission check |
| |
| From: Johan Hovold <johan@kernel.org> |
| |
| commit 2104eb283df66a482b60254299acbe3c68c03412 upstream. |
| |
| Changing the port close-delay parameter is a privileged operation so |
| make sure to return -EPERM if a regular user tries to change it. |
| |
| Fixes: 7355ba3445f2 ("staging: fwserial: Add TTY-over-Firewire serial driver") |
| Cc: stable@vger.kernel.org # 3.8 |
| Signed-off-by: Johan Hovold <johan@kernel.org> |
| Link: https://lore.kernel.org/r/20210407102334.32361-3-johan@kernel.org |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/staging/fwserial/fwserial.c | 8 ++++++-- |
| 1 file changed, 6 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/staging/fwserial/fwserial.c |
| +++ b/drivers/staging/fwserial/fwserial.c |
| @@ -1232,20 +1232,24 @@ static int set_serial_info(struct tty_st |
| struct serial_struct *ss) |
| { |
| struct fwtty_port *port = tty->driver_data; |
| + unsigned int cdelay; |
| |
| if (ss->irq != 0 || ss->port != 0 || ss->custom_divisor != 0 || |
| ss->baud_base != 400000000) |
| return -EPERM; |
| |
| + cdelay = msecs_to_jiffies(ss->close_delay * 10); |
| + |
| mutex_lock(&port->port.mutex); |
| if (!capable(CAP_SYS_ADMIN)) { |
| - if (((ss->flags & ~ASYNC_USR_MASK) != |
| + if (cdelay != port->port.close_delay || |
| + ((ss->flags & ~ASYNC_USR_MASK) != |
| (port->port.flags & ~ASYNC_USR_MASK))) { |
| mutex_unlock(&port->port.mutex); |
| return -EPERM; |
| } |
| } |
| - port->port.close_delay = msecs_to_jiffies(ss->close_delay * 10); |
| + port->port.close_delay = cdelay; |
| mutex_unlock(&port->port.mutex); |
| |
| return 0; |