diff mbox series

[net-next] eth: mlx5: avoid iterator use outside of a loop

Message ID 20230414180729.198284-1-kuba@kernel.org (mailing list archive)
State Superseded
Delegated to: Netdev Maintainers
Headers show
Series [net-next] eth: mlx5: avoid iterator use outside of a loop | expand

Checks

Context Check Description
netdev/series_format success Single patches do not need cover letters
netdev/tree_selection success Clearly marked for net-next
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit fail Errors and warnings before: 18 this patch: 19
netdev/cc_maintainers warning 1 maintainers not CCed: linux-rdma@vger.kernel.org
netdev/build_clang success Errors and warnings before: 18 this patch: 18
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn fail Errors and warnings before: 18 this patch: 19
netdev/checkpatch success total: 0 errors, 0 warnings, 0 checks, 13 lines checked
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Jakub Kicinski April 14, 2023, 6:07 p.m. UTC
Fix the following warning about risky iterator use:

drivers/net/ethernet/mellanox/mlx5/core/eq.c:1010 mlx5_comp_irq_get_affinity_mask() warn: iterator used outside loop: 'eq'

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
CC: saeedm@nvidia.com
CC: leon@kernel.org
---
 drivers/net/ethernet/mellanox/mlx5/core/eq.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

Comments

kernel test robot April 15, 2023, 4:20 a.m. UTC | #1
Hi Jakub,

kernel test robot noticed the following build warnings:

[auto build test WARNING on net-next/main]

url:    https://github.com/intel-lab-lkp/linux/commits/Jakub-Kicinski/eth-mlx5-avoid-iterator-use-outside-of-a-loop/20230415-021112
patch link:    https://lore.kernel.org/r/20230414180729.198284-1-kuba%40kernel.org
patch subject: [PATCH net-next] eth: mlx5: avoid iterator use outside of a loop
config: arm64-randconfig-s052-20230413 (https://download.01.org/0day-ci/archive/20230415/202304151226.OgvGHiJI-lkp@intel.com/config)
compiler: aarch64-linux-gcc (GCC) 12.1.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.4-39-gce1a6720-dirty
        # https://github.com/intel-lab-lkp/linux/commit/1432c0a2b6d7ea977dad5de303481b1aae454ef4
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Jakub-Kicinski/eth-mlx5-avoid-iterator-use-outside-of-a-loop/20230415-021112
        git checkout 1432c0a2b6d7ea977dad5de303481b1aae454ef4
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arm64 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/net/ethernet/mellanox/mlx5/core/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202304151226.OgvGHiJI-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/net/ethernet/mellanox/mlx5/core/eq.c:1077:16: sparse: sparse: Using plain integer as NULL pointer

vim +1077 drivers/net/ethernet/mellanox/mlx5/core/eq.c

  1063	
  1064	struct cpumask *
  1065	mlx5_comp_irq_get_affinity_mask(struct mlx5_core_dev *dev, int vector)
  1066	{
  1067		struct mlx5_eq_table *table = dev->priv.eq_table;
  1068		struct mlx5_eq_comp *eq;
  1069		int i = 0;
  1070	
  1071		list_for_each_entry(eq, &table->comp_eqs_list, list) {
  1072			if (i++ == vector)
  1073				return mlx5_irq_get_affinity_mask(eq->core.irq);
  1074		}
  1075	
  1076		WARN_ON_ONCE(1);
> 1077		return 0;
  1078	}
  1079	EXPORT_SYMBOL(mlx5_comp_irq_get_affinity_mask);
  1080
Leon Romanovsky April 16, 2023, 10:17 a.m. UTC | #2
On Fri, Apr 14, 2023 at 11:07:29AM -0700, Jakub Kicinski wrote:
> Fix the following warning about risky iterator use:
> 
> drivers/net/ethernet/mellanox/mlx5/core/eq.c:1010 mlx5_comp_irq_get_affinity_mask() warn: iterator used outside loop: 'eq'
> 
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
> CC: saeedm@nvidia.com
> CC: leon@kernel.org
> ---
>  drivers/net/ethernet/mellanox/mlx5/core/eq.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eq.c b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
> index eb41f0abf798..03c0165a8fd5 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/eq.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
> @@ -1070,10 +1070,11 @@ mlx5_comp_irq_get_affinity_mask(struct mlx5_core_dev *dev, int vector)
>  
>  	list_for_each_entry(eq, &table->comp_eqs_list, list) {
>  		if (i++ == vector)
> -			break;
> +			return mlx5_irq_get_affinity_mask(eq->core.irq);
>  	}
>  
> -	return mlx5_irq_get_affinity_mask(eq->core.irq);
> +	WARN_ON_ONCE(1);
> +	return 0;

I would do it without changing last return, but "return ERR_PTR(0);"
will do the trick too.

Thanks

>  }
>  EXPORT_SYMBOL(mlx5_comp_irq_get_affinity_mask);
>  
> -- 
> 2.39.2
>
Jakub Kicinski April 17, 2023, 7:44 p.m. UTC | #3
On Sun, 16 Apr 2023 13:17:53 +0300 Leon Romanovsky wrote:
> > -	return mlx5_irq_get_affinity_mask(eq->core.irq);
> > +	WARN_ON_ONCE(1);
> > +	return 0;  
> 
> I would do it without changing last return, but "return ERR_PTR(0);"
> will do the trick too.

Hm, I've not seen ERR_PTR(0) used before. I'll return NULL. 
Looks like callers pass the value to cpumask_first() without checking 
so either way the warning will be followed by a crash 
diff mbox series

Patch

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eq.c b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
index eb41f0abf798..03c0165a8fd5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eq.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eq.c
@@ -1070,10 +1070,11 @@  mlx5_comp_irq_get_affinity_mask(struct mlx5_core_dev *dev, int vector)
 
 	list_for_each_entry(eq, &table->comp_eqs_list, list) {
 		if (i++ == vector)
-			break;
+			return mlx5_irq_get_affinity_mask(eq->core.irq);
 	}
 
-	return mlx5_irq_get_affinity_mask(eq->core.irq);
+	WARN_ON_ONCE(1);
+	return 0;
 }
 EXPORT_SYMBOL(mlx5_comp_irq_get_affinity_mask);