Patch "net/ice: fix initializing the bitmap in the switch code" has been added to the 5.18-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    net/ice: fix initializing the bitmap in the switch code

to the 5.18-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-ice-fix-initializing-the-bitmap-in-the-switch-co.patch
and it can be found in the queue-5.18 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit f68b83aea97b0ad8a4b27e4a69428646808ed9f4
Author: Alexander Lobakin <alexandr.lobakin@xxxxxxxxx>
Date:   Fri Jun 24 14:13:11 2022 +0200

    net/ice: fix initializing the bitmap in the switch code
    
    [ Upstream commit 2f7ee2a72ccec8b85a05c4644d7ec9f40c1c50c8 ]
    
    Kbuild spotted the following bug during the testing of one of
    the optimizations:
    
    In file included from include/linux/cpumask.h:12,
    [...]
                    from drivers/net/ethernet/intel/ice/ice_switch.c:4:
    drivers/net/ethernet/intel/ice/ice_switch.c: In function 'ice_find_free_recp_res_idx.constprop':
    include/linux/bitmap.h:447:22: warning: 'possible_idx[0]' is used uninitialized [-Wuninitialized]
      447 |                 *map |= GENMASK(start + nbits - 1, start);
          |                      ^~
    In file included from drivers/net/ethernet/intel/ice/ice.h:7,
                     from drivers/net/ethernet/intel/ice/ice_lib.h:7,
                     from drivers/net/ethernet/intel/ice/ice_switch.c:4:
    drivers/net/ethernet/intel/ice/ice_switch.c:4929:24: note: 'possible_idx[0]' was declared here
     4929 |         DECLARE_BITMAP(possible_idx, ICE_MAX_FV_WORDS);
          |                        ^~~~~~~~~~~~
    include/linux/types.h:11:23: note: in definition of macro 'DECLARE_BITMAP'
       11 |         unsigned long name[BITS_TO_LONGS(bits)]
          |                       ^~~~
    
    %ICE_MAX_FV_WORDS is 48, so bitmap_set() here was initializing only
    48 bits, leaving a junk in the rest 16.
    It was previously hidden due to that filling 48 bits makes
    bitmap_set() call external __bitmap_set(), but after making it use
    plain bit arithmetics on small bitmaps, compilers started seeing
    the issue. It was still working because those 16 weren't used
    anywhere anyhow.
    bitmap_{clear,set}() are not really intended to initialize bitmaps,
    rather to modify already initialized ones, as they don't do anything
    past the passed number of bits. The correct function to do this in
    that particular case is bitmap_fill(), so use it here. It will do
    `*possible_idx = ~0UL` instead of `*possible_idx |= GENMASK(47, 0)`,
    not leaving anything in an undefined state.
    
    Fixes: fd2a6b71e300 ("ice: create advanced switch recipe")
    Reported-by: kernel test robot <lkp@xxxxxxxxx>
    Signed-off-by: Alexander Lobakin <alexandr.lobakin@xxxxxxxxx>
    Signed-off-by: Yury Norov <yury.norov@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/intel/ice/ice_switch.c b/drivers/net/ethernet/intel/ice/ice_switch.c
index 25b8f6f726eb..73960c8f9dba 100644
--- a/drivers/net/ethernet/intel/ice/ice_switch.c
+++ b/drivers/net/ethernet/intel/ice/ice_switch.c
@@ -4874,7 +4874,7 @@ ice_find_free_recp_res_idx(struct ice_hw *hw, const unsigned long *profiles,
 	bitmap_zero(recipes, ICE_MAX_NUM_RECIPES);
 	bitmap_zero(used_idx, ICE_MAX_FV_WORDS);
 
-	bitmap_set(possible_idx, 0, ICE_MAX_FV_WORDS);
+	bitmap_fill(possible_idx, ICE_MAX_FV_WORDS);
 
 	/* For each profile we are going to associate the recipe with, add the
 	 * recipes that are associated with that profile. This will give us



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux