On Fri, Nov 14, 2025 at 10:52 AM Stephen Hemminger
<[email protected]> wrote:
>
> With gcc-16 it inlines a lot more code and creates a warnings
> where it thinks it might be manipulating bits that are not set.
> It looks like this is because the bits in control word (cword)
> in theory could be larger than the variable. Should not
> be possible because wc_ctl_size_bits is only set to 3, 16, or 32
> but that happens outside of the scope of these functions.
>
> Resolve by adding bounds check which compiler sees and knows
> the loop will only see those bits.
>
> In function ‘ulp_bs_push_msb’,
>     inlined from ‘ulp_blob_push’ at 
> ../drivers/net/bnxt/tf_ulp/ulp_utils.h:407:8,
>     inlined from ‘ulp_blob_push_32’ at 
> ../drivers/net/bnxt/tf_ulp/ulp_utils.h:551:7,
>     inlined from ‘ulp_mapper_wc_tcam_tbl_dyn_post_process’ at 
> ../drivers/net/bnxt/tf_ulp/ulp_mapper.c:2487:9:
> ../drivers/net/bnxt/tf_ulp/ulp_utils.h:336:17: warning: ‘cword’ may be used 
> uninitialized [-Wmaybe-uninitialized]
>   336 |                 ulp_bs_put_msb(bs, pos, 8, val[i]);
>       |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> ../drivers/net/bnxt/tf_ulp/ulp_mapper.c: In function 
> ‘ulp_mapper_wc_tcam_tbl_dyn_post_process’:
> ../drivers/net/bnxt/tf_ulp/ulp_mapper.c:2443:18: note: ‘cword’ declared here
>  2443 |         uint32_t cword, i, rc;
>       |                  ^~~~~
>
> Bugzilla ID: 1821
> Fixes: 3fe124d2536c ("net/bnxt: support Thor platform")
> Cc: [email protected]
>
> Signed-off-by: Stephen Hemminger <[email protected]>
Acked-by: Ajit Khaparde <[email protected]>

> ---
>  drivers/net/bnxt/tf_ulp/ulp_mapper.c     | 5 +++++
>  drivers/net/bnxt/tf_ulp/ulp_mapper_tfc.c | 4 ++++
>  2 files changed, 9 insertions(+)
>
> diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.c 
> b/drivers/net/bnxt/tf_ulp/ulp_mapper.c
> index 0ff952950b..960cdda311 100644
> --- a/drivers/net/bnxt/tf_ulp/ulp_mapper.c
> +++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.c
> @@ -2446,6 +2446,11 @@ ulp_mapper_wc_tcam_tbl_dyn_post_process(struct 
> bnxt_ulp_device_params *dparms,
>
>         slice_width = dparms->wc_slice_width;
>         clen = dparms->wc_ctl_size_bits;
> +       if (clen > 32) {
> +               BNXT_DRV_DBG(ERR, "Key size bits %d too large\n", clen);
> +               return -EINVAL;
> +       }
> +
>         max_slices = dparms->wc_max_slices;
>         blen = ulp_blob_data_len_get(key);
>
> diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper_tfc.c 
> b/drivers/net/bnxt/tf_ulp/ulp_mapper_tfc.c
> index f99698a1d8..2d89f10d5e 100644
> --- a/drivers/net/bnxt/tf_ulp/ulp_mapper_tfc.c
> +++ b/drivers/net/bnxt/tf_ulp/ulp_mapper_tfc.c
> @@ -90,6 +90,10 @@ ulp_mapper_tfc_wc_tcam_post_process(struct 
> bnxt_ulp_device_params *dparms,
>
>         slice_width = dparms->wc_slice_width;
>         clen = dparms->wc_ctl_size_bits;
> +       if (clen > 32) {
> +               BNXT_DRV_DBG(ERR, "Key size bits %d too large\n", clen);
> +               return -EINVAL;
> +       }
>         max_slices = dparms->wc_max_slices;
>         blen = ulp_blob_data_len_get(key);
>
> --
> 2.51.0
>

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to