| From 33e541f13ad8de02dfd5e050495713cd00331a0b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 19 May 2022 11:18:04 +0300 |
| Subject: serial: sh-sci: Don't allow CS5-6 |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> |
| |
| [ Upstream commit 9b87162de8be26bf3156460b37deee6399fd0fcb ] |
| |
| Only CS7 and CS8 seem supported but CSIZE is not sanitized from |
| CS5 or CS6 to CS8. |
| |
| Set CSIZE correctly so that userspace knows the effective value. |
| Incorrect CSIZE also results in miscalculation of the frame bits in |
| tty_get_char_size() or in its predecessor where the roughly the same |
| code is directly within uart_update_timeout(). |
| |
| Fixes: 1da177e4c3f4 (Linux-2.6.12-rc2) |
| Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> |
| Link: https://lore.kernel.org/r/20220519081808.3776-6-ilpo.jarvinen@linux.intel.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/tty/serial/sh-sci.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c |
| index 5c6243a31166..91c69fc3987a 100644 |
| --- a/drivers/tty/serial/sh-sci.c |
| +++ b/drivers/tty/serial/sh-sci.c |
| @@ -2206,8 +2206,12 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, |
| unsigned long max_freq = 0; |
| int best_clk = -1; |
| |
| - if ((termios->c_cflag & CSIZE) == CS7) |
| + if ((termios->c_cflag & CSIZE) == CS7) { |
| smr_val |= SCSMR_CHR; |
| + } else { |
| + termios->c_cflag &= ~CSIZE; |
| + termios->c_cflag |= CS8; |
| + } |
| if (termios->c_cflag & PARENB) |
| smr_val |= SCSMR_PE; |
| if (termios->c_cflag & PARODD) |
| -- |
| 2.35.1 |
| |