On Fri, Nov 14, 2025 at 10:52 AM Stephen Hemminger 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: stable@dpdk.org > > Signed-off-by: Stephen Hemminger Acked-by: Ajit Khaparde > --- > 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 >