lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <YJkEH+WVukPqne6w@hovoldconsulting.com>
Date:   Mon, 10 May 2021 11:59:59 +0200
From:   Johan Hovold <johan@...nel.org>
To:     Jiri Slaby <jslaby@...e.cz>
Cc:     gregkh@...uxfoundation.org, linux-serial@...r.kernel.org,
        linux-kernel@...r.kernel.org, Arnd Bergmann <arnd@...db.de>,
        David Lin <dtwlin@...il.com>, Alex Elder <elder@...nel.org>,
        Shawn Guo <shawnguo@...nel.org>,
        Sascha Hauer <s.hauer@...gutronix.de>,
        Andy Gross <agross@...nel.org>,
        Bjorn Andersson <bjorn.andersson@...aro.org>,
        Maxime Coquelin <mcoquelin.stm32@...il.com>,
        Alexandre Torgue <alexandre.torgue@...s.st.com>,
        Oliver Neukum <oneukum@...e.com>
Subject: Re: [PATCH 35/35] tty: make use of tty_get_byte_size

On Wed, May 05, 2021 at 11:19:28AM +0200, Jiri Slaby wrote:
> In the previous patch, we introduced tty_get_byte_size for computing
> byte size. Here, we make use of it in various tty drivers.
> 
> The stats look nice: 16 insertions, 203 deletions.
> 
> Signed-off-by: Jiri Slaby <jslaby@...e.cz>
> Cc: Arnd Bergmann <arnd@...db.de>
> Cc: David Lin <dtwlin@...il.com>
> Cc: Johan Hovold <johan@...nel.org>
> Cc: Alex Elder <elder@...nel.org>
> Cc: Shawn Guo <shawnguo@...nel.org>
> Cc: Sascha Hauer <s.hauer@...gutronix.de>
> Cc: Andy Gross <agross@...nel.org>
> Cc: Bjorn Andersson <bjorn.andersson@...aro.org>
> Cc: Maxime Coquelin <mcoquelin.stm32@...il.com>
> Cc: Alexandre Torgue <alexandre.torgue@...s.st.com>
> Cc: Oliver Neukum <oneukum@...e.com>
> ---
>  drivers/char/pcmcia/synclink_cs.c           |  8 +-----
>  drivers/staging/greybus/uart.c              | 16 +----------
>  drivers/tty/serial/cpm_uart/cpm_uart_core.c | 19 +-----------
>  drivers/tty/serial/mxs-auart.c              | 18 +-----------
>  drivers/tty/serial/qcom_geni_serial.c       | 16 +----------
>  drivers/tty/serial/sh-sci.c                 | 20 +------------
>  drivers/tty/serial/stm32-usart.c            | 32 +--------------------
>  drivers/tty/synclink_gt.c                   |  9 +-----
>  drivers/usb/class/cdc-acm.c                 | 17 ++---------
>  drivers/usb/serial/belkin_sa.c              | 21 ++------------
>  drivers/usb/serial/cypress_m8.c             | 19 ++----------
>  drivers/usb/serial/pl2303.c                 | 15 +---------
>  drivers/usb/serial/whiteheat.c              |  9 +-----
>  13 files changed, 16 insertions(+), 203 deletions(-)

> diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c
> index f414d6acad69..a5cbd7324268 100644
> --- a/drivers/tty/serial/mxs-auart.c
> +++ b/drivers/tty/serial/mxs-auart.c
> @@ -971,23 +971,7 @@ static void mxs_auart_settermios(struct uart_port *u,
>  	ctrl2 = mxs_read(s, REG_CTRL2);
>  
>  	/* byte size */
> -	switch (cflag & CSIZE) {
> -	case CS5:
> -		bm = 0;
> -		break;
> -	case CS6:
> -		bm = 1;
> -		break;
> -	case CS7:
> -		bm = 2;
> -		break;
> -	case CS8:
> -		bm = 3;
> -		break;
> -	default:
> -		return;
> -	}
> -
> +	bm = tty_get_byte_size(cflag, false) - 5;

This looks weird. The 0..3 constants are really "magic constants"
representing the different word sizes. Subtracting an offset obfuscates
this. Perhaps better left unchanged or add an appropriately names define
for the offset to make it clear what is going on here.

> diff --git a/drivers/usb/serial/cypress_m8.c b/drivers/usb/serial/cypress_m8.c
> index 1dca04e1519d..b135ed1ee512 100644
> --- a/drivers/usb/serial/cypress_m8.c
> +++ b/drivers/usb/serial/cypress_m8.c
> @@ -887,23 +887,8 @@ static void cypress_set_termios(struct tty_struct *tty,
>  	} else
>  		parity_enable = parity_type = 0;
>  
> -	switch (cflag & CSIZE) {
> -	case CS5:
> -		data_bits = 0;
> -		break;
> -	case CS6:
> -		data_bits = 1;
> -		break;
> -	case CS7:
> -		data_bits = 2;
> -		break;
> -	case CS8:
> -		data_bits = 3;
> -		break;
> -	default:
> -		dev_err(dev, "%s - CSIZE was set, but not CS5-CS8\n", __func__);
> -		data_bits = 3;
> -	}
> +	data_bits = tty_get_byte_size(cflag, false) - 5;
> +

Same here.

>  	spin_lock_irqsave(&priv->lock, flags);
>  	oldlines = priv->line_control;
>  	if ((cflag & CBAUD) == B0) {
> diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c
> index fd773d252691..76e4d90a9d43 100644
> --- a/drivers/usb/serial/pl2303.c
> +++ b/drivers/usb/serial/pl2303.c
> @@ -788,20 +788,7 @@ static void pl2303_set_termios(struct tty_struct *tty,
>  
>  	pl2303_get_line_request(port, buf);
>  
> -	switch (C_CSIZE(tty)) {
> -	case CS5:
> -		buf[6] = 5;
> -		break;
> -	case CS6:
> -		buf[6] = 6;
> -		break;
> -	case CS7:
> -		buf[6] = 7;
> -		break;
> -	default:
> -	case CS8:
> -		buf[6] = 8;
> -	}
> +	buf[6] = tty_get_byte_size(C_CSIZE(tty), false);

Passing tty->termios would be better, but either way no need to mask off
the non CSIZE bits here.

Johan

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ