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]
Date:   Fri, 2 Apr 2021 08:53:49 -0500
From:   Corey Minyard <minyard@....org>
To:     Andy Shevchenko <andriy.shevchenko@...ux.intel.com>
Cc:     Corey Minyard <cminyard@...sta.com>,
        openipmi-developer@...ts.sourceforge.net,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH v1 06/10] ipmi_si: Reuse si_to_str array in
 ipmi_hardcode_init_one()

On Tue, Mar 30, 2021 at 09:16:45PM +0300, Andy Shevchenko wrote:
> Instead of making the comparison one by one, reuse si_to_str array
> in ipmi_hardcode_init_one() in conjunction with match_string() API.
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@...ux.intel.com>
> ---
>  drivers/char/ipmi/ipmi_si.h          |  3 +++
>  drivers/char/ipmi/ipmi_si_hardcode.c | 23 +++++++++--------------
>  drivers/char/ipmi/ipmi_si_intf.c     |  2 --
>  3 files changed, 12 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/char/ipmi/ipmi_si.h b/drivers/char/ipmi/ipmi_si.h
> index bac0ff86e48e..fd3167d1e1e9 100644
> --- a/drivers/char/ipmi/ipmi_si.h
> +++ b/drivers/char/ipmi/ipmi_si.h
> @@ -22,6 +22,9 @@ enum si_type {
>  	SI_TYPE_INVALID, SI_KCS, SI_SMIC, SI_BT
>  };
>  
> +/* 'invalid' to allow a firmware-specified interface to be disabled */
> +static __maybe_unused const char *const si_to_str[] = { "invalid", "kcs", "smic", "bt" };

Can we just make this non-static and leave the definition where it is?
That would save a little space and wouldn't affect performance at all.

-corey

> +
>  enum ipmi_addr_space {
>  	IPMI_IO_ADDR_SPACE, IPMI_MEM_ADDR_SPACE
>  };
> diff --git a/drivers/char/ipmi/ipmi_si_hardcode.c b/drivers/char/ipmi/ipmi_si_hardcode.c
> index f6ece7569504..cf3797523469 100644
> --- a/drivers/char/ipmi/ipmi_si_hardcode.c
> +++ b/drivers/char/ipmi/ipmi_si_hardcode.c
> @@ -80,26 +80,21 @@ static void __init ipmi_hardcode_init_one(const char *si_type_str,
>  					  enum ipmi_addr_space addr_space)
>  {
>  	struct ipmi_plat_data p;
> +	int t;
>  
>  	memset(&p, 0, sizeof(p));
>  
>  	p.iftype = IPMI_PLAT_IF_SI;
> -	if (!si_type_str || !*si_type_str || strcmp(si_type_str, "kcs") == 0) {
> +	if (!si_type_str || !*si_type_str) {
>  		p.type = SI_KCS;
> -	} else if (strcmp(si_type_str, "smic") == 0) {
> -		p.type = SI_SMIC;
> -	} else if (strcmp(si_type_str, "bt") == 0) {
> -		p.type = SI_BT;
> -	} else if (strcmp(si_type_str, "invalid") == 0) {
> -		/*
> -		 * Allow a firmware-specified interface to be
> -		 * disabled.
> -		 */
> -		p.type = SI_TYPE_INVALID;
>  	} else {
> -		pr_warn("Interface type specified for interface %d, was invalid: %s\n",
> -			i, si_type_str);
> -		return;
> +		t = match_string(si_to_str, ARRAY_SIZE(si_to_str), si_type_str);
> +		if (t < 0) {
> +			pr_warn("Interface type specified for interface %d, was invalid: %s\n",
> +				i, si_type_str);
> +			return;
> +		}
> +		p.type = t;
>  	}
>  
>  	p.regsize = regsizes[i];
> diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
> index be41a473e3c2..ff448098f185 100644
> --- a/drivers/char/ipmi/ipmi_si_intf.c
> +++ b/drivers/char/ipmi/ipmi_si_intf.c
> @@ -70,8 +70,6 @@ enum si_intf_state {
>  #define IPMI_BT_INTMASK_CLEAR_IRQ_BIT	2
>  #define IPMI_BT_INTMASK_ENABLE_IRQ_BIT	1
>  
> -static const char * const si_to_str[] = { "invalid", "kcs", "smic", "bt" };
> -
>  static bool initialized;
>  
>  /*
> -- 
> 2.30.2
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ