Re: [PATCH v1 1/4] serial: core: Use string length for SysRq magic sequence

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 3/10/20 1:20 PM, Andy Shevchenko wrote:
> Compiler is not happy about using ARRAY_SIZE() in comparison to smaller type:
> 
>   CC      drivers/tty/serial/serial_core.o
> .../serial_core.c: In function ‘uart_try_toggle_sysrq’:
> .../serial_core.c:3222:24: warning: comparison is always false due to limited range of data type [-Wtype-limits]
>  3222 |  if (++port->sysrq_seq < (ARRAY_SIZE(sysrq_toggle_seq) - 1)) {
>       |                        ^
> 
> Looking at the code it appears that there is an additional weirdness,
> i.e. use ARRAY_SIZE() against simple string literal. Yes, the idea probably
> was to allow '\0' in the sequence, but it's impractical: kernel configuration
> won't accept it to begin with followed by a comment about '\0' before
> comparison in question.
> 
> Drop all these by switching to strlen() and convert code accordingly.
> 
> Fixes: 68af43173d3f ("serial/sysrq: Add MAGIC_SYSRQ_SERIAL_SEQUENCE")
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>

Reviewed-by: Dmitry Safonov <0x7f454c46@xxxxxxxxx>

Thanks!

> ---
>  drivers/tty/serial/serial_core.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
> index aec98db45406..ec3b833e9f22 100644
> --- a/drivers/tty/serial/serial_core.c
> +++ b/drivers/tty/serial/serial_core.c
> @@ -3209,7 +3209,9 @@ static DECLARE_WORK(sysrq_enable_work, uart_sysrq_on);
>   */
>  static bool uart_try_toggle_sysrq(struct uart_port *port, unsigned int ch)
>  {
> -	if (ARRAY_SIZE(sysrq_toggle_seq) <= 1)
> +	int sysrq_toggle_seq_len = strlen(sysrq_toggle_seq);
> +
> +	if (!sysrq_toggle_seq_len)
>  		return false;
>  
>  	BUILD_BUG_ON(ARRAY_SIZE(sysrq_toggle_seq) >= U8_MAX);
> @@ -3218,8 +3220,7 @@ static bool uart_try_toggle_sysrq(struct uart_port *port, unsigned int ch)
>  		return false;
>  	}
>  
> -	/* Without the last \0 */
> -	if (++port->sysrq_seq < (ARRAY_SIZE(sysrq_toggle_seq) - 1)) {
> +	if (++port->sysrq_seq < sysrq_toggle_seq_len) {
>  		port->sysrq = jiffies + SYSRQ_TIMEOUT;
>  		return true;
>  	}
> 

-- 
          Dima



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux